उच्च-प्रदर्शन लेन-देन प्रसंस्करण के लिए सभी प्रकार की तकनीकें हैं और फाउलर के लेख में से एक रक्तस्रावी किनारे पर कई में से एक है। तकनीकों का एक गुच्छा सूचीबद्ध करने के बजाय, जो किसी की स्थिति पर लागू हो भी सकता है और नहीं भी हो सकता है, मुझे लगता है कि बुनियादी सिद्धांतों पर चर्चा करना बेहतर है और LMAX उनमें से बड़ी संख्या को कैसे संबोधित करता है।
एक उच्च-स्तरीय लेन-देन प्रसंस्करण प्रणाली के लिए आप निम्न में से सभी को यथासंभव करना चाहते हैं:
सबसे कम स्टोरेज टियर में बिताए गए समय को कम से कम करें। सबसे तेज़ से सबसे धीमी गति से आधुनिक सर्वर पर आपके पास: CPU / L1 -> L2 -> L3 -> RAM -> डिस्क / LAN -> WAN। अनुक्रमिक पहुंच के लिए सबसे तेज आधुनिक चुंबकीय डिस्क से सबसे धीमी रैम तक की छलांग 1000x से अधिक है ; रैंडम एक्सेस और भी बदतर है।
प्रतीक्षा में बिताए समय को कम या कम करना । इसका मतलब है कि जितना संभव हो उतना कम राज्य साझा करना और, जब भी राज्य साझा किया जाना चाहिए, जब भी संभव हो स्पष्ट ताले से बचें।
काम का बोझ फैलाएं। सीपीयू बहुत तेजी से पिछले कई वर्षों में मिल गया है नहीं है, लेकिन वे है छोटे मिल गया, और 8 कोर एक सर्वर पर बहुत आम है। इसके अलावा, आप कई मशीनों पर काम भी फैला सकते हैं, जो कि Google का दृष्टिकोण है; इसके बारे में महान बात यह है कि यह I / O सहित सभी चीजों को मापता है ।
फाउलर के अनुसार, LMAX इनमें से प्रत्येक के लिए निम्नलिखित दृष्टिकोण अपनाता है:
हर समय सभी स्थिति को स्मृति में रखें । अधिकांश डेटाबेस इंजन वास्तव में वैसे भी ऐसा करेंगे, यदि पूरा डेटाबेस मेमोरी में फिट हो सकता है, लेकिन वे मौका देने के लिए कुछ भी नहीं छोड़ना चाहते हैं, जो वास्तविक समय के ट्रेडिंग प्लेटफॉर्म पर समझ में आता है। जोखिम के एक टन को जोड़े बिना इसे खींचने के लिए, उन्हें हल्के बैकअप और विफलता के बुनियादी ढांचे का एक गुच्छा बनाना पड़ा।
इनपुट घटनाओं की धारा के लिए एक लॉक-फ्री कतार ("व्यवधान") का उपयोग करें। पारंपरिक टिकाऊ संदेश कतारों के विपरीत, जो निश्चित रूप से मुफ्त में लॉक नहीं होते हैं, और वास्तव में आमतौर पर दर्द-रहित वितरित लेनदेन शामिल होते हैं ।
बहुत ज्यादा नहीं। LMAX इसे बस के नीचे इस आधार पर फेंकता है कि कार्यभार अन्योन्याश्रित हैं; एक के परिणाम दूसरों के लिए मापदंडों को बदल देते हैं। यह एक महत्वपूर्ण चेतावनी है, और एक जिसे फाउलर स्पष्ट रूप से बताते हैं। वे फेलओवर क्षमताओं को प्रदान करने के लिए कुछ संगामिति का उपयोग करते हैं, लेकिन सभी व्यावसायिक तर्क एक ही धागे पर संसाधित होते हैं ।
LMAX उच्च-स्तरीय OLTP का एकमात्र तरीका नहीं है। और यद्यपि यह अपने आप में काफी शानदार है, आपको प्रदर्शन के उस स्तर को खींचने के लिए रक्तस्राव-धार तकनीकों का उपयोग करने की आवश्यकता नहीं है।
उपरोक्त सभी सिद्धांतों में, # 3 शायद सबसे महत्वपूर्ण और सबसे प्रभावी है, क्योंकि, स्पष्ट रूप से, हार्डवेयर सस्ता है। यदि आप ठीक से आधा दर्जन कोर और कई दर्जन मशीनों में कार्यभार का विभाजन कर सकते हैं, तो आकाश पारंपरिक पारम्परिक कम्प्यूटिंग तकनीकों की सीमा है। आप आश्चर्यचकित होंगे कि आप संदेश कतार और एक राउंड-रॉबिन डिस्ट्रीब्यूटर के अलावा कुछ भी नहीं कर सकते हैं। यह स्पष्ट रूप से LMAX के रूप में कुशल नहीं है - वास्तव में भी करीब नहीं है - लेकिन थ्रूपुट, विलंबता और लागत-प्रभावशीलता अलग-अलग चिंताएं हैं, और यहां हम विशेष रूप से थ्रूपुट के बारे में बात कर रहे हैं।
यदि आपके पास एक ही तरह की विशेष आवश्यकताएं हैं जो LMAX करता है - विशेष रूप से, एक साझा स्थिति जो एक व्यावसायिक वास्तविकता से मेल खाती है जैसा कि जल्दबाजी में डिजाइन की पसंद के विपरीत है - तो मैं उनके घटक की कोशिश करना चाहूंगा, क्योंकि मैंने बहुत कुछ नहीं देखा है और यह उन आवश्यकताओं के अनुकूल है। लेकिन अगर हम केवल उच्च मापदण्ड के बारे में बात कर रहे हैं, तो मैं आपसे वितरित प्रणालियों में और अधिक शोध करने का आग्रह करूंगा, क्योंकि वे आज अधिकांश संगठनों द्वारा उपयोग किए जाने वाले विहित दृष्टिकोण हैं (Hadoop और संबंधित परियोजनाएं, ESB और संबंधित आर्किटेक्चर, CQRS जो कि फेलर भी हैं। उल्लेख, और इसी तरह)।
SSDs भी गेम-चेंजर बनने जा रहे हैं; यकीनन, वे पहले से ही हैं। अब रैम के समान एक्सेस समय के साथ आपके पास स्थायी भंडारण हो सकता है, और हालांकि सर्वर-ग्रेड एसएसडी अभी भी बहुत महंगा है, वे अंततः गोद लेने की दर बढ़ने पर कीमत में कमी आएंगे। यह बड़े पैमाने पर शोध किया गया है और परिणाम बहुत दिमागदार हैं और केवल समय के साथ बेहतर हो जाएगा, इसलिए पूरे "स्मृति में सब कुछ रखें" अवधारणा बहुत कम महत्वपूर्ण है जितना कि इसका इस्तेमाल किया जा सकता है। इसलिए एक बार फिर, मैं जब भी संभव हो, संगामिति पर ध्यान देने की कोशिश करूँगा।