C# में माइक्रोसर्विसेज़: उन्नत स्तर की वास्तुकला और अभ्यास

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# में माइक्रोसर्विसेज़: उन्नत स्तर की वास्तुकला और अभ्यास

\n\n

.NET प्लेटफॉर्म पर मोनोलिथ से माइक्रोसर्विस आर्किटेक्चर में संक्रमण केवल एक तकनीकी निर्णय नहीं है, बल्कि स्केलेबिलिटी और दोष-सहनशीलता की दिशा में एक रणनीतिक कदम है। हालांकि, उन्नत स्तर पर डेवलपर्स को गैर-तुच्छ समस्याओं का सामना करना पड़ता है: वितरित लेन-देन, डेटा स्थिरता और जटिल ऑर्केस्ट्रेशन। इस लेख में, हम उन आर्किटेक्चरल पैटर्न का विश्लेषण करेंगे जो C# में एक विश्वसनीय माइक्रोसर्विस इकोसिस्टम बनाने में मदद करेंगे, और व्यावहारिक कोड उदाहरण देखेंगे।

\n\n

1. Saga पैटर्न: वितरित लेन-देन का प्रबंधन

\n\n

माइक्रोसर्विसेज़ में पारंपरिक ACID लेन-देन संभव नहीं हैं। Saga पैटर्न डेटा स्थिरता की समस्या को हल करता है, वैश्विक ऑपरेशन को क्षतिपूर्ति क्रियाओं के साथ स्थानीय लेन-देन के अनुक्रम में विभाजित करके।

\n\n

कोरियोग्राफी बनाम ऑर्केस्ट्रेशन:

\n
    \n
  • कोरियोग्राफी — प्रत्येक सेवा ईवेंट प्रकाशित करती है और उन पर प्रतिक्रिया करती है। सरल परिदृश्यों के लिए उपयुक्त।
  • \n
  • ऑर्केस्ट्रेशन — एक केंद्रीय समन्वयक (Orchestrator) चरणों का प्रबंधन करता है। जटिल व्यावसायिक प्रक्रियाओं के लिए अनुशंसित।
  • \n
\n\n

MassTransit का उपयोग करके C# में ऑर्केस्ट्रेटर कार्यान्वयन का उदाहरण:

\n\n
public class OrderSaga : MassTransitStateMachine<OrderSagaState>\n{\n    public State Submitted { get; set; }\n    public State PaymentPending { get; set; }\n    public State Completed { get; set; }\n\n    public Event<OrderSubmitted> OrderSubmitted { get; set; }\n    public Event<PaymentProcessed> PaymentProcessed { get; set; }\n    public Event<PaymentFailed> PaymentFailed { get; set; }\n\n    public OrderSaga()\n    {\n        InstanceState(x => x.CurrentState);\n\n        Initially(\n            When(OrderSubmitted)\n                .Then(context => context.Saga.OrderId = context.Message.OrderId)\n                .TransitionTo(Submitted)\n                .Publish(context => new ProcessPayment\n                {\n                    OrderId = context.Saga.OrderId,\n                    Amount = context.Message.Amount\n                })\n        );\n\n        During(Submitted,\n            When(PaymentProcessed)\n                .TransitionTo(Completed)\n                .Finalize(),\n            When(PaymentFailed)\n                .Then(context => Console.WriteLine("क्षतिपूर्ति: आदेश रद्द करना"))\n                .TransitionTo(Final)\n        );\n    }\n}
\n\n

यह कोड दर्शाता है कि कैसे ऑर्केस्ट्रेटर आदेश के जीवनचक्र का प्रबंधन करता है: सफल भुगतान पर सागा समाप्त हो जाती है, त्रुटि पर क्षतिपूर्ति शुरू हो जाती है।

\n\n

2. CQRS और Event Sourcing: जिम्मेदारी का पृथक्करण

\n\n

CQRS (Command Query Responsibility Segregation) पैटर्न कमांड (लेखन) और क्वेरी (पढ़ना) को अलग-अलग मॉडलों में विभाजित करता है। Event Sourcing (ES) के साथ संयोजन में, यह पूर्ण ऑडिटिंग और लचीलापन सुनिश्चित करता है।

\n\n

CQRS+ES आर्किटेक्चर:

\n
    \n
  • कमांड — ईवेंट के माध्यम से स्थिति बदलते हैं।
  • \n
  • ईवेंट — Event Store (जैसे, EventStoreDB) में संग्रहीत होते हैं।
  • \n
  • प्रोजेक्शन — तेज़ क्वेरी के लिए read-मॉडल बनाते हैं।
  • \n
\n\n

कमांड और हैंडलर का उदाहरण:

\n\n
public class CreateOrderCommand : ICommand\n{\n    public Guid OrderId { get; set; }\n    public decimal Amount { get; set; }\n}\n\npublic class CreateOrderHandler : ICommandHandler<CreateOrderCommand>\n{\n    private readonly IEventStore _eventStore;\n\n    public async Task Handle(CreateOrderCommand command)\n    {\n        var orderCreated = new OrderCreatedEvent\n        {\n            OrderId = command.OrderId,\n            Amount = command.Amount,\n            Timestamp = DateTime.UtcNow\n        };\n\n        await _eventStore.AppendEventAsync(\n            $"order-{command.OrderId}", \n            orderCreated\n        );\n    }\n                

ब्लॉग

पुस्तक अनुशंसाएँ