GaiaEx AcademyGaiaEx Academy
ट्रेडिंग सिस्टम्स के लिए सॉफ्टवेयर इंजीनियरिंग डिज़ाइन पैटर्न
डेवलपरप्रोग्रामिंग12 min read

ट्रेडिंग सिस्टम्स के लिए सॉफ्टवेयर इंजीनियरिंग डिज़ाइन पैटर्न

इवेंट सोर्सिंग, CQRS, और एक्सचेंजों द्वारा इस्तेमाल किए जाने वाले आर्किटेक्चर पैटर्न

पोस्ट साझा करें

ट्रेडिंग सिस्टम्स में पैटर्न क्यों ज़रूरी हैं

फाइनेंशियल सॉफ्टवेयर महंगे तरीकों से फेल होता है: डुप्लिकेट ऑर्डर, असंगत बैलेंस, चुपचाप होने वाली पार्शियल फेलियर। डिज़ाइन पैटर्न कोई ट्रॉफी नहीं हैं — ये दोहराई जाने वाली फेलियर स्थितियों के जवाब हैं: ऑडिट-योग्यता के लिए इवेंट सोर्सिंग, रीड को राइट से अलग स्केल करने के लिए CQRS, फैलती हुई आउटेज रोकने के लिए सर्किट ब्रेकर, और यह सुनिश्चित करने के लिए इडेम्पोटेंसी कि रीट्राई से डबल-ट्रेड न हो जाए।

CQRS + इवेंट लॉग (वैचारिक) Write साइड कमांड्स वेलिडेट इवेंट जोड़ें (append) इवेंट लॉग immutable क्रमबद्ध (ordered) Read साइड प्रोजेक्शन्स Caches / SQL API queries Readers थोड़ा पीछे रह सकते हैं; लॉग में writers ही सत्य का स्रोत बने रहते हैं।
कमांड्स फैक्ट्स बनाते हैं; कंज़्यूमर तेज़ क्वेरी के लिए materialized views बनाते हैं।

Pub/Sub और लूज़ कपलिंग

मैचिंग इंजन, रिस्क चेक, और मार्केट-डेटा पब्लिशर को एक बड़े गड्ड-मड्ड ढाँचे में एक-दूसरे को सीधे नहीं बुलाना चाहिए। एक publish/subscribe बस मैचर को fill emit करने देती है, जबकि डाउनस्ट्रीम सर्विसेज़ अपस्ट्रीम की इम्प्लीमेंटेशन डिटेल जाने बिना सब्सक्राइब कर सकती हैं — लेकिन आपको अभी भी डिलीवरी गारंटी (at-least-once बनाम exactly-once) और रीप्ले के लिए रिटेंशन तय करना होगा।

सर्किट ब्रेकर और बल्कहेड

एक सर्किट ब्रेकर बार-बार फेलियर के बाद किसी बीमार डिपेंडेंसी को कॉल करना बंद कर देता है, जिससे उसे रिकवर होने का समय मिलता है और आपके थ्रेड पूल सुरक्षित रहते हैं। बल्कहेड रिसोर्स पूल को अलग रखते हैं ताकि एक बेकाबू एनालिटिक्स जॉब ऑर्डर सबमिशन को भूखा न मार दे।

सर्किट ब्रेकर की स्टेट्स CLOSED कॉल पास होती हैं फेलियर OPEN तुरंत फेल टाइमआउट HALF ट्रायल कॉल Half-open स्टेट में टेस्ट कॉल यह तय करती है कि फिर से close किया जाए या reopen।
फेलियर के बर्स्ट पर ट्रिप करें; ठंडा होने दें; पूरे ट्रैफिक से पहले एक कॉल से टेस्ट करें।

स्टेट मशीन्स और इडेम्पोटेंसी

ऑर्डर और ट्रांसफर के अपने वैध जीवन-क्रम होते हैं। अनुमत ट्रांज़िशन को एक फाइनाइट स्टेट मशीन में एनकोड करें ताकि अवैध जंप असंभव हो जाएँ। इसे क्लाइंट रिक्वेस्ट पर इडेम्पोटेंसी की के साथ जोड़ें ताकि नेटवर्क रीट्राई से डुप्लिकेट लाइव ऑर्डर न बन सकें।

मैचिंग इंजन: प्राइस-टाइम प्रायोरिटी

सेंट्रलाइज़्ड वेन्यू आने वाले ऑर्डर को प्राइस-टाइम प्रायोरिटी के हिसाब से मौजूदा लिक्विडिटी से मैच करते हैं। ऑन-चेन मैचर (जैसे कई L1 DEX डिज़ाइन) निश्चित रूप से डिटरमिनिस्टिक होने चाहिए: हर वैलिडेटर वही क्रम फिर से एग्ज़ीक्यूट करता है और वही state तक पहुँचता है — GaiaEx यह मॉडल Hyperliquid के नियमों से लेता है।

व्यावहारिक अपनाव (Pragmatic Adoption)

पहले ही दिन हर पैटर्न को बिना सोचे-समझे नकल न करें। साफ़ boundaries, structured logs, और पैसे की आवाजाही के आसपास टेस्ट से शुरुआत करें। जब reconciliation में परेशानी दिखे तो इवेंट लॉग जोड़ें; जब बाहरी API अस्थिर हों तो सर्किट ब्रेकर जोड़ें। पैटर्न असली परेशानियाँ सुलझाते हैं, कल्पित परेशानियाँ नहीं।