Elixir / erlang माइक्रोसर्विस दृष्टिकोण में कहाँ फिट बैठता है? [बन्द है]


109

हाल ही में मैं कई सहयोगी microservices तैनात करने के लिए docker रचना के साथ कुछ प्रयोग कर रहा हूँ। मैं उन कई लाभों को देख सकता हूं जो कि माइक्रोसॉर्क्स प्रदान करते हैं, और अब जब उन्हें प्रबंधित करने के लिए एक अच्छा टूलसेट है, तो मुझे लगता है कि माइक्रोसर्विस वैगन में कूदना बहुत कठिन नहीं है।

लेकिन, मैं अमृत के साथ भी प्रयोग कर रहा हूं, और मैं अपने द्वारा प्रदान किए जाने वाले लाभों के लिए बहुत शौकीन हूं। यह देखते हुए कि यह आपके कोड को कई डिकोड किए गए अनुप्रयोगों में पैक करने के लिए प्रोत्साहित करता है, और हॉट कोड अपग्रेड का समर्थन करता है, आप अमृत को कैसे मिलाएंगे (या उस मामले के लिए erlang)?

उदाहरण के लिए, अगर मैं docker का उपयोग करना चाहता हूं क्योंकि यह dev-prod समानता प्रदान करता है, तो अमृत इसमें कैसे फिट होता है? यह देखते हुए कि डॉक कंटेनर अपरिवर्तनीय हैं, मैं हॉट-कोड अपग्रेड करने की क्षमता खो देता हूं? नीले / हरे रंग की तैनाती या कैनरी रिलीज के बारे में क्या?

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


7
मैं देख रहा हूं कि डाउनवोट इसलिए है क्योंकि प्रश्न "कोई शोध प्रयास नहीं दिखाता है"। यह दुख की बात है क्योंकि यह वास्तव में सच नहीं है, निश्चित रूप से समस्या सवाल पर ही हो सकती है, लेकिन मुझे शोध नहीं करने का आरोप लगाया जा सकता है क्योंकि हाल ही में यह केवल एक चीज है जो मैं कर रहा हूं। बहुत।
पापीपो

1
यह प्रश्न बहुत व्यापक है - स्टैकओवरफ़्लो पर सवाल विशिष्ट समस्याओं को शामिल करने के लिए हैं।
पावेल ओबोरक

4
क्या मुझे इसे किसी अन्य स्टैकएक्सचेंज साइट पर ले जाना चाहिए? क्योंकि quesiton वैध IMO है।
पपीपो

2
मुझे लगता है कि यह एक दिलचस्प सवाल है, लेकिन प्रोग्रामर स्टेक्सएक्सचेंज पर हो सकता है? यह कहा जा रहा है, बंद करने के लिए मतदान नहीं
जॉर्ज मायर

1
यह कमाल है, और पूरी तरह से नौकरी के लिए बनाया गया है।
ब्रायन

जवाबों:


138

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

सबसे पहले, कुछ पृष्ठभूमि के साथ शुरू करते हैं। Erlang VM और उसके मानक पुस्तकालय को वितरित सिस्टम के निर्माण के लिए तैयार किया गया था और यह वास्तव में दिखाता है। जहां तक ​​मुझे पता है, यह एकमात्र रनटाइम और वीएम है जो इस उपयोग के मामले के लिए अपफ्रंट डिज़ाइन किए गए उत्पादन में व्यापक रूप से उपयोग किया जाता है।

अनुप्रयोग

उदाहरण के लिए, आपने पहले ही "एप्लिकेशन" पर संकेत दिया है। Erlang / Elixir में, कोड को उन अनुप्रयोगों के अंदर पैक किया जाता है जो:

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

इस डिजाइन का प्रभाव बहुत बड़ा है। इसका मतलब यह है कि अमृत डेवलपर्स, जब अनुप्रयोगों को लिखना अधिक स्पष्ट दृष्टिकोण है:

  1. उनका कोड कैसे शुरू और बंद किया जाता है
  2. वे कौन सी प्रक्रियाएं हैं जो किसी एप्लिकेशन का हिस्सा बनती हैं और इसलिए एप्लिकेशन स्थिति क्या है
  3. क्रैश होने की स्थिति में या कुछ गलत होने पर वे प्रक्रिया कैसे प्रतिक्रिया देगी और प्रभावित होगी

इतना ही नहीं, इस अमूर्त के आसपास टूलींग महान है। यदि आपके पास अमृत स्थापित है, तो "iex" खोलें और टाइप करें :observer.start():। अपने लाइव सिस्टम के बारे में जानकारी और रेखांकन दिखाने के अलावा, आप यादृच्छिक प्रक्रियाओं को मार सकते हैं, उनकी स्मृति उपयोग, स्थिति और अधिक देख सकते हैं। फ़ीनिक्स एप्लिकेशन में इसे चलाने का एक उदाहरण इस प्रकार है:

एक फीनिक्स आवेदन के साथ चल रहे प्रेक्षक

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

यदि आप किसी को एक वितरित प्रणाली चलाने के लिए कहते हैं, तो यह उस तरह की अंतर्दृष्टि है जो वे चाहते हैं, और एर्लांग / अमृत के साथ आपके पास बिल्डिंग ब्लॉक के रूप में है।

संचार

यह सब वास्तव में अभी शुरुआत है। वितरित सिस्टम का निर्माण करते समय, आपको एक संचार प्रोटोकॉल और डेटा धारावाहिक चुनने की आवश्यकता होती है। बहुत सारे लोग HTTP और JSON का चयन करते हैं, जो जब आप इसके बारे में सोचते हैं, तो वास्तव में RPC कॉल करने के लिए एक बहुत ही क्रियात्मक और महंगा संयोजन है।

Erlang / Elixir के साथ, आपके पास पहले से ही संचार प्रोटोकॉल और बॉक्स से बाहर एक क्रमिक तंत्र है। यदि आप दो मशीनों को एक-दूसरे के साथ संचार करना चाहते हैं, तो आपको केवल उन्हें नाम देने की आवश्यकता है, सुनिश्चित करें कि उनके पास एक ही रहस्य है, और आप कर रहे हैं।

जेमी ने एर्लांग फैक्ट्री 2015 में इस बारे में बात की और गेम प्लेटफॉर्म बनाने के लिए वे इसका लाभ कैसे उठा पाए: https://www.youtube.com/watch?v=_i6n-eWiVn4

यदि आप HTTP और JSON का उपयोग करना चाहते हैं, तो यह भी ठीक है और फीनिक्स जैसे प्लग और फ्रेमवर्क जैसे पुस्तकालय आपको गारंटी देंगे कि आप यहां भी उत्पादक हैं।

Microservices

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

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

और, दिन के अंत में, यदि आप एर्लांग डिस्ट्रीब्यूटेड प्रोटोकॉल का उपयोग करके यह सब चला रहे हैं, तो आप उन्हें अलग-अलग नोड्स में चला सकते हैं और जब तक आप उनके {:node@network, :name}बजाय उन्हें संदर्भित करते हैं, तब तक वे अन्य तक पहुंच पाएंगे :name

मैं और आगे जा सकता था लेकिन मुझे आशा है कि मैंने आपको इस बिंदु पर आश्वस्त किया है। :)


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

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

5
मैंने जिस बात का उल्लेख किया है, वह एक रूटिंग लेयर को कवर करती है जिसे नीले / हरे या कैनरी के लिए इस्तेमाल किया जा सकता है। फिर, यह पसंद के प्रोटोकॉल पर निर्भर करता है, लेकिन आप वितरित HTTP में एक वैश्विक प्रविष्टि से जा सकते हैं, कुछ का उपयोग करते हुए, या HTTP HTTP आधारित कुछ के लिए हाइप्रोइस का उपयोग कर सकते हैं।
जोस वैलिम

सेवा खोज दृष्टिकोण समझ में आता है। मुझे लगता है कि मैं हमेशा लोड संतुलन की शर्तों पर सोच रहा था।
पापीपो

1
माइक्रो सेवाओं के अन्य लाभों में से एक के बारे में क्या है जैसे किसी विशिष्ट कार्य के लिए सबसे अच्छी भाषा चुनना। मैं अमृत से प्यार करता हूं, हालांकि यह हर एक काम के लिए सबसे अच्छी भाषा नहीं है। मेरा मतलब है कि एक विशिष्ट सूक्ष्म सेवा के लिए एक अलग भाषा का उपयोग करने की आवश्यकता हो सकती है बजाय अमृत की। यह अभी भी एक पारंपरिक सूक्ष्म सेवाओं वास्तुकला का पालन करना चाहिए?
जीनकरलो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.