java - अक्का के लिए अच्छा उपयोग मामला




scala asynchronous (8)

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

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


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

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

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

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

आप कई अलग-अलग चीजों के लिए अक्का का उपयोग कर सकते हैं।

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

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

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

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

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

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


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

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

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

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

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

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

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

परीक्षण पर किया गया: जावा संस्करण: 1.6 आईडीई: ग्रहण 3.7 विंडोज विस्टा 32 बिट। 3 जीबी राम इंटेल कोर i5 प्रोसेसर, 2.5 गीगाहर्ट्ज घड़ी की गति

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


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

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

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

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

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

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


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

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

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

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

अक्का के बारे में अच्छी चीजें हैं जो दृढ़ता के लिए उपलब्ध हैं, यह एसटीएम कार्यान्वयन, आरईएसटी सर्वर और गलती सहनशीलता है।

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

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

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


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


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

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


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





akka