विघटनकर्ता - एक नया बहुप्रचलित प्रोग्रामिंग प्रतिमान

पिछले हफ्ते, LMAX कंपनी, जहां मैंने काम किया, ने विघटनकारी ढांचे के लिए जावा ड्यूक के च्वाइस अवार्ड 2011 जीता । इससे पहले, मार्टिन फॉलर , ऑब्जेक्ट प्रोग्रामिंग पर प्रकाशन के लिए कई पाठकों के लिए जाना जाता है, इस तकनीक के बारे में लिखा था

इस लेख में, मैं इस तकनीक के बारे में संक्षेप में बात करना चाहूंगा, साथ ही साथ उस विशिष्ट समस्या के बारे में भी जिसे यह तकनीक LMAX में हल करती है।

LMAX बहुत कम विलंबता और उच्च प्रवाह के साथ एक CFD और विदेशी मुद्रा व्यापार मंच प्रदान करता है।

प्रति सेकंड 10 हजार से अधिक संचालन की निष्पादन गति प्राप्त करने के लिए, LMAX ने डिस्प्रेटर पैटर्न विकसित किया। यह समानांतर प्रोग्रामिंग समस्याओं को हल करने के लिए एक पूरी तरह से नया और बहुत ही अपरंपरागत दृष्टिकोण है। विघटन उच्च थ्रूपुट और बहुत कम विलंबता के साथ एक बहु-थ्रेडेड समानांतर लेनदेन प्रसंस्करण ढांचा है। विघटनकारी LMAX java.util.concurrent.ArrayBlockingQueue की जगह लेता है और 80 बार तक के प्रदर्शन में इसे पीछे छोड़ देता है।

मल्टीथ्रेडेड प्रोग्रामिंग समस्या


प्रदर्शन परीक्षण से पता चला है कि सिस्टम के कुछ हिस्सों के बीच डेटा स्थानांतरित करने के लिए कतारों का उपयोग करके देरी उत्पन्न की जाती है। थ्रेड लॉकिंग और सेमाफोर को समझना और परीक्षण करना मुश्किल है, और अक्सर उनका उपयोग करने से वास्तविक समस्या को हल करने के लिए डिबग करने में अधिक समय लगता है। साथ ही, बहु-थ्रेडेड प्रोग्रामिंग के परीक्षण से पता चला कि कई थ्रेड्स का उपयोग करने से न केवल उच्च प्रदर्शन होता है, बल्कि यह कम भी हो जाता है।

टेबल 2.4Ghz के नेहल्म प्रोसेसर (एक सहयोगी के ब्लॉग से चोरी) पर विभिन्न तकनीकों का उपयोग करके 64-बिट काउंटर 500 मिलियन बार बढ़ाने की लागत को दिखाता है।
विधि
समय (ms)
एकल धागा
300
मेमोरी बैरियर के साथ सिंगल स्ट्रीम
4,700
CAS के साथ सिंगल स्ट्रीम
5700
कैस के साथ दो धाराएँ
30,000
ताला के साथ एकल धागा
10,000
लॉक के साथ दो धागे
224,000


LMAX दृष्टिकोण


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

LMAX आर्किटेक्चर में, यह ऑपरेशन दो भागों में विभाजित होगा। पहला ऑपरेशन ऑर्डर के बारे में जानकारी का संग्रह है, जो क्रेडिट कार्ड कंपनी के लिए घटना (क्रेडिट कार्ड सत्यापन अनुरोध) के समापन के साथ समाप्त होगा। व्यावसायिक तर्क प्रोसेसर तब तक अन्य ग्राहकों के लिए ईवेंट को संसाधित करना जारी रखेगा, जब तक कि उसे इनपुट इवेंट स्ट्रीम में क्रेडिट कार्ड सत्यापन घटना प्राप्त न हो जाए। इस घटना को संसाधित करने के बाद, एक आदेश की पुष्टि की जाएगी।

थ्रेड्स के बीच संदेशों का आदान-प्रदान करने के लिए विघटन एक बहुत ही उच्च गति, कम-विलंबता तरीका है। यह स्टेरॉयड पर एक बड़ी कतार (स्टेरॉयड की बड़ी मात्रा पर!) की तरह है और यह LMAX एक्सचेंज के मुख्य नवाचारों में से एक है। विघटनकर्ता में निर्माता, उपभोक्ता और परिपत्र बफर शामिल हैं। प्रत्येक निर्माता और उपभोक्ता सीरियल नंबर जानता है - बफर में सेल जो वह वर्तमान में प्रसंस्करण कर रहा है। प्रत्येक निर्माता और उपभोक्ता काउंटर पर अपना नंबर लिखते हैं, और अन्य काउंटर पढ़ सकते हैं। इस प्रकार, उपभोक्ता यह सुनिश्चित करने के लिए निर्माता के काउंटर को पढ़ सकता है कि वह जिस सेल में लिखना चाहता है वह उपलब्ध है। साथ ही, उपभोक्ता यह सत्यापित कर सकता है कि किसी अन्य उपभोक्ता द्वारा प्रसंस्करण समाप्त होने के बाद ही वह संदेश को संसाधित करता है।

LMAX में व्यवधान

डिस्क्राइटर का लाभ यह है कि उपभोक्ता जल्दी से दूसरों के साथ पकड़ सकता है यदि वे पीछे हैं। यदि संदेश कनवर्टर (अन-मार्शेलर) सेल 15 में एक समस्या का सामना करता है, और रिसीवर 31 सेल में होने पर इसे समझता है, तो यह एक बार में 16-30 कोशिकाओं के डेटा को पढ़ सकता है और जल्दी से पकड़ सकता है। बड़े ब्लॉकों को पढ़ने की क्षमता उपभोक्ताओं को पिछड़ने में मदद करती है और दूसरों के साथ जल्दी पकड़ती है, इस प्रकार विलंबता को कम करती है।

व्यावसायिक तर्क प्रोसेसर एकल-थ्रेडेड जावा प्रोग्राम का उपयोग करके संपूर्ण व्यावसायिक तर्क को नियंत्रित करता है जो विधि कॉल का जवाब देता है और आउटपुट ईवेंट का उत्पादन करता है। यह डेटाबेस या अन्य लगातार स्टोरेज के बिना रैम में पूरी तरह से काम करता है।

यद्यपि व्यावसायिक तर्क को एक ही सूत्र में लागू किया जाता है, लेकिन व्यावसायिक ऑब्जेक्ट को लागू करने से पहले कई कार्यों का प्रदर्शन किया जाना चाहिए। नेटवर्क से आने वाला एक संदेश व्यावसायिक तर्क के लिए सुविधाजनक प्रारूप में अनमर्ष है, यह एक विश्वसनीय ड्राइव के लिए बचाया जाना चाहिए ताकि दुर्घटना की स्थिति में डेटा को पुनर्प्राप्त करने में सक्षम हो।

इन समस्याओं को इनपुट और आउटपुट डिसऑप्टर्स द्वारा हल किया जाता है। व्यावसायिक तर्क प्रोसेसर के विपरीत, ये समानांतर घटक हैं क्योंकि इनमें I / O संचालन शामिल हैं जो धीमे और स्वतंत्र हैं।

छवि

चूंकि घटनाओं की इनपुट स्ट्रीम एक विश्वसनीय भंडारण में संग्रहीत है (यह इनपुट डिस्प्रेटर के कार्यों में से एक है), आप इनपुट घटनाओं को फिर से दोहराते हुए हमेशा व्यापार तर्क प्रोसेसर की वर्तमान स्थिति को पुनर्स्थापित कर सकते हैं - जैसे संस्करण नियंत्रण प्रणाली में, परिवर्तनों का एक क्रम होने पर, आप दस्तावेज़ का अंतिम संस्करण प्राप्त कर सकते हैं ।

निष्कर्ष और संसाधन


विघटनकर्ता प्रत्येक विकास का एक सार्वभौमिक समाधान नहीं है, लेकिन यदि इसे सही ढंग से उपयोग किया जाता है, तो यह सॉफ्टवेयर सिस्टम की गति में एक उल्लेखनीय वृद्धि दिखा सकता है।
अक्सर वित्तीय कंपनियां अपनी तकनीक के बारे में बात नहीं करती हैं। LMAX न केवल अपने घटनाक्रमों के बारे में खुलकर बात करती है ( ब्लॉग देखें), बल्कि ओपन सोर्स में विघटनकर्ता कोड भी जारी किया।

यह भी देखें - आधिकारिक LMAX वेबसाइट और रूसी में LMAX भागीदार साइट

पुनश्च मैं जोड़ूंगा कि यह ढांचा LMAX ट्रेडिंग प्लेटफॉर्म के केंद्र में है, एक साल पहले लॉन्च किया गया था, और सफलतापूर्वक प्रति सेकंड हजारों लेनदेन को संसाधित कर रहा था।

Source: https://habr.com/ru/post/In130113/


All Articles