अक्खा कंज्यूमर के लिए अच्छा क्यों है?


9

मैं अक्का और अभिनेता ढांचे के लिए नया हूं - मुझे यकीन है कि मुझे कुछ स्पष्ट याद आ रहा है, कृपया मेरी माफी पहले से स्वीकार करें।

मैं पढ़ता रहता हूं कि अका का चयन करने के लिए मुख्य बिंदुओं में से एक है जिस तरह से यह संगामिति का प्रबंधन करता है।

यह मेरे लिए स्पष्ट नहीं है कि अक्का इतना खास क्यों है; मैं समझता हूं कि कई छोटे कलाकार हैं जो बहुत हल्के और तेज हैं; हालाँकि, यह कैसे मेरी मदद कर सकता है जब दो उपयोगकर्ता एक ही समय पर एक फॉर्म सेव करते हैं?

क्या मुझे अभी भी किसी प्रकार के संगति लॉक (निराशावादी / आशावादी / आदि ..) की आवश्यकता नहीं होगी?


क्या आप पूछ रहे हैं कि एक्टर्स कंसीडर या विशेष रूप से अक्का के लिए अच्छे क्यों हैं?
पटकथा

Wouldn't I still need some sort of concurrency lock (pessimistic/optimistic/etc..)?- हाँ, लेकिन यह अंतर्निहित RDBMS की जिम्मेदारी है, अभिनेता की नहीं। बहुत संभव है कि अक्का अभिनेता आपके उपयोगकर्ता से सीधे बात नहीं कर रहा है। बल्कि, अक्का अभिनेता और उपयोगकर्ता (एक अन्य अभिनेता, अनिवार्य रूप से) दोनों सीधे डेटाबेस के साथ बातचीत करते हैं।
रॉबर्ट हार्वे

जवाबों:


7

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

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

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

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

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

मेरा मानना ​​है कि अक्का के कई अन्य आयाम हैं जैसे यह विफलताओं, पर्यवेक्षकों आदि को कैसे संभालता है, जो कि देवों के लिए महत्वपूर्ण विचार हैं।


9

क्लासिकल लॉक-आधारित कंसीडर और क्लीन ट्रांजेक्शनल मेमोरी जैसे अन्य कंजम्पेरिटी मॉडल्स की तुलना में मैं एक्टर मॉडल के बारे में सामान्य तौर पर (सिर्फ अक्का नहीं) लिखने जा रहा हूं।

लाभ

  1. समझने और उपयोग करने के लिए आसान अवधारणा

    • ताला आधारित संगामिति मुश्किल है; विशेष रूप से इसे ठीक से प्राप्त करना बहुत मुश्किल है क्योंकि सही और कुशल होने के लिए समझने और उपयोग करने के लिए कई अवधारणाएं हैं: ताले, सेमीफोर, थ्रेड्स, सिंक्रनाइज़ेशन, आपसी बहिष्कार, मेमोरी बैरियर आदि।

    • दूसरी ओर अभिनेता, एक अधिक सार अवधारणा हैं; आपके पास ऐसे अभिनेता हैं जो संदेश भेजते हैं और प्राप्त करते हैं। स्मृति अवरोध जैसी निम्न-स्तरीय अवधारणाओं को समझने और उपयोग करने की आवश्यकता नहीं है।

  2. अपरिवर्तनीयता को लागू करता है

    • म्यूटेबिलिटी प्रोग्रामिंग में कई त्रुटियों और बग्स का एक स्रोत है, विशेष रूप से बहु-थ्रेडेड अनुप्रयोगों में। अभिनेता मॉडल अपरिवर्तनीयता को लागू करके इस मुद्दे को हल करता है।
  3. कम त्रुटि वाला प्रवण

    • उपरोक्त दो कारणों की वजह से
  4. कुशल

    • अच्छे लिखित लॉक-आधारित के रूप में इतना कुशल नहीं है, लेकिन सामान्य रूप से सॉफ्टवेयर लेनदेन स्मृति से अधिक कुशल है।
  5. आसानी से स्केलेबल

    • सैद्धांतिक रूप से कम से कम, एप्लिकेशन को आपकी नौकरी करने के लिए अधिक अभिनेताओं को जोड़कर बहुत अच्छी तरह से स्केल करना चाहिए। के साथ ताला आधारित पैमाने पर करने के लिए बहुत मुश्किल है।

नुकसान

  1. सभी भाषाएँ आसानी से अपरिवर्तनीयता को लागू नहीं करती हैं;

    • एरलंग, वह भाषा जो पहले लोकप्रिय अभिनेताओं की अपने मूल में अपरिवर्तनीयता है लेकिन जावा और स्काला (वास्तव में जेवीएम) अपरिवर्तनीयता को लागू नहीं करती है।
  2. अभी भी बहुत जटिल है

    • अभिनेता प्रोग्रामिंग के एक अतुल्यकालिक मॉडल पर आधारित हैं जो सभी परिदृश्यों में मॉडल के लिए इतना सीधा आगे और आसान नहीं है; त्रुटियों और विफलता परिदृश्यों को संभालना विशेष रूप से कठिन है।
  3. गतिरोध या भुखमरी को नहीं रोकता है

    • दो अभिनेता राज्य में हो सकते हैं जो एक से दूसरे संदेश का इंतजार करते हैं; इस प्रकार आपके पास ताले की तरह ही गतिरोध है, हालांकि डिबग करना बहुत आसान है। लेन-देन की स्मृति के साथ हालांकि आपको गतिरोध मुक्त की गारंटी है।
  4. इतना कुशल नहीं

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

निष्कर्ष

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


अपना नंबर 2 लाभ के लिए, कि नहीं होना चाहिए " अस्थिरता कई त्रुटियों का एक स्रोत है ..." और "... मना करके इस समस्या को हल करती है अस्थिरता " बल्कि "की तुलना में अचल स्थिति "? साथ ही, दूसरे वाक्य में मुद्दे को सुलझाने के दो निरर्थक उल्लेख हैं।
8bittree

@ 8 बिट्टी हां, आप सही हैं; मैं चूक गया। बस अगर आप नहीं जानते हैं, तो आप ऐसे मुद्दों को ठीक करने के लिए उत्तरों को संपादित कर सकते हैं।
m3th0dman

मुझे इस बात की जानकारी है कि, मैं कुछ परिवर्तन करने के लिए अनिच्छुक हूँ जो कि मेरे मामले में गलतफहमी का कारण है।
8bittree

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

1
@ डैनेथ मैं सहमत हूं कि आपको अभिनेताओं के साथ गतिरोध प्राप्त करने के लिए एक अजीब निर्माण का उपयोग करना होगा; लेकिन एक समान दृष्टिकोण से आपको लॉक-आधारित संगामिति के साथ गतिरोध प्राप्त करने के लिए एक अजीब निर्माण का उपयोग करना होगा (हालांकि मैं मानता हूं कि एक अभिनेता के साथ म्यूटेक्स के साथ गतिरोध पैदा करना अधिक आसान है)। वैसे भी, विचार यह है कि केवल लेन-देन की स्मृति गारंटी देती है कि आपके पास कोई गतिरोध नहीं हो सकता है, जिसे लागू करने के लिए आपने कितना अजीब निर्माण किया है।
m3th0dman
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.