अक्का के लिए अच्छा उपयोग मामला [बंद]


605

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

केवल एक सीमा: कृपया चैट सर्वर लिखने का मामला शामिल न करें। (क्यों? चूंकि यह बहुत सी समान चीजों के लिए एक उदाहरण के रूप में इस्तेमाल किया गया है)


10
क्या समस्या के साथ शुरू करना और उसके लिए कोई समाधान खोजना आसान नहीं है, एक समाधान होने और इसे लागू करने के लिए एक समस्या की तुलना में? मेरा अनुमान है कि RMI का उपयोग करने के बजाय, अक्का और इसके अभिनेता कोड लिखने के लिए बहुत आसान / सरल लगते हैं।
केनेट

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

संबंधित प्रश्न है, लेकिन मौजूदा आवेदन के लिए AKKA लगाने के बारे में + कुछ उपयोग के मामले: stackoverflow.com/questions/16595685/…
ses

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

2
@ user2684301 हम्म। मुझे लगता है कि सेब-से-संतरे के रास्ते में, थोड़ा अनुचित जवाब मिलता है। MQs (तार्किक रूप से) सरल बिल्डिंग ब्लॉक हैं जो अक्का की तुलना में बहुत कम करते हैं, और मैं उनकी तरफ से तुलना नहीं करूंगा। लेकिन मुझे लगता है कि अगर मैंने इसे "जेएमएस के उपयोग से निर्मित वितरित प्रणालियों की तुलना में" घोषित रूप से लिखा गया था, तो इसे और अधिक समझ में आता है।
स्टैक्मैन मैन 14'14

जवाबों:


321

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

अक्का वास्तव में उन परियोजनाओं के माध्यम से खींचा गया है, भले ही हमने शुरू किया था जब यह संस्करण 0.7 पर था। (हम scala का उपयोग कर रहे हैं वैसे)

बड़े फायदों में से एक वह सहजता है जिस पर आप एक्टर और मैसेज को आउट बायलरप्लेटिंग के साथ कंपोज़ कर सकते हैं, यह बिना हाथ से रोल किए थ्रेडिंग की सभी जटिलताओं के बिना बहुत अच्छा होता है और आपको अतुल्यकालिक मैसेज लगभग मुफ्त में मिलते हैं।

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

फिर उत्कृष्ट ऐड-ऑन मॉड्यूल हैं। ऊंट मॉड्यूल वास्तव में अक्का में अच्छी तरह से प्लग करता है और विन्यास योग्य समापन बिंदु के साथ अतुल्यकालिक सेवाओं के ऐसे आसान विकास को सक्षम करता है।

मैं फ्रेमवर्क से बहुत खुश हूं और यह हमारे द्वारा बनाए गए कनेक्टेड सिस्टम के लिए एक डिफैक्टो मानक बन रहा है।


14
आपकी राय में संदेश भेजने के लिए एक मैसेजिंग बैकेंड (जैसे ActiveMQ) का उपयोग करने की तुलना में इस दृष्टिकोण का क्या लाभ है?
मैजिकॉनयर

27
एमक्यू उत्पाद वास्तव में एक अलग उपयोग के मामले के लिए हैं। विभिन्न गारंटी और बहुत अलग प्रदर्शन। MQ उत्पादों को बहुत अधिक सेटअप की आवश्यकता होती है, आप इस तरह के उत्पाद में उसी तरह से कतारों का उपयोग नहीं करते हैं जैसे आप वस्तुओं का उपयोग करते हैं। अभिनेता अक्का में प्रथम श्रेणी के नागरिक हैं, आप उन्हें कृपया उपयोग में लाएँ, जैसे कि आप वस्तुओं का उपयोग कैसे करेंगे, इसलिए सेटअप प्रोग्रामिंग की तरह आपके प्रोग्रामिंग मॉडल में ओवरहेड की तुलना में कहीं कम है। एमक्यू उत्पाद आप अन्य बाहरी प्रणालियों के साथ एकीकृत करने के लिए अधिक उपयोग करेंगे, न कि एक सिस्टम के 'इंटर्नल' का निर्माण करने के लिए, जो कि आप के लिए अभिनेताओं का उपयोग करेंगे।
रेमंड रोस्टनबर्ग

26
DBP केस स्टडी के लिए नया URL download.typesafe.com/website/casestudies/…
बास

2
@RaymondRoestenburg re: MQ सिस्टम और विकल्प का निर्माण। उदाहरण के लिए, RabbitMQ, एक अभिनेता-आधारित प्रोग्रामिंग भाषा, एर्लैंग पर बनाया गया है । अभिनेता और एमक्यू के बीच संबंध (और भेद) के बारे में सोचने का यह एक तरीका है। इस बीच अपाचे स्पार्क न तो कर्मी-और-कतार है और न ही अभिनेता-आधारित है, लेकिन इसका उपयोग अक्का के साथ किया जा सकता है: टाइपसेफ दर्शाता है कि अक्का के साथ स्पार्क स्ट्रीमिंग का उपयोग कैसे किया जाता है
ड्रिफ्टकैचर

6
@RaymondRoestenburg आपने यह उल्लेख करने के लिए उपेक्षा की कि अभिनेता मॉडल के रूप में स्पेगेटी जैसी संरचना को बढ़ावा देता है। आपके द्वारा लिखी गई "अक्का इन एक्शन" पुस्तक इस "फीचर" के लिए सर्वश्रेष्ठ प्रदर्शन है। कोड उदाहरण काफी बुनियादी कहानियों से निपटते हैं। फिर भी वर्कफ़्लो को समझना और कोड से पालन करना बहुत मुश्किल है। एक संबंधित समस्या यह है कि अक्का कोड आपके सभी व्यावसायिक तर्क के आधार पर आपके लिए सबसे अधिक घुसपैठ के तरीके से IRREVERSIBLY होगा। किसी भी अन्य गैर-अभिनेता ढांचे से बहुत अधिक। इसे अलग-अलग अनुभागों में विच्छेद किए बिना एक मूल वर्कफ़्लो को लिखना असंभव है।
अचेत

222

डिस्क्लेमर: मैं अक्का के लिए पीओ हूं

एक संगामिति smorgasbord की पेशकश करने के अलावा जो बहुत सरल है और सही (अभिनेता, एजेंट, डेटाफ़्लो संगामिति) प्राप्त करने के लिए और एसटीएम के रूप में संगामिति नियंत्रण के साथ है।

यहां कुछ उपयोग-मामले हैं जिन पर आप विचार कर सकते हैं:

  1. लेनदेन प्रसंस्करण (ऑनलाइन गेमिंग, वित्त, सांख्यिकी, सट्टेबाजी, सोशल मीडिया, दूरसंचार, ...)
    • स्केल अप, स्केल आउट, फॉल्ट-टॉलरेंस / एचए
  2. सेवा बैकएंड (कोई भी उद्योग, कोई भी ऐप)
    • सेवा बाकी, साबुन, धूमकेतु आदि
    • संदेश हब / एकीकरण परत के रूप में कार्य करें
    • स्केल अप, स्केल आउट, फॉल्ट-टॉलरेंस / एचए
  3. स्नैप-इन संगामिति / समानता (कोई भी ऐप)
    • सही बात
    • साथ काम करने और समझने के लिए सरल
    • अपने मौजूदा JVM प्रोजेक्ट में जार जोड़ें (Scala, Java, Groovy या JRuby का उपयोग करें)
  4. बैच प्रसंस्करण (कोई भी उद्योग)
    • ऊंट एकीकरण बैच डेटा स्रोतों के साथ हुक अप करने के लिए
    • अभिनेता बैच वर्कलोड को विभाजित करते हैं और जीतते हैं
  5. संचार केंद्र (दूरसंचार, वेब मीडिया, मोबाइल मीडिया)
    • स्केल अप, स्केल आउट, फॉल्ट-टॉलरेंस / एचए
  6. गेम सर्वर (ऑनलाइन गेमिंग, सट्टेबाजी)
    • स्केल अप, स्केल आउट, फॉल्ट-टॉलरेंस / एचए
  7. बीआई / डेटामाइनिंग / सामान्य प्रयोजन crunching
    • स्केल अप, स्केल आउट, फॉल्ट-टॉलरेंस / एचए
  8. यहां अन्य अच्छे उपयोग के मामले डालें

10
मैं फ्यूचर्स और एसटीएम के लाभों को समझता हूं लेकिन अभिनेताओं के लिए अच्छे उपयोग के मामले नहीं पाते हैं। गेम या सट्टेबाजी सर्वर के लिए, लोड बैलेंसर के पीछे एक्टर्स बनाम मल्टीपल ऐप सर्वर का उपयोग करने का क्या फायदा है?
मार्टिन कोनिसक

8
@ViktorKlang POs! = Tech लीड। वे एक साथ काम करते हैं, लेकिन विभिन्न भूमिकाएँ हैं।
taylorcressy

79

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

जेवीएम पर गुजरने वाली एरलंग ओटीपी शैली का संदेश मौजूदा पुस्तकालयों और एप्लिकेशन सर्वरों के कंधों पर रियलटाइम सिस्टम विकसित करने के लिए एक शानदार प्रणाली बनाता है।

अक्का आपको एक पारंपरिक में संदेश भेजने की अनुमति देता है लेकिन गति के साथ! यह आपको अभिनेता पूल, दूरस्थ नोड्स, और गलती सहिष्णुता की विशाल मात्रा का प्रबंधन करने के लिए ढांचे में उपकरण भी देता है जो आपको अपने समाधान के लिए चाहिए।


1
तो क्या यह कहना उचित है कि यह (कुछ) लंबे समय तक विलंबता अनुरोध है, जहां प्रति अनुरोध एकल-धागा अच्छा नहीं होगा?
२०:३६ पर स्टेक्समैन

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

4
इवेंट संचालित आर्किटेक्चर समस्याओं के बारे में सोचने का एक अलग तरीका है। यदि आप अक्का में कोडिंग के बारे में सोच रहे हैं, तो मैनिंग से एर्लैंग ओटीपी पढ़ने में सक्षम है। अक्का में बहुत सारे निर्माण एरलांग ओटीपी से प्रभावित हैं और पुस्तक आपको इस बात के लिए सिद्धांत देती है कि जोनास बोनेर ने जिस तरह से अक्का अपी का निर्माण किया था। अक्का एक बड़ा पहाड़ है जिस पर आप खड़े हैं! यदि आपके अभिनेता राज्य परिवर्तन के माध्यम से निरंतर हैं, तो क्या आपको वास्तव में 10k की आवश्यकता है एक दूसरे को निरंतर लिखना है
वेड अर्नोल्ड

8
वेड, आप लोग संदेश की गारंटी को कैसे संभालते हैं? आप उल्लेख करते हैं: (ईमेल / एसएमएस अलर्ट, धोखाधड़ी का पता लगाने, कम धन संतुलन, आदि), मुझे लगता है कि ये संभावित रूप से दूरस्थ अभिनेताओं को भेजे गए हैं? आप यह कैसे सुनिश्चित करते हैं कि वास्तव में क्या हुआ? क्या होगा यदि एक धोखाधड़ी चेतावनी को संसाधित करते समय नोड विफल हो गया? क्या यह हमेशा के लिए चला गया है? क्या आपके पास अंततः सुसंगत प्रणाली है जो इसे साफ करती है? धन्यवाद!
जेम्स

2
अच्छा सवाल जेम्स। यह स्पष्ट है कि यह एक ऐसी प्रणाली में फिट बैठता है जहां उत्तर की तत्काल आवश्यकता नहीं है। उदाहरण के लिए आप क्रेडिट कार्ड बिल संसाधित कर सकते हैं; गणना; ई-मेल आदि भेजें। मुझे वास्तव में आश्चर्य होता है कि उत्तर की आवश्यकता होने पर इन चीजों (लेनदेन) को कैसे संभाला जाता है। अतं मै; यदि अनुरोध बाहरी (इंटरनेट उपयोगकर्ता; कॉल सेंटर आदि से एक प्रतिनिधि) से किया जाता है; वह जवाब का इंतजार करता है। मुझे यह कैसे सुनिश्चित किया जा सकता है कि उप कार्यों (जो एसिंक्स निष्पादित किए गए हैं) निष्पादित किए जाते हैं; एक एक्सए लेनदेन में ताकि मैं जवाब वापस कर सकूं?
कां यय

44

हम अक्का का उपयोग REST कॉल को अतुल्यकालिक रूप से संसाधित करने के लिए करते हैं - एक साथ async वेब सर्वर (Netty- आधारित) के साथ हम प्रति उपयोगकर्ता पारंपरिक अनुरोध प्रति मॉडल थ्रेड की तुलना में नोड / सर्वर में सेवा करने वाले उपयोगकर्ताओं की संख्या में 10 गुना सुधार प्राप्त कर सकते हैं।

इसे अपने बॉस को बताएं कि आपका AWS होस्टिंग बिल 10 के कारक से गिरता जा रहा है और यह बिना दिमाग वाला है! Shh ... हालांकि यह अमेज़न को नहीं बताया ... :)


3
और मैं यह उल्लेख करना भूल गया कि अक्का वायदा की राक्षसी प्रकृति, जो बहुत क्लीनर समानांतर कोड की ओर ले जाती है, ने हमें कोड रखरखाव में हजारों की बचत की ...
piotrga

8
मुझे लगता है कि कॉल उच्च-विलंबता, कम थ्रूपुट हैं? अन्य सर्वरों को कॉल करने की तरह, प्रतिक्रिया (प्रॉक्सी) की प्रतीक्षा कर रहा है?
स्टेक्समैन

38

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


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

ऐसा लगता है कि इसे अक्का के बिना भी आसानी से संभाला जा सकता था।
एरिक कपलुन

1
टीडीसी फियादेसियो के मामले में टेल्को कंपनी है।
रोमन कागान

37

यदि आप चैट सर्वर को एक स्तर तक सार करते हैं, तो आपको उत्तर मिलता है।

अक्का एक मैसेजिंग सिस्टम प्रदान करता है जो एर्लैंग के "इसे दुर्घटनाग्रस्त होने" की मानसिकता के समान है।

इसलिए उदाहरण ऐसी चीजें हैं जो संदेश के स्थायित्व और विश्वसनीयता के विभिन्न स्तरों की आवश्यकता होती हैं:

  • चैट सर्वर
  • एक MMO के लिए नेटवर्क परत
  • वित्तीय डेटा पंप
  • एक iPhone / मोबाइल / जो भी एप्लिकेशन के लिए अधिसूचना प्रणाली
  • बाकी सर्वर
  • शायद WebMachine (अनुमान) के लिए कुछ

अक्का के बारे में अच्छी बातें दृढ़ता के लिए पसंद के विकल्प हैं, यह एसटीएम कार्यान्वयन, बाकी सर्वर और गलती-सहिष्णुता है।

चैट सर्वर के उदाहरण से परेशान न हों, इसे समाधान के एक निश्चित वर्ग के उदाहरण के रूप में सोचें।

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

(केवल वीडियो देखने और स्रोत के साथ खेलने के अनुभव के साथ लिखा, मैंने अक्का का उपयोग करके कुछ भी लागू नहीं किया है।)


2
धन्यवाद - मेरा मतलब यह नहीं था कि चैट सर्वर आवश्यक रूप से खराब है, बस मैं पूरक उदाहरण चाहता हूं; क्षमता का बेहतर विचार प्राप्त करना आसान है।
२०:३०

यह जानने के लिए उत्सुक हैं कि REST सर्वर यहां कैसे फिट होता है? क्या आप इसका उल्लेख Node.js शैली के async सर्वर के संदर्भ में कर रहे हैं? उदाहरण उपयोग मामलों को साझा करने के लिए धन्यवाद। मैंने उन्हें उपयोगी पाया।
सॉफ्टवेयर.विकिप्पा

24

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

अक्का के साथ सवाल वास्तव में 'अक्का के साथ क्या नहीं कर सकता' है। शक्तिशाली फ्रेमवर्क, इसके शक्तिशाली अमूर्त और सभी दोष सहिष्णुता पहलुओं के साथ एकीकृत करने की इसकी क्षमता इसे बहुत व्यापक टूलकिट बनाती है।


अगर आपको चुनना है तो आपको कौन सा पहलू सबसे ज्यादा पसंद है? अन्य फ्रेमवर्क, स्वचालित दोष सहिष्णुता, या कुछ और के लिए मौजूदा एकीकरण?
स्टेक्समैन

6
व्यक्तिगत दृष्टिकोण से यह उठाया गया अमूर्त स्तर है जिसे अक्का उस मेज पर लाता है जो मुझे सबसे अच्छा लगता है। उद्यम के दृष्टिकोण से यह एकीकरण क्षमता है। एक जीवित करने के लिए मिला और अक्का व्यापार और खुशी दोनों को बहुत अच्छी तरह से कवर करता है :-)
rossputin

क्या आप बता सकते हैं कि संदेशों का प्रवाह कैसा है? क्या उपयोगकर्ता किसी मरम्मत की दुकान का व्यक्ति है और दुर्घटना के बारे में जानकारी http-form में दर्ज करता है और फिर सर्वर को डेटा भेजता है। क्या इससे एक संदेश बनता है जिसे अक्का संभालता है? इस संदेश के साथ क्या करना है? डेटाबेस को क्वेरी करने के लिए दर्ज की गई जानकारी निकालें और फिर इसे वेब-फ्रंटएंड पर वापस भेजने के लिए उत्तर की कतार लगाएं?
सर्फिंग

24

अक्का का इस्तेमाल आप कई तरह की चीजों के लिए कर सकते हैं।

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

  • वेबसाइट पर लाइव अपडेट (उदाहरण के लिए, पसंद, पसंद ...)
  • लाइव उपयोगकर्ता टिप्पणियां दिखा रहा है
  • अधिसूचना सेवाएं
  • खोज और अन्य सभी प्रकार की सेवाएं

विशेष रूप से लाइव अपडेट आसान हैं क्योंकि वे चैट उदाहरण के लिए नीचे उबालते हैं। सेवाओं का हिस्सा एक और दिलचस्प विषय है क्योंकि आप बस दूरस्थ अभिनेताओं का उपयोग करने का विकल्प चुन सकते हैं और यहां तक ​​कि अगर आपका ऐप क्लस्टर नहीं है, तो आप इसे आसानी से विभिन्न मशीनों पर तैनात कर सकते हैं।

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

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

और जब से Google रीडर बंद हुआ मैंने RSS पाठक के साथ शुरू किया, बेशक अक्का का उपयोग कर रहा था। यह मेरे लिए इनकैप्सुलेटेड सेवाओं के बारे में है। निष्कर्ष के रूप में: अभिनेता मॉडल खुद वही है जिसे आपको पहले अपनाना चाहिए और अक्का एक बहुत ही विश्वसनीय ढाँचा है जो आपको इसे लागू करने में बहुत सारे लाभों के साथ मदद करेगा।


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

18

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


क्या आप भी अक्का की गलती को सहन कर रहे हैं?
एरिक कपलुन

अगर हमारे पास स्पार्क क्लस्टर तक पहुंच हो तो स्पार्क स्ट्रीमिंग के बारे में क्या होगा?
स्कजागिनी

18

मैं अक्का (जावा आपी) पर हाथ आजमा रहा था। मैंने जो कोशिश की वह अका के अभिनेता आधारित संगामिति मॉडल की तुलना सादे जावा संगति मॉडल (java.util.concurrent classes) से की।

उपयोग मामला चरित्र गणना के कार्यान्वयन को कम करने के लिए एक सरल विहित मानचित्र था। डेटासेट बेतरतीब ढंग से उत्पन्न स्ट्रिंग्स (लंबाई में 400 चार्ट) का एक संग्रह था, और उनमें स्वरों की संख्या की गणना करें।

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

अवलोकन: मध्यम भार (~ 50000 स्ट्रिंग इनपुट) तक परिणाम भिन्न-भिन्न पुनरावृत्तियों में भिन्न होते हुए, तुलनीय थे। हालाँकि, जब मैंने अपना भार बढ़ाकर ~ 100000 कर लिया, तो यह जावा समाधान को लटका देगा। मैंने इस स्थिति के तहत जावा समाधान को 20-30 थ्रेड्स के साथ कॉन्फ़िगर किया और यह सभी पुनरावृत्तियों में विफल रहा।

लोड को 1000000 तक बढ़ाना, अक्का के लिए भी घातक था। मैं क्रॉस चेक करने के इच्छुक किसी भी व्यक्ति के साथ कोड साझा कर सकता हूं।

तो मेरे लिए, यह पारंपरिक जावा बहुपरत समाधान की तुलना में अक्का तराजू बेहतर लगता है। और शायद इसका कारण स्काला के हुड जादू के तहत है।

अगर मैं किसी समस्या को डोमेन से संचालित होने वाले संदेश के रूप में मॉडल कर सकता हूं, तो मुझे लगता है कि अक्का जेवीएम के लिए एक अच्छा विकल्प है।

टेस्ट पर प्रदर्शन: जावा संस्करण: 1.6 आईडीई: ग्रहण 3.7 विंडोज विस्टा 32 बिट। 3 जीबी रैम। इंटेल कोर i5 प्रोसेसर, 2.5 गीगाहर्ट्ज़ क्लॉक स्पीड

कृपया ध्यान दें, परीक्षण के लिए इस्तेमाल की जाने वाली समस्या डोमेन पर बहस की जा सकती है और मैंने अपने जावा ज्ञान की अनुमति के रूप में ज्यादा निष्पक्ष होने की कोशिश की :-)


3
"मैं क्रॉस चेक करने के इच्छुक किसी के साथ कोड साझा कर सकता हूं।" अगर आप बुरा न मानें तो मैं चाहूंगा।
n1r3

3
मुझे भी कोड पसंद आएगा, क्या आप एक जीथब लिंक पोस्ट कर सकते हैं?
गौतम

आपकी रूचि के लिए धन्यवाद। दुर्भाग्य से मुझे कुछ समस्याओं को स्थापित करने में एक गितुब रेपो है। यदि आप मुझे अपने ईमेल दे सकते हैं, तो मैं स्रोत कोड पर मेल कर सकता हूं। और देर से जवाब के लिए पछतावा!
सुतनु दालुई

@sutanudalui क्या आपके पास अभी भी कोड है, यदि ऐसा है तो मैं अपना ईमेल साझा कर सकता हूं?
Jay

16

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

एक चैनल के अंदर हमारे पास समानांतर में संसाधित होने वाली घटनाओं की वास्तविक समय धारा है। विशेष रूप से: - लंबा स्वचालित भाषण मान्यता - एक अभिनेता के साथ किया जाता है; - ऑडियो आउटपुट निर्माता जो कुछ ऑडियो स्रोतों (संश्लेषित भाषण सहित) को मिलाता है; - पाठ से भाषण रूपांतरण चैनलों के बीच साझा किए गए अभिनेताओं का एक अलग सेट है; - शब्दार्थ और ज्ञान प्रसंस्करण।

जटिल सिग्नल प्रोसेसिंग के अंतर्संबंध बनाने के लिए हम SynapseGrid का उपयोग करते हैं । यह जटिल अभिनेता प्रणालियों में डेटाफ्लो के संकलन-समय की जाँच का लाभ है।


14

मैंने हाल ही में अक्का में कैनोनिकल मैप-कम उदाहरण को लागू किया है: शब्द गणना। तो यह अक्का का एक उपयोग मामला है: बेहतर प्रदर्शन। यह JRuby और अक्का के अभिनेताओं की तुलना में अधिक प्रयोग था , लेकिन यह भी दर्शाता है कि अक्का केवल स्काला या जावा नहीं है: यह JVM के शीर्ष पर सभी भाषाओं पर काम करता है।


क्या आप जानते हैं कि बेहतर प्रदर्शन के लिए क्या जिम्मेदार है (और किस विकल्प की तुलना में भी)? JVM (बनाम देशी रूबी) पर JRuby का उपयोग करने के कारण, स्केलिंगिबिली को I / O या कुछ और को अवरुद्ध न करने के कारण?
स्टेक्समैन

2
मैंने जो तुलना लिखी वह थी: अभिनेताओं के साथ जुबी अनुक्रमिक वी.एस. इसलिए, तेजी से निष्पादन के लिए जिम्मेदार केवल एक चीज अभिनेताओं की भागीदारी है। प्रयोगों पर कोई I / O ने भाग नहीं लिया (एक फ़ाइल डिस्क से लोड है, लेकिन बेंचमार्क टाइमर सेट होने से पहले यह किया जाता है)।
डैनियल रिबेरो

मैंने हाल ही में एक मानचित्र को कम करने के उदाहरण के रूप में लागू किया है, लेकिन यह सिर्फ सादे वेनिला जावा github.com/chaostheory/jibenakka
chaostheory
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.