2009-04-27 8 views
5

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

मैं कुछ संख्या की गणना की तरह तीन या चार अलग घटनाओं पर कार्रवाई करने के, बाजार डेटा, फ़ीड आदेश/व्यापार फ़ीड और 'outputting' इस डेटा के कुछ व्युत्पन्न से की जरूरत है कहते हैं। अधिकांश समय, डेटा की इन घटनाओं या धाराओं को क्रमशः संसाधित करने की आवश्यकता होती है (कम से कम कुछ कुंजी के संबंध में ... उदाहरण के लिए, किसी विशिष्ट प्रतीक के लिए सभी ऑर्डर क्रमशः संसाधित किए जाने चाहिए, लेकिन समानांतर में असंबंधित प्रतीकों के संबंध में)

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

हालांकि, इस कतार मूल रूप से एक निर्माता/उपभोक्ता कतार है, जो यह एक अवरुद्ध कतार है इसका मतलब है। स्केलेबिलिटी के लिए ब्लॉकिंग बहुत खराब है। साथ ही, एक कतार होने का मतलब है कि मेरे सभी अपडेट कमांड ऑब्जेक्ट्स (विभिन्न प्रकार के) कतार से कुछ अधिक सामान्य जेनेरिक सुपर प्रकार (ऑब्जेक्ट) के साथ आते हैं और मुझे उन्हें सही प्रकार पर वापस डालना होगा और उन्हें प्रतिक्रिया दें() ।

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

कोई विचार मैं कैसे संपर्क कर सकता हूं?

उत्तर

3

हाल ही में दिखाई देने वाले उत्कृष्ट अभिनेता पुस्तकालयों में से एक का उपयोग करें। एलेक्स मिलर ने Javaworld on Actors के लिए एक अच्छा दो भाग टुकड़ा लिखा था।

मैं भी व्यक्तिगत रूप से काफी Actor's Guild की तरह।

+0

एफवाईआई, अभिनेता गिल्ड वेबसाइट के अनुसार, ऐसा प्रतीत होता है कि परियोजना अब और नहीं रखी गई है। –

5

अभी हाल ही में akka स्काला के लिए एक अभिनेता रूपरेखा प्रदान करता है और Erlang पर आधारित है।

+0

thx। यही वह है जिसकी तलाश में मैं हूं। जावा में एरलांग सुविधा है। – comonad

0

आप esper पर भी एक नज़र डालना चाहते हैं, जो अभिनेता ढांचे के उल्लेख के रूप में कम स्तर के रूप में नहीं है, एक सामान्यीकृत घटना प्रसंस्करण प्रणाली की तरह आप एक अभिनेता ढांचे के शीर्ष पर निर्माण करेंगे। बहुत परिपक्व, पूर्ण, और मुझे लगता है कि वित्तीय लेनदेन में जटिल घटना प्रसंस्करण के लिए विकसित किया गया है।

0

आप एक और विकल्प, अर्थात् NettyLMAX Disruptor, उन दोनों शुद्ध जावा में लिखा के साथ विचार कर सकते हैं के लिए बनाया गया पुस्तकालय है। नेटटी रखरखाव उच्च प्रदर्शन प्रोटोकॉल सर्वर & ग्राहकों के तेज़ी से विकास के लिए एक असीमित घटना-संचालित नेटवर्क अनुप्रयोग ढांचा है।

enter image description here

Disruptor क्या है?

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

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

(यह https://lmax-exchange.github.io/disruptor/ से लिया गया)