2009-07-30 18 views
35

मैं कम विलंबता वित्तीय प्रणालियों (विशेष रूप से कॉर्पोरेट जासूसी के प्रसिद्ध मामले के बारे में) के बारे में बहुत कुछ पढ़ रहा हूं और कम विलंबता प्रणाली का विचार तब से मेरे दिमाग में रहा है। ऐसे लाखों एप्लिकेशन हैं जो इन लोगों का उपयोग कर सकते हैं, इसलिए मैं इस विषय के बारे में अधिक जानना चाहता हूं। बात यह है कि मैं इस विषय के बारे में कुछ भी मूल्यवान नहीं पा रहा हूं। क्या कोई कम विलंब प्रणाली पर किताबें, साइट्स, उदाहरणों की सिफारिश कर सकता है?कम विलंबता प्रोग्रामिंग

+0

कॉर्पोरेट जासूसी का क्या प्रसिद्ध मामला? –

+3

गोल्डमैन सैक्स प्रोग्रामर ने कथित तौर पर अपने उच्च आवृत्ति व्यापार मंच पर स्रोत कोड चुरा लिया: http://ftalphaville.ft.com/blog/2009/07/08/60761/the-cold-war-in-high-frequency-trading/ – mattnewport

+0

धन्यवाद मैट! –

उत्तर

4

रीयलटाइम प्रोग्रामिंग पर कुछ भी बिल फिट होगा। यह ठीक नहीं है कि आप क्या कर रहे हैं, मुझे संदेह है, लेकिन यह शुरू करने के लिए एक बहुत ही अच्छी जगह है।

+1

रियल समय प्रोग्रामिंग कम विलंबता नहीं है, यह एक निश्चित समय अवधि के भीतर घटनाओं पर प्रतिक्रिया करने के बारे में है, जरूरी नहीं कि एक तेज़ व्यक्ति। – user997112

1

यदि मुझे सही क्षेत्र याद है तो जावा (RTSJ) इस क्षेत्र में उपयोग किया जाता है, हालांकि मुझे अभी लिंक करने के लिए एक अच्छा लेख नहीं मिला।

+0

मैं आरटीएसजे पर काम कर रहा हूं। अफसोस की बात है कि आरटीएसजे रिलीज नहीं है। (ओरेकल ने आरटीएसजे रिलीज को रोक दिया और इसके लिए समर्थन)। यह मुख्य रूप से कचरा संग्रह पर रोकें से बचाता है। – BalaB

5

ठीक है, यह सिर्फ "पारंपरिक" वास्तविक समय प्रोग्रामिंग नहीं है, इसकी सबकुछ। मैं स्टॉक एक्सचेंज के लिए काम करता हूं - गति राजा है। एक सामान्य समस्या यह है कि फ़ाइल में लिखने का सबसे तेज़ तरीका क्या है? किसी ऑब्जेक्ट को क्रमबद्ध करने का सबसे तेज़ तरीका? इत्यादि

+0

आप अपने सॉफ़्टवेयर, सी/सी ++ या कुछ और के लिए किस भाषा का उपयोग करते हैं? –

1

आमतौर पर, कम विलंबता वातावरण में काम का मतलब कॉल निर्भरताओं की समझ है और निर्भरता श्रृंखला को कम करने के लिए उन्हें कैसे कम किया जाए। इसमें वांछित कैशेबल डेटा को स्टोर करने के साथ-साथ परस्पर निर्भरता को कम करने के लिए मौजूदा संसाधनों को पुन: सक्रिय करने के लिए डेटा संरचनाओं और पुस्तकालयों का उपयोग शामिल है।

42

मैं एक वित्तीय कंपनी के लिए काम करता हूं जो सीधे संचार के लिए कम विलंबता सॉफ्टवेयर बनाता है (व्यापार और स्ट्रीमिंग कीमतों को जमा करने के लिए)। वर्तमान में हम मुख्य रूप से जावा में विकसित होते हैं।

  • जावा स्मृति मॉडल और तकनीक का विस्तृत ज्ञान से बचने के लिए: जबकि कम विलंबता ओर एक क्षेत्र मैं में काम नहीं है सीधे मैं skillset आवश्यक है, जो मेरी राय में निम्न को शामिल करेगा का एक उचित विचार है अनावश्यक कचरा संग्रह (उदाहरण के लिए ऑब्जेक्ट पूलिंग)। पारंपरिक ओओ-पर्यावरण में उपयोग की जाने वाली कुछ तकनीकों को आम तौर पर "एंटी-पैटर्न" के रूप में माना जा सकता है।
  • टीसीपी/आईपी और यूडीपी मल्टीकास्ट का विस्तृत ज्ञान डीबगिंग और मापने विलंबता के लिए उपयोगिताओं सहित (जैसे सोलारिस पर डीटीआरएस)।
  • प्रोफाइलिंग अनुप्रयोगों के साथ अनुभव।
  • java.nio पैकेज का ज्ञान, एनआईओ-आधारित स्केलेबल सर्वर अनुप्रयोगों का विकास करने का अनुभव, तार प्रोटोकॉल डिजाइन करने का अनुभव। यह भी ध्यान रखें कि हम आम तौर पर फ्रेमवर्क और बाहरी पुस्तकालयों (जैसे Google प्रोटोबफ) का उपयोग करने से बचते हैं, जो बहुत से बेस्पाक कोड लिखना पसंद करते हैं।
  • FIX और वाणिज्यिक FIX पुस्तकालयों का ज्ञान (उदा। कैमरून FIX)।

दुर्भाग्यवश कई कौशल केवल "नौकरी पर" विकसित किए जा सकते हैं क्योंकि एक मूल्य के आधार पर मूल्य सर्वर या व्यापार इंजन को लागू करने के अनुभव के लिए कोई विकल्प नहीं है। एक विनिमय या विक्रेता से। हालांकि, यह उल्लेखनीय भी है कि हमारी कंपनी कम से कम इस विशिष्ट (या अन्य) विशिष्ट क्षेत्रों में विशिष्ट अनुभव को देखने के लिए नहीं है, बल्कि अच्छे विश्लेषणात्मक और समस्या निवारण कौशल वाले लोगों को किराए पर लेना पसंद करती है।

+7

कम विलंबता और जावा? एक प्रकार के ऑक्सीमोरोन की तरह लगता है। –

+6

@ZamfirKerlukson: हमारे पास एक जावा मैसेजिंग ऐप है जो आने वाले संदेशों को 8-9 माइक्रोसॉन्ड में संसाधित करता है। 65-80 माइक्रोसॉन्ड में हमारी अधिक जटिल सर्वर ऐप प्रक्रियाएं। जावा के बारे में ध्यान में रखना एक बात है जेआईटी कंपाइलर को कोड विश्लेषण और गतिशील रूप से इनलाइन विधियों और डेटा पहुंच करने की क्षमता है। यह स्वचालित रूप से "इनलाइन" कीवर्ड के साथ सी प्रोग्रामर मैन्युअल रूप से क्या करता है स्वचालित करता है। हालांकि, जीसी विराम समय को नियंत्रित करना चुनौती है (हालांकि कुछ JVM समाधान हैं जो इसे हल करने का प्रयास करते हैं)। –

+0

जावा में कम विलंबता ??? यह कैसे संभव है ??? यदि आप कम विलंबता जाना चाहते हैं, तो आपको कम से कम सी/सी ++ या यहां तक ​​कि असेंबली पर स्विच करना चाहिए। मैं कम विलंबता विनिमय गेटवे के लिए काम कर रहा हूं और हम सी ++ में संदेश पार्सिंग, जोखिम जांच, डेटाबेस आवंटन, मूल संदेश रूपांतरण के लिए FIX सहित एक पैकेट प्रोसेसिंग के लिए 10-20 प्राप्त कर सकते हैं। जावा के साथ, यह सिर्फ एक दिन में पूरी तरह गलत हो जाता है। –

3

ज़ीरोएमक्यू पर एक नज़र डालें। http://www.zeromq.org

उस साइट पर श्वेतपत्र पढ़ें और आपको कम विलंबता प्रोग्रामिंग के लिए आवश्यक जानकारी में कुछ अंतर्दृष्टि मिलेगी।

1

http://g-wan.com/ एएनएसआई सी स्क्रिप्ट के साथ 200 KB में यह सब करता है।

1

आप कम विलंबता सर्वर डिजाइन के बारे में बात कर रहे हैं, तो ये कुछ अच्छे संकेत दिए गए हैं: http://www.kegel.com/c10k.html http://pl.atyp.us/content/tech/servers.html

19

कम विलंबता की एक समारोह है कई चीजें, दो सबसे महत्वपूर्ण हैं:

  • नेटवर्क विलंबता - यानी संदेश भेजने/प्राप्त करने के लिए नेटवर्क पर लिया गया समय।
  • संसाधन प्रतीक्षा अवधि - जो कि समय संदेश/घटना पर कार्रवाई करने के अपने आवेदन द्वारा उठाए गए।

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

इन्फिनिबैंड नेटवर्क पर मल्टीकास्ट, यूडीपी, विश्वसनीय मल्टीकास्ट, कर्नेल बाईपास (जावा 7, इंफॉर्मेटिका अल्ट्रा मैसेजिंग और कई अन्य द्वारा समर्थित) इस क्षेत्र की सभी कंपनियों द्वारा उपयोग की जाने वाली कुछ आम तकनीकें हैं।

इसके अतिरिक्त, (http://code.google.com/p/disruptor/) disruptor की तरह कम विलंबता प्रोग्रामिंग चौखटे जो कम विलंबता अनुप्रयोगों से निपटने के लिए डिजाइन पैटर्न को लागू कर रहे हैं। आपके मुख्य वर्कफ़्लो के हिस्से के रूप में आपको डीबी या लॉग फाइलों को लिखना क्या हो सकता है। आपको अद्वितीय समाधानों के साथ आना होगा जो उस समस्या की आवश्यकताओं को पूरा करते हैं जिन्हें आप हल करने का प्रयास कर रहे हैं।

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

शुभकामनाएं!

6

इस पोस्ट में कई अच्छे जवाब कर रहे हैं। मैं अपने अनुभव को जोड़ने के लिए भी

  • जावा में कम विलंबता आप जावा में जीसी का नियंत्रण लेने के लिए है प्राप्त करने के लिए चाहते हैं, तो उस जैसे के लिए पहले से आवंटित वस्तुओं करने के लिए कई तरह से (यानी फ्लाईवेट डिजाइन पैटर्न का उपयोग कर रहे हैं), प्राचीन वस्तुओं का उपयोग करें - ट्रोव इसके लिए बहुत अच्छा है, सभी डेटा संरचना आदिम पर आधारित हैं, ऑब्जेक्ट इंस्टेंस का पुन: उपयोग करें उदाहरण के लिए नई ऑब्जेक्ट्स को कम करने के लिए सिस्टम वाइड डिक्शनरी बनाएं, स्ट्रीम/सॉकेट/डीबी

    से डेटा पढ़ने पर बहुत अच्छा विकल्प
    • प्रतीक्षा मुक्त अहंकार (जो थोड़ा मुश्किल है) का उपयोग करने का प्रयास करें, मुफ्त अलगो लॉक करें। आपको लगता है कि इन-स्मृति

    • उपयोग कंप्यूटिंग के लिए उदाहरण की टन पा सकते हैं। मेमोरी सस्ता है, आप स्मृति में डेटा के टेरा बाइट कर सकते हैं।

    • आप बिट के लिहाज से algo गुरु कर सकते हैं तो यह बहुत अच्छा प्रदर्शन देता है।

    • उपयोग मैकेनिकल सहानुभूति - Lmax disruptor, उत्कृष्ट ढांचे

3

आप में जावा कम विलंबता विकासशील रुचि रखते हैं, आपको पता होना चाहिए कि यह एक RTSJ बिना किया जा सकता का संदर्भ लें (वास्तविक समय) JVM प्रदान किया गया है कि आप कचरा कलेक्टर को नियंत्रण में रखते हैं। मेरा सुझाव है कि आप this article पर एक नज़र डालें जो जीसी ओवरहेड के बिना जावा डेवलपमेंट के बारे में बात करता है। हमारे पास our site में कई अन्य लेख भी हैं जो कम विलंबता जावा घटकों के बारे में बात करते हैं।

2

मैं कम लेटेंसी प्रोग्रामिंग के बारे में कुछ टिप्पणियां देना चाहता हूं। वर्तमान में वित्तीय सॉफ्टवेयर में कम विलंबता और उच्च निष्पादन इंजन विकसित करने में मुझे 5 से अधिक वर्षों का अनुभव है।

क्या यह समझना आवश्यक है कि विलंबता क्या है?

लेटेंसी का अर्थ है कि इसे आपकी प्रक्रिया को पूरा करने के लिए समय चाहिए। यह जरूरी नहीं है कि आप जिस विकास उपकरण का उपयोग कर रहे हैं, जैसे जावा, सी ++, नेट इत्यादि, यह आपके प्रोग्रामिंग कौशल और सिस्टम पर निर्भर करता है।

मान लीजिए कि आप जावा का उपयोग कर रहे हैं लेकिन एक गलती से आप प्रक्रिया में देरी कर सकते हैं। उदाहरण के लिए आपने एक व्यापारिक अनुप्रयोग विकसित किया है जिसमें प्रत्येक मूल्य ताज़ा करने पर आप कुछ फ़ंक्शन कॉल करते हैं और इसी तरह। इसके परिणामस्वरूप अतिरिक्त चर, अनावश्यक स्मृति उपयोग, अनावश्यक लूप जो प्रक्रिया में देरी कर सकते हैं। यदि डेवलपर उपरोक्त गलतियों के बारे में परवाह करता है तो .net में विकसित वही एप्लिकेशन जावा से बेहतर प्रदर्शन कर सकता है।

यह आपके सर्वर सिस्टम पर भी निर्भर करता है, जैसे कि आपका एप्लिकेशन बहुप्रचारित होने पर बहु ​​प्रोसेसर सिस्टम अच्छा प्रदर्शन कर सकता है।

संबंधित मुद्दे