7

मैं नोड एप्लिकेशन का उपयोग पूरी तरह से सॉकेट.ओओ चैनलों के लिए रेडिस पबसब के साथ करता हूं, और फिलहाल मैंने इसे 3 मशीनों में फैलाया है, जो मशीनों में से एक पर nginx लोड संतुलन द्वारा समर्थित है।फीनिक्स एप्लिकेशन केवल एकाधिक मशीनों पर चैनल स्केल का उपयोग करने के लिए कैसे बनाया जा सकता है? हैप्रोक्सी का उपयोग करना? संदेशों को सभी नोड्स में कैसे प्रसारित करें?

मैं इस नोड एप्लिकेशन को फीनिक्स एप्लिकेशन के साथ प्रतिस्थापित करना चाहता हूं, और मैं अभी भी एरलांग/एलिक्सीर दुनिया के लिए नया हूं, इसलिए मुझे अभी भी पता नहीं चला है कि एक से अधिक फीनिक्स एप्लिकेशन एक से अधिक मशीनों पर कैसे फैल सकता है। सभी संभावित स्केलिंग और लोड संतुलन शर्तों को गुगल करने से कुछ भी नहीं मिला।

1.0 release notes उल्लेख इस बारे में चैनल:

यहां तक ​​कि मशीनों के एक क्लस्टर पर, अपने संदेश नोड्स स्वचालित रूप से

1) भर में प्रसारित कर रहे हैं तो मैं मूल रूप से एन सर्वरों के लिए अपने आवेदन को तैनात, उनमें से प्रत्येक में काउबॉय सर्वर शुरू करना, इसी प्रकार मैं नोड के साथ कैसे करता हूं और उन्हें मैं nginx/HAProxy से जोड़ता हूं?

2) यदि ऐसा है, तो रिलीज नोट्स पर उल्लिखित सभी नोड्स में चैनल संदेश कैसे प्रसारित किए जाते हैं?

संपादित करें 3: Theston जवाब जो स्पष्ट करता है फीनिक्स अनुप्रयोगों के रूप में ऐसी कोई बात नहीं है, लेकिन इसके बजाय, अमृत/Erlang अनुप्रयोगों, मैं अपने खोज शब्दों अद्यतन और स्केलिंग और लोड संतुलन के बारे में कुछ रोचक परिणाम नहीं मिला है कि ले रहा है।

संपादित करें 2: Elixir's creator से मिला:

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

संपादित: Connecting Elixir nodes on the same LAN पहले एक है कि इंटर अमृत संचार का उल्लेख है, लेकिन यह फीनिक्स खुद से संबंधित नहीं है, और यह कैसे लोड संतुलन के साथ संबंधित है और प्रत्येक फीनिक्स नोड एक और के साथ संवाद स्थापित पर स्पष्ट नहीं है।

उत्तर

3

फीनिक्स एप्लिकेशन नहीं है, जब आप फीनिक्स प्रोजेक्ट जेनरेट करते हैं तो आप फीनिक्स के साथ एक इलीक्सिर एप्लिकेशन बनाते हैं जो केवल एक निर्भरता है (प्रभावी रूप से उन चीज़ों का एक समूह जो आपके एप्लिकेशन का वेब हिस्सा आसान बनाता है)।

इसलिए आपको जो भी नोड वितरण करना है, वह अभी भी आपके इलीक्सिर एप्लिकेशन के भीतर हो सकता है।

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

http://www.phoenixframework.org/v1.0.0/docs/channels पढ़ने के लायक है (यदि आपने पहले से नहीं किया है) जहां यह बताता है कि फीनिक्स चैनल कैसे वितरित करने के लिए PubSub का उपयोग करने में सक्षम हैं (जिसे विभिन्न एडाप्टर का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है)।

इसके अलावा, क्या आप मिश्रण फीनिक्स.server चलाकर अपने परिनियोजन सर्वर पर काउबॉय कताई कर रहे हैं?

यदि हां, तो मैं EXRM https://github.com/bitwalker/exrm

को देख सलाह देते हैं यह है कि आप केवल अपने उत्पादन सर्वर को तैनात कर सकते हैं (Capistrano के साथ यदि आप चाहें) अपने अमृत एक आत्म निहित फ़ाइल में आवेदन और उसके बाद बंडल करेंगे अपना आवेदन शुरू करें।

इसका मतलब यह भी है कि आपको उत्पादन मशीनों पर स्थापित किसी भी एर्लांग/एलिक्सीर निर्भरताओं की आवश्यकता नहीं है।

संक्षेप में, फीनिक्स रेल की तरह नहीं है, फीनिक्स आवेदन नहीं है, ढेर नहीं है। यह सिर्फ एक निर्भरता है जो आपके इलीक्सिर एप्लिकेशन को उपयोगी कार्यक्षमता प्रदान करती है।

+0

बहुत बढ़िया, मैं इस विचार के साथ था कि फीनिक्स = रेल। मेरे खोज शब्द अपडेट किए गए और यहां तक ​​कि विषय पर एक पुस्तक भी मिली http://www.erlang-in-anger.com/ –

+1

खुशी मैं मदद कर सकता हूं :) दो अन्य भयानक किताबें हैं जिन्हें मैं https: //www.manning की अनुशंसा करता हूं .com/books/elixir-in-action और https://pragprog.com/book/phoenix/programming-phoenix – TheStoneFox

0

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

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

+0

इस मामले में उद्धृत "आपके संदेशों को स्वचालित रूप से नोड्स में प्रसारित किया जाता है" आंतरिक पबब द्वारा पूरा किया जाता है? –

0

Phoenix.PubSub पर देखें, जहां फीनिक्स आंतरिक रूप से चैनल संचार बिट्स है।

यह वर्तमान में दो एडाप्टर है:

  • Phoenix.PubSub.PG2 - अमृत वितरित, सीधे सर्वर के बीच सूचनाओं का आदान-प्रदान का उपयोग करता है। (यह आवश्यक है कि आप अपने आवेदन को एक एलिक्सीर/एरलांग वितरित क्लस्टर तरीके से तैनात करें।)
  • फीनिक्स.प्यूबसब.रेडिस - सर्वर के बीच डेटा का आदान-प्रदान करने के लिए रेडिस का उपयोग करता है। (यह socket.io और अन्य में पाए गए समाधानों के समान होना चाहिए)
संबंधित मुद्दे

 संबंधित मुद्दे