10 पॉइंट द्वारा tothefullest08 2025-04-05 | 1 टिप्पणियां | WhatsApp पर शेयर करें

परिचय

Danggeun Server meetup में Won Ji-hyeok के event sourcing पर दिए गए प्रस्तुतीकरण ने event sourcing को समझने में काफी मदद की। Event sourcing की बुनियादी अवधारणाओं को व्यवस्थित किया गया है, और प्रस्तुति की सामग्री के आधार पर NestJS, TypeScript, MongoDB आधारित एक साधारण config service भी बनाई गई है।

Event sourcing की बुनियादी अवधारणाएँ

  • पारंपरिक CRUD तरीके से अलग, सभी state changes को immutable events के रूप में रिकॉर्ड किया जाता है, जिससे audit trail और rollback आसान हो जाते हैं
  • accounting ledger की तरह सभी transactions (events) को क्रमवार रिकॉर्ड किया जाता है, ताकि किसी भी समय वर्तमान state को फिर से reconstruct किया जा सके

मुख्य घटक

  • event
    • इसमें unique ID, creation time, event type, user information, और content (body) शामिल होते हैं, और यह immutability तथा self-contained nature सुनिश्चित करता है
  • state
    • सभी events को replay करके निकाली गई final state (ज़रूरत पड़ने पर snapshot या cache का उपयोग)
  • reducer
    • pure function के रूप में previous state और event को input लेकर नई state की गणना करता है और immutability बनाए रखता है
  • entity
    • संबंधित events को एक जगह इकट्ठा कर एक object के रूप में manage किया जाता है, जिससे किसी specific entity के change history को कुशलता से देखा जा सके

Implementation example और structure

  • बुनियादी environment setup: NestJS का उपयोग करके application चलाना
  • entity और event की परिभाषा
    • TypeScript interfaces और MongoDB schema का उपयोग करके विभिन्न events (जैसे config creation, parameter add/delete) और state objects को स्पष्ट रूप से define करना
  • reducer implementation:
    • event type के अनुसार state को update करने वाले pure functions लिखकर event sequence को replay करना और final state निकालना
  • API endpoints और service layer
    • config create, query, parameter add/delete जैसी सुविधाएँ देने वाला REST API implement करना
    • dispatch-commit pattern का उपयोग करके event publish करने के बाद state calculation और event storage को क्रम से process करना

अतिरिक्त उन्नयन और external systems integration

  • generic interface
    • reusable event repository design से code duplication कम करना और type safety सुनिश्चित करना
  • event handler
    • Slack जैसे external systems के साथ integrate करके event होने पर notification भेजना जैसी अतिरिक्त processing करना
  • performance optimization strategies
    • snapshot: किसी निश्चित समय की state को save करके उसके बाद के events ही apply करना, जिससे पूरे event replay की लागत कम होती है
    • caching: in-memory cache या Redis का उपयोग करके frequently queried entity state को तेज़ी से उपलब्ध कराना

निष्कर्ष

  • Event sourcing एक शक्तिशाली architecture है जो सभी change history को स्पष्ट रूप से रिकॉर्ड करके reliability और maintainability बढ़ाता है
  • domain के अनुरूप इसे धीरे-धीरे अपनाना चाहिए, और snapshot, caching जैसी optimization strategies के साथ system performance सुनिश्चित करते हुए learning curve को ध्यान में रखकर सावधानी से लागू करना चाहिए

1 टिप्पणियां

 
guseod24 2025-04-06

बहुत बढ़िया! ^0^