प्रस्तावना
OpenSIPS एक सिग्नलिंग SIP स्विच है। यदि आप वास्तव में कई एसआईपी कॉल को संभालना चाहते हैं, तो सबसे अधिक संभावना है कि आपको पिछले OpenSIPS नहीं मिलेगा।
प्रणाली वास्तव में "परिपक्व" है, युद्ध में परीक्षण किया गया और, समय के साथ, कई उपयोगी (और ऐसा नहीं) मॉड्यूल के साथ उग आया।
इसी समय, यह स्पष्ट है कि 2001 में रखी गई वास्तुकला आधुनिक आवश्यकताओं को पूरा नहीं करती है।
इसलिए, OpenSIPS डेवलपर्स ने कहा कि संस्करण 2.0 को "खरोंच से" रखा जाएगा।
निम्नलिखित OpenSIPS 2.0 डिज़ाइन दस्तावेज़ का अनुवाद है। मुझे आश्चर्य है कि इस बारे में क्या सोचता है।
आवश्यक टिप्पणियां मैं डेवलपर्स को बताने की कोशिश करूंगा।
हमें एक नई वास्तुकला की आवश्यकता क्यों है
वर्तमान OpenSIPS वास्तुकला (संस्करण 2.0 से पहले) उन अवधारणाओं पर आधारित है जो 7 साल से अधिक पुरानी हैं। उस समय, आवश्यकताएं सरल थीं (सरल स्टेटलेस एसआईपी प्रॉक्सी, केवल यूडीपी) और निर्णय इन आवश्यकताओं के अनुसार किए गए थे। लेकिन सभी परिवर्धन के साथ, दोनों एसआईपी और कार्यक्षमता (जैसे टीसीपी / टीएलएस, स्क्रिप्ट हेरफेर, संवाद समर्थन, बाहरी सिस्टम के साथ एकीकरण, आदि) में, मौजूदा वास्तुकला अब आवश्यकताओं और वास्तविक उपयोग के मामलों को संतुष्ट नहीं कर सकता है।
चेतावनी! अंदर चित्रों के साथ एक बड़ा और संरचित पाठ है।
नई वास्तुकला द्वारा हल की जाने वाली समस्याएं:
- I / O ताले (परिवहन, DB, अनुप्रयोग)
- हार्डवेयर संसाधनों के साथ स्केलिंग (I / O और समानांतर प्रक्रियाओं का सिंक्रनाइज़ेशन वर्तमान वास्तुकला में एक अड़चन है)
- कॉन्फ़िगरेशन डिज़ाइन करते समय, आपको सेवा प्रावधान के तर्क पर ध्यान देने के बजाय निम्न-स्तरीय फ़ंक्शंस (TM, संवाद, NAT) से निपटना होगा।
- क्षैतिज स्केलिंग (दोनों कोर और रूटिंग लॉजिक)
- रूटिंग तंत्र (एक विशेष प्रोग्रामिंग भाषा के रूप में) में SIP (अन्य अनुप्रयोगों के साथ एकीकरण, जटिल रूटिंग स्क्रिप्ट तर्क, सरणियों और सूचियों के साथ काम करना, जटिल संचालन और डेटा प्रकारों के लिए समर्थन) से संबंधित क्षमताओं का एक बहुत सीमित सेट है और व्यवस्थापक से अतिरिक्त कौशल की आवश्यकता होती है।
- रूटिंग तंत्र बहुत बारीकी से एसआईपी स्टैक के साथ जुड़ा हुआ है, यह इस तथ्य की ओर जाता है कि ओपनपाइप को पुनरारंभ किए बिना इसे चलते समय नहीं बदला जा सकता है।
- कई प्रणालियों (स्केलेबिलिटी में सुधार के लिए) के बीच वितरित रूटिंग करना संभव नहीं है।
नई वास्तुकला का अवलोकन
नई वास्तुकला को वर्तमान वास्तुकला में समस्याओं और सफल समाधानों को ध्यान में रखते हुए विकसित किया गया था, और यह SIP और OpenPIPS के विकास दिशाओं को भी ध्यान में रखता है।
शीर्ष स्तर पर, OpenSIPS में दो पूरी तरह से स्वतंत्र हिस्से शामिल होंगे:
- एसआईपी-कोर (एसआईपी-कोर) - एसआईपी के साथ निम्न-स्तरीय संचालन के लिए समर्थन प्रदान करता है
- रूटिंग इंजन - उच्च-स्तरीय रूटिंग लॉजिक के लिए जिम्मेदार
यह माना जाता है कि कई राउटिंग सर्वर अलग-अलग कार्यक्षमता को लागू करने के लिए एक ही कोर से कनेक्ट करने में सक्षम होंगे, या केवल सिस्टम की क्षमता को संपूर्ण रूप से बढ़ाने के लिए।
एसआईपी कोर
कर्नेल एक निम्न-स्तरीय घटक है जो एसआईपी से संबंधित कार्य प्रदान करता है। उन्हें स्वचालित रूप से निष्पादित किया जा सकता है और जटिल कॉन्फ़िगरेशन की आवश्यकता नहीं होती है। एनएटी पहुंच, एसआईपी पंजीकरण और ऑनलाइन स्टेटस (प्रस्तुतियां) के लिए स्वचालित समर्थन के लिए कोर परिवहन परत, पैकेट विश्लेषण, लेनदेन और संवाद के लिए जिम्मेदार होगा, जो फ़ंक्शन आरएफसी में स्पष्ट रूप से परिभाषित हैं और उच्च-स्तरीय सबसिस्टम से किसी भी हस्तक्षेप की आवश्यकता नहीं है मार्ग।
कोर को कई क्षैतिज स्तरों में विभाजित किया गया है, जिनमें से प्रत्येक कुछ कार्य करता है:
- एल 0 - परिवहन परत। यूडीपी, टीसीपी, टीएलएस, एससीटीपी के लिए कार्यान्वयन समर्थन और परिवहन के लिए सभी बारीकियों को छुपाता है
- एल 1 - एसआईपी विश्लेषक स्तर (एसआईपी पार्सर परत)। एसआईपी संदेशों को पार्स करने के लिए जिम्मेदार
- एल 2 - लेनदेन परत (लेनदेन परत) - एसआईपी लेनदेन के लिए समर्थन का समर्थन करता है। प्रत्येक आने वाले SIP संदेश को SIP लेनदेन में मैप किया जाता है।
- एल 3 - डायलॉग स्तर - एसआईपी वार्तालाप के लिए समर्थन को लागू करता है। एसआईपी संदेश को एसआईपी वार्तालाप में मैप किया जा सकता है
- एल 4 - एनएटी के माध्यम से पारित होने का स्तर - एनएटी से गुजरने के लिए स्वचालित प्रोसेसर (एसआईपी सिग्नलिंग और परिवहन के स्तर पर समर्थन)
- एल 5 - ऑनलाइन स्टेटस (वर्तमान) के लिए समर्थन का स्तर - एसआईपी उपस्थिति एजेंट को लागू करता है। ऑनलाइन स्टेटस से संबंधित संदेशों का स्वचालित प्रसंस्करण।
- एल 6 और ऊपर ... अन्य स्तरों को आवश्यकतानुसार जोड़ा जा सकता है (जैसे कि उपयोगकर्ता स्थान)।
- एल पी - अंतिम स्तर - यह वह स्तर है जो रूटिंग इंजन (एपीआई या सॉकेट के माध्यम से) के साथ सहभागिता प्रदान करता है
कोर संरचना
एसआईपी संदेश निचले स्तर एल 0 पर आता है। प्रत्येक स्तर संदेशों को संसाधित करता है और या तो इसे अगले स्तर पर स्थानांतरित करता है, या इसे एक निचले स्तर पर लौटाता है। यदि कोई वापसी होती है, तो यह इंगित करता है कि संदेश प्रसंस्करण इस स्तर पर समाप्त हो गया है (उदाहरण के लिए, यह कैसे KeepAlive संदेशों का जवाब देने या पैकेट के काम को स्वचालित करने के लिए) है। जब संदेश उस परत तक पहुंचता है जो रूटिंग सर्वर के साथ इंटरैक्शन प्रदान करता है, तो राउटिंग सर्वर को संदेश प्रेषित किया जाता है (प्रत्येक स्तर पर किए गए सभी परिवर्तनों के साथ), जो संदेश को आगे की प्रक्रिया के लिए जारी रखता है। फिर संदेश उस पथ के साथ वापस आता है जो ऊपर से नीचे तक स्तर से स्तर तक जाता है, जब तक कि यह परिवहन स्तर (एल 0 ) तक नहीं पहुंचता है और नेटवर्क पर भेजा जाता है।
कर्नेल में दो संदेश प्रवाह हैं:
- आने वाली धारा (नीचे से ऊपर तक) - आने वाले संदेश को ऊपर की ओर प्रेषित किया जाता है, प्रत्येक स्तर पर परिवर्तनों के अधीन होता है, जब तक कि यह एक ऐसी जगह नहीं पहुंचता जहां यह तय किया जा सकता है कि संदेश के साथ क्या करना है (यह या तो कर्नेल के स्तर में या रूटिंग सबसिस्टम में हो सकता है) )।
- आउटगोइंग फ्लो (ऊपर से नीचे तक) - जब संदेश के साथ क्या करना है, इस पर निर्णय किया जाता है, तो संदेश को उन सभी परतों के माध्यम से वापस लौटा दिया जाता है, जब तक यह नेटवर्क पर नहीं भेजा जाता।
दोनों धाराओं में, प्रत्येक स्तर अलग-अलग क्रियाएं कर सकता है (उदाहरण के लिए, SIP विश्लेषक स्तर इनकमिंग स्ट्रीम से संदेशों को पार्स करता है और उन्हें आउटगोइंग स्ट्रीम में रखते हुए वापस इकट्ठा करता है)।
एसआईपी संदेशों को एल 0 (परिवहन परत) के साथ नेटवर्क से नेटवर्क पर पढ़ा जाता है, और फिर उन्हें उच्चतर परतों में प्रेषित किया जाता है। प्रत्येक परत उपयुक्त कार्य करती है: उदाहरण के लिए, एसआईपी विश्लेषक स्तर डेटा को संदेश में एक पार्स प्रारूप में जोड़ देगा, लेन-देन स्तर लेन-देन पहचानकर्ता को जोड़ देगा, संवाद स्तर संवाद पहचानकर्ता को जोड़ देगा, आदि। अपना कार्य पूरा करने के बाद, स्तर: (ए) संदेश को प्रसंस्करण के लिए एक उच्च स्तर पर स्थानांतरित कर सकता है (यदि वर्तमान स्तर प्रसंस्करण को पूरा नहीं कर सकता है) या (बी) यह तय करता है कि संदेश के साथ क्या करना है और संदेश भेजने के लिए आउटगोइंग स्ट्रीम में भेजना है (इस मामले में) , सभी उच्च स्तरों को छोड़ दिया जाएगा)।
ऐसा एल्गोरिथ्म प्रत्येक स्तर पर सबसे कुशल संदेश प्रसंस्करण प्रदान करता है। रूटिंग सबसिस्टम के लिए सभी स्तरों के माध्यम से सभी संदेशों को प्रसारित करने की आवश्यकता नहीं है, अगर संदेश निचले स्तरों का उपयोग करके स्वचालित रूप से संसाधित किया जा सकता है। उदाहरण के लिए, रखने वाले संदेशों की प्रतिक्रियाओं को कर्नेल द्वारा L4 स्तर पर स्वचालित रूप से संसाधित किया जा सकता है (NAT के माध्यम से पास)। एक अन्य उदाहरण है जब रूटिंग सबसिस्टम केवल प्रारंभिक अनुरोधों को प्राप्त करने और संसाधित करने में रुचि रखता है। इस मामले में, बाद के अनुरोधों को स्वचालित रूप से संसाधित किया जाएगा और उन्हें श्रृंखला के नीचे स्थानांतरित करने की आवश्यकता के बिना संवाद स्तर का उपयोग करके रूट किया जाएगा।
टीयर के अलावा, कोर कई डेटाबेस बैकएंड को भी लागू करता है। वे आंतरिक डेटा के पुनरारंभ के बीच बचाने के लिए उपयोग किए जाते हैं जो कि कर्नेल के प्रत्येक स्तर को मेमोरी (संवाद, ऑनलाइन स्थिति, पंजीकरण, NAT से गुजरने के लिए जानकारी) में संग्रहीत करता है।
कोर के अंदर, स्तरों को महत्व से विभाजित किया जा सकता है:
- बेस कोर - अनिवार्य स्तर (एल 0- एल 3 और एल एन ) शामिल हैं। वे ऐसी सुविधाएँ प्रदान करते हैं जो हमेशा आवश्यक होती हैं।
- अतिरिक्त स्तर (एल 4 - एल एन -1 ) जो वैकल्पिक कार्य प्रदान करते हैं। वे ऑपरेशन के दौरान कनेक्ट या डिस्कनेक्ट कर सकते हैं।
कर्नेल की अपनी कॉन्फ़िगरेशन फ़ाइल होती है, जिसमें मुख्य स्तर और डेटाबेस के बैकएंड के पैरामीटर होते हैं: जिस पर नेटवर्क सुनने के लिए इंटरफेस, लेनदेन पैरामीटर, डायलॉग पैरामीटर आदि।
कर्नेल एक गैर-अवरोधक रिएक्टर के रूप में कार्यान्वित किया जाता है जो गैर-अवरोधक I / O का समर्थन करता है। मल्टी-कोर प्रोसेसर के साथ मशीनों पर संसाधनों का प्रभावी ढंग से उपयोग करने के लिए, कर्नेल कई थ्रेड्स (सीपीयू कोर की संख्या के अनुसार) का उपयोग करता है।
रूटिंग इंजन
रूटिंग सबसिस्टम रूटिंग प्रदान करता है, जिसके लिए कॉन्फ़िगरेशन स्क्रिप्ट OpenSIPS के वर्तमान संस्करण के लिए जिम्मेदार है और वर्तमान में मौजूद अधिकांश मॉड्यूल की कार्यक्षमता प्रदान करता है।
रूटिंग सबसिस्टम एक अलग घटक के रूप में कर्नेल के ऊपर चलता है। जैसा कि पहले उल्लेख किया गया है, कई रूटिंग सबसिस्टम एक कोर से जुड़े हो सकते हैं - या तो विभिन्न सेवाओं को लागू करने के लिए, या कई भौतिक मशीनों पर लोड संतुलन के कारण सिस्टम के थ्रूपुट को बढ़ाने के लिए।
नए डिज़ाइन कर्नेल को रूटिंग सबसिस्टम से कनेक्ट करने के लिए दो तरीकों का उपयोग करने की अनुमति देता है:
- लायब्रेरी के रूप में रूटिंग लॉजिक जो कर्नेल से निकटता से संबंधित है, और कर्नेल के शीर्ष पर कई अतिरिक्त स्तरों और मॉड्यूल को लागू करता है। वे एक निष्पादन योग्य फ़ाइल के भीतर परस्पर जुड़े हुए हैं।
- तर्क को बाहरी अनुप्रयोग के रूप में रूटिंग करना जो सॉकेट का उपयोग करके कर्नेल के साथ संचार करता है। इस एप्लिकेशन को पाइथन या जावा जैसी उच्च-स्तरीय भाषा में लिखा जा सकता है।
दो दृष्टिकोणों का उपयोग क्यों करें? ये दो विकल्प परस्पर अनन्य नहीं हैं, लेकिन एक दूसरे के पूरक हैं - आंतरिक रूटिंग सर्वर प्रदर्शन और प्रबंधन क्षमता (कर्नल के साथ सीधे सी स्तर पर घनिष्ठ एकीकरण के कारण) के मामले में अधिक कुशल है, जबकि बाहरी रूटिंग सबसिस्टम समाधान को लागू करने के लिए बहुत अधिक सार्वभौमिक और सरल होगा। उच्च-स्तरीय भाषा अनुप्रयोग) जिसे नियंत्रित करना बहुत आसान है।
आंतरिक रूटिंग मॉड्यूल
एक रूटिंग मॉड्यूल एक अतिरिक्त स्तर का एक सेट है, जिसे लाइब्रेरी के रूप में प्रस्तुत किया जाता है, जो कि कर्नेल के साथ जुड़ा होगा, जो एकल अनुप्रयोग बनाता है। रूटिंग मॉड्यूल में शामिल हैं:
- स्क्रिप्ट दुभाषिया - तर्क को लागू करने के लिए
- अतिरिक्त मॉड्यूल - स्क्रिप्ट में तैयार कार्यक्षमता का समर्थन करने के लिए
आंतरिक रूटिंग सबसिस्टम
स्क्रिप्ट दुभाषिया मौजूदा विशेष भाषा पर आधारित है जो सीधे उच्च-स्तरीय भाषा (उदाहरण के लिए, पेरेडेड) में ब्लॉक डालने की क्षमता के साथ है। प्रदर्शन पर प्रभाव की डिग्री के आधार पर, आप पूरी तरह से एक विशेष स्क्रिप्ट को उच्च-स्तरीय भाषा से बदल सकते हैं (उदाहरण के लिए, पर्ल में रूटिंग मॉड्यूल के पूरे तर्क को लिखें जिसमें से कर्नेल फ़ंक्शन या सी में मॉड्यूल कहा जाता है)।
नई वास्तुकला में, मौजूदा मूल स्क्रिप्ट का उपयोग करना संभव है, क्योंकि इसकी व्याख्या करने वाला बहुत तेज़ है, और यह सरल तर्क के साथ विन्यास के लिए एकदम सही है और उच्च भार के साथ अच्छी तरह से मुकाबला करता है।
उच्च-स्तरीय भाषाओं में एम्बेडिंग स्क्रिप्ट भी उपयोगी लगती है, क्योंकि यह समाधान उन परिदृश्यों के कार्यान्वयन को सरल करता है जहां जटिल मार्ग तर्क की आवश्यकता होती है, जिन्हें उच्च-स्तरीय भाषा की क्षमताओं का उपयोग करके लागू किया जा सकता है। जटिल स्क्रिप्ट लिखने की जटिलता को कम करने के अलावा, यह सुविधा एक विशेष अंतर्निहित स्क्रिप्टिंग भाषा सीखने की आवश्यकता को समाप्त करती है। हालाँकि, इस मामले में, कुछ प्रदर्शन में गिरावट आएगी, क्योंकि उच्च-स्तरीय भाषा दुभाषिया भारी और धीमी होती हैं। दूसरी ओर, उच्च-स्तरीय भाषाओं के उपयोग से क्षैतिज स्केलिंग प्राप्त होगी। एक OpenSIPS क्लस्टर की कल्पना करें (कई सर्वरों पर) जहां सभी रूटिंग सबसिस्टम (एक उच्च-स्तरीय भाषा और भंडारण तकनीकों की सुविधाओं का उपयोग करके) एक नेटवर्क से जुड़े होते हैं और एक पूरे के रूप में व्यवहार करते हैं - एक वैश्विक रूटिंग सर्वर जो कई OpenSIPS एसेस का उपयोग करता है।
रूटिंग सबसिस्टम के मॉड्यूल जो पूर्वनिर्धारित कार्य प्रदान करते हैं (डायप्लेन, LCR, QoS, B2BUA आदि) का उपयोग स्क्रिप्ट से किया जा सकता है, भले ही इसका प्रारूप कुछ भी हो।
ऑपरेशन के दौरान स्क्रिप्ट को फिर से लोड करना संभव है।
बाहरी रूटिंग सबसिस्टम
साथ ही बिल्ट-इन, बाहरी रूटिंग सबसिस्टम (या एप्लिकेशन) को उन स्तरों के सेट के रूप में कार्यान्वित किया जाता है, जिनके माध्यम से संदेश दो दिशाओं में गुजरते हैं (नीचे से ऊपर और नीचे से ऊपर)। ये परतें एक परत के साथ समाप्त होती हैं जो एक विशेष एसआईपी सेवा के लिए तर्क मार्ग को लागू करती हैं। अंतिम परत पुरानी वास्तुकला में प्रयुक्त स्क्रिप्ट के बराबर है।
कुछ स्तर सक्रिय हैं - इसका मतलब है कि वे प्रसारण के दौरान संदेश बदलते हैं और संभवतः, संदेशों को रिले करने से रोकने, प्रसंस्करण को समाप्त करने और संदेश को वापस करने का निर्णय लेते हैं। यह या तो संदेश की सामग्री का विश्लेषण करके, या पिछले रूटिंग स्तर के निर्देशों के आधार पर किया जाता है। कुछ अन्य स्तर निष्क्रिय हैं। इसका मतलब यह है कि वे केवल उन कक्षाओं और कार्यों को प्रदान करते हैं जो कुछ क्षमताओं (उदाहरण के लिए, LCR या कॉल नियंत्रण) को लागू करते हैं, लेकिन उनका उपयोग स्तरों के बीच एंड-टू-एंड संदेश के लिए नहीं किया जाता है। उन्हें रूटिंग लॉजिक से स्पष्ट रूप से कहा जाता है और संदेश को संशोधित करता है।
एक आवेदन के रूप में अनुमार्गण प्रणाली
अनुप्रयोग एक विशिष्ट कोर (या कई कोर पर, यदि आवश्यक हो) में पंजीकृत करता है और कोर की क्षमताओं पर रिपोर्ट करता है। सुविधाओं में ऐसे संदेश शामिल हैं जो इस रूटिंग सबसिस्टम और प्रतिबंधों में रुचि रखते हैं। यह कर्नेल को कौन से संदेश और इस एप्लिकेशन को संचारित करने के लिए कितना फ़िल्टर करने की अनुमति देता है। इसके अलावा, आवेदन कर्नेल को कर्नेल के कुछ वैकल्पिक स्तरों को गतिशील रूप से सक्षम / अक्षम करने का अनुरोध कर सकता है जब कर्नेल यह निर्णय लेता है कि इस एप्लिकेशन को संदेश भेजा जाना चाहिए। यह आपको लचीले कॉन्फ़िगरेशन बनाने की अनुमति देता है जिसमें एक विशिष्ट एप्लिकेशन कर सकता है, उदाहरण के लिए, कर्नेल को बताएं कि सभी संदेश जो एक विशिष्ट एप्लिकेशन को प्रेषित होते हैं, एनएटी के माध्यम से पारित होने के स्तर को अक्षम करें। परिणामस्वरूप, जब कर्नेल इस एप्लिकेशन को संदेश भेजता है, तो वह NAT के माध्यम से पास स्तर को छोड़ देगा। इसका मतलब है कि एप्लिकेशन अपने दम पर एनएटी से गुजरने से निपटना चाहता है। इसका यह भी अर्थ है कि एप्लिकेशन को मुख्य संदेश प्राप्त होंगे। अन्य अनुप्रयोग, यदि उन्होंने इस स्तर को अक्षम नहीं किया है, तो वे विचारशील संदेश नहीं देखेंगे और NAT से गुजरने की समस्या को हल नहीं करेंगे, क्योंकि NAT के माध्यम से पारित होने के स्तर का उपयोग किया जाएगा। यह एक बहुत ही लचीले कॉन्फ़िगरेशन के लिए अनुमति देता है जिसके द्वारा कोर कॉन्फ़िगरेशन को बदलने या कोर को पुनरारंभ करने की आवश्यकता के बिना कुछ वैकल्पिक कोर स्तर चालू समय पर चालू या बंद किए जा सकते हैं।
एकाधिक एकल कोर अनुप्रयोग
एक पूरे आवेदन को पायथन जैसे उच्च-स्तरीय भाषा में लिखा जा सकता है। OpenSIPS में एक कार्यान्वयन सभी आवश्यक कार्य प्रदान करेगा जो उपयोगकर्ता को उच्च-स्तरीय रूटिंग तर्क लिखने में सक्षम बनाता है। यह एप्लिकेशन आरेख में अंतिम स्तर से मेल खाता है। यह एक मौजूदा स्क्रिप्ट की तरह होगा, केवल इसे उसी भाषा में लिखा जाएगा (इस मामले में पायथन) बाकी एप्लिकेशन की तरह। बेशक, एप्लिकेशन को अन्य भाषाओं, जैसे जावा, रूबी या पर्ल में लागू किया जा सकता है।
हम में से प्रत्येक OpenSIPS परियोजना में मदद कर सकता है।
आपका ध्यान देने के लिए धन्यवाद।