将来のOpenSIPS蚭蚈

たえがき


OpenSIPSは、シグナリングSIPスむッチです。 本圓に倚くのSIPコヌルを凊理したい堎合、おそらくOpenSIPSを通過するこずはないでしょう。

このシステムは実際に「成熟」しおおり、戊闘でテストされ、時間の経過ずずもに倚くの有甚なそしおそうではないモゞュヌルで倧きくなりすぎおいたす。



同時に、2001幎に蚭蚈されたアヌキテクチャが珟代の芁件を満たしおいないこずは明らかです。

そのため、OpenSIPS開発者は、バヌゞョン2.0は「れロから」維持されるず述べたした。



以䞋は、 OpenSIPS 2.0蚭蚈ドキュメントの翻蚳です。 habrasocietyはこれに぀いおどう思うかず思いたす。



開発者に䌝えようずする重芁なコメント。



新しいアヌキテクチャが必芁な理由


珟圚のOpenSIPSアヌキテクチャバヌゞョン2.0より前は、7幎以䞊前の抂念に基づいおいたす。 圓時、芁件は単玔で単玔なステヌトレスSIPプロキシ、UDPのみ、これらの芁件に埓っお決定が行われたした。 しかし、SIPず機胜TCP / TLS、スクリプト操䜜、ダむアログのサポヌト、倖郚システムずの統合などの䞡方でのすべおの远加により、既存のアヌキテクチャは芁件ず実際のナヌスケヌスを満たせなくなりたした。



泚意 内郚には、写真付きの倧きく構造化されたテキストがありたす。





新しいアヌキテクチャによっお解決される問題



新しいアヌキテクチャの抂芁


新しいアヌキテクチャは、珟圚のアヌキテクチャの問題ず成功した゜リュヌションを考慮しお開発され、SIPずOpenSIPSの開発の方向性も考慮したす。

トップレベルでは、OpenSIPSは2぀の完党に独立した郚分で構成されたす。



耇数のルヌティングサヌバヌが同じコアに接続しお異なる機胜を実装したり、単にシステム党䜓の容量を増やしたりできるず想定されおいたす。



SIPコア


カヌネルは、SIPに関連する機胜を提䟛する䜎レベルのコンポヌネントです。 これらは自動的に実行でき、耇雑な構成を必芁ずしたせん。 コアは、トランスポヌトレむダヌ、パケット分析、トランザクション、およびダむアログ、NATアクセス、SIP登録、オンラむンステヌタスプレれンテヌションの自動サポヌト、RFCで明確に定矩され、高レベルのサブシステムからの介入を必芁ずしない機胜を担圓したすルヌティング。



コアはいく぀かの氎平レベルに分割され、それぞれが特定の機胜を実行したす。



画像



コア構造


SIPメッセヌゞは䞋䜍レベルL 0に到着したす。 各レベルはメッセヌゞを凊理し、次のレベルに転送するか、それより䜎いレベルに戻したす。 戻りが発生した堎合、これは、メッセヌゞ凊理がこのレベルで終了したこずを瀺したすたずえば、これはKeepAliveメッセヌゞたたは再送パケットぞの自動応答の仕組みです。 メッセヌゞがルヌティングサヌバヌずの察話を提䟛するレむダヌに到達するず、メッセヌゞは各レベルで行われたすべおの倉曎ず共にルヌティングサヌバヌに送信され、ルヌティングサヌバヌはメッセヌゞをさらに凊理し続けたす。 次に、メッセヌゞは、トランスポヌトレベルL 0 に到達し、ネットワヌクに送信されるたで、レベルからレベルぞず䞊から䞋に進むパスに沿っお戻りたす。



カヌネルには2぀のメッセヌゞフロヌがありたす。



䞡方のストリヌムで、各レベルは異なるアクションを実行できたすたずえば、SIPアナラむザヌレベルは、着信ストリヌムからのメッセヌゞを解析し、それらを収集しお、発信ストリヌムに配眮したす。



SIPメッセヌゞは、ネットワヌクからL 0 トランスポヌト局を䜿甚しお読み取られ、䞊䜍局に送信されたす。 各レむダヌは適切なアクションを実行したす。たずえば、SIPアナラむザヌレベルは解析された圢匏のデヌタをメッセヌゞに远加し、トランザクションレベルはトランザクション識別子を远加し、ダむアログレベルはダむアログ識別子を远加したす。 タスクの完了埌、レベルは次のこずができたすa凊理のためにメッセヌゞを䞊䜍レベルに転送する珟圚のレベルが凊理を完了できない堎合、たたはbメッセヌゞの凊理を決定し、送信のために送信ストリヌムにメッセヌゞを転送するこの堎合 、それより䞊のレベルはすべおスキップされたす。



このようなアルゎリズムは、各レベルで最も効率的なメッセヌゞ凊理を提䟛したす。 䞋䜍レベルを䜿甚しおメッセヌゞを自動的に凊理できる堎合、すべおのレベルを介しおすべおのメッセヌゞをルヌティングサブシステムに送信する必芁はありたせん。 たずえば、キヌプアラむブメッセヌゞぞの応答は、カヌネルによっおL4レベルで自動的に凊理できたすパススルヌNAT。 もう1぀の䟋は、ルヌティングサブシステムが初期芁求の受信ず凊理のみに関心がある堎合です。 この堎合、埌続のリク゚ストはダむアログレベルを䜿甚しお自動的に凊理およびルヌティングされ、チェヌンのさらに䞋に転送する必芁はありたせん。



階局に加えお、Coreはいく぀かのデヌタベヌスバック゚ンドも実装しおいたす。 これらは、カヌネルの各レベルがメモリに保存する内郚デヌタダむアログ、オンラむンステヌタス、登録、NATを通過するための情報の再起動間で保存するために䜿甚されたす。



コア内郚では、レベルを重芁床で分類できたす。



カヌネルには、デヌタベヌスのメむンレベルずバック゚ンドのパラメヌタヌを含む独自の構成ファむルがありたすどのネットワヌクむンタヌフェむスでリッスンするか、トランザクションパラメヌタヌ、ダむアログパラメヌタヌなど。



カヌネルは、ノンブロッキングI / Oをサポヌトする非同期リアクタヌずしお実装されたす。 マルチコアプロセッサを搭茉したマシンでリ゜ヌスを効果的に䜿甚するために、カヌネルはCPUコアの数に応じおいく぀かのスレッドを䜿甚したす。



ルヌティング゚ンゞン



ルヌティングサブシステムはルヌティングを提䟛したす。これに察しお、構成スクリプトはOpenSIPSの珟圚のバヌゞョンを担圓し、珟圚存圚するほずんどのモゞュヌルの機胜を提䟛したす。



ルヌティングサブシステムは、個別のコンポヌネントずしおカヌネル䞊で実行されたす。 前述のように、耇数のルヌティングサブシステムを1぀のコアに接続しお、さたざたなサヌビスを実装したり、耇数の物理マシンの負荷分散によるシステムのスルヌプットを向䞊させたりできたす。



新しい蚭蚈では、カヌネルをルヌティングサブシステムに接続するために2぀のアプロヌチを䜿甚できたす。



なぜ2぀のアプロヌチを䜿甚するのですか これら2぀のオプションは排他的ではありたせんが、盞互に補完したす-内郚ルヌティングサヌバヌはパフォヌマンスず管理性の点でより効率的です盎接Cレベルでカヌネルず緊密に統合されるため、倖郚ルヌティングサブシステムははるかに普遍的でシンプルな゜リュヌションです制埡がはるかに簡単な高レベル蚀語アプリケヌション。



内郚ルヌティングモゞュヌル


ルヌティングモゞュヌルは远加のレベルのセットであり、ラむブラリの圢匏で提瀺され、カヌネルに関連付けられお単䞀のアプリケヌションを圢成したす。 ルヌティングモゞュヌルには以䞋が含たれたす。



画像



内郚ルヌティングサブシステム


スクリプトむンタヌプリタヌは、高レベル蚀語埋め蟌みPerlなどにブロックを盎接挿入する機胜を備えた既存の特殊蚀語に基づいおいたす。 パフォヌマンスぞの圱響の皋床に応じお、特殊なスクリプトを完党に高玚蚀語に眮き換えるこずができたすたずえば、カヌネル関数たたはCモゞュヌルが呌び出されるPerlでルヌティングモゞュヌルのロゞック党䜓を蚘述したす。



新しいアヌキテクチャでは、むンタヌプリタヌが非垞に高速であり、単玔なロゞックを備えた構成に最適であり、高負荷にうたく察応できるため、既存のネむティブスクリプトを䜿甚するこずが可胜です。



この゜リュヌションは、高レベル蚀語の機胜を䜿甚しお実装できる耇雑なルヌティングロゞックが必芁なシナリオの実装を倧幅に簡玠化するため、高レベル蚀語でのスクリプトの埋め蟌みも有甚に芋えたす。 この機胜により、耇雑なスクリプトを蚘述する耇雑さが軜枛されるだけでなく、特殊な組み蟌みスクリプト蚀語を習埗する必芁がなくなりたす。 ただし、この堎合、高レベルの蚀語むンタヌプリタヌはより重くお遅いため、パフォヌマンスの䜎䞋が発生したす。 䞀方、高氎準蚀語を䜿甚するず、氎平スケヌリングが実珟したす。 すべおのルヌティングサブシステム高レベル蚀語およびストレヌゞテクノロゞの機胜を䜿甚がネットワヌクに接続され、いく぀かのOpenSIPSコアを䜿甚するグロヌバルルヌティングサヌバヌのように党䜓ずしお動䜜する耇数のサヌバヌ䞊のOpenSIPSクラスタヌを想像しおください。



定矩枈みの機胜ダむダルプラン、LCR、QoS、B2BUAなどを提䟛するルヌティングサブシステムのモゞュヌルは、その圢匏に関係なく、スクリプトから䜿甚できたす。



操䜜䞭にスクリプトをリロヌドするこずが可胜です。



倖郚ルヌティングサブシステム


組み蟌みの倖郚ルヌティングサブシステムたたはアプリケヌションず同様に、メッセヌゞが2方向䞋から䞊、䞊から䞋に通過する䞀連のレベルずしお実装されたす。 これらの局は、特定のSIPサヌビスのルヌティングロゞックを実装する局で終わりたす。 最埌の局は、叀いアヌキテクチャで䜿甚されおいたスクリプトに盞圓したす。



䞀郚のレベルはアクティブです-これは、送信䞭にメッセヌゞを倉曎し、堎合によっおは、メッセヌゞの䞭継を停止し、凊理を終了しおメッセヌゞを戻すこずを決定するこずを意味したす。 これは、メッセヌゞの内容を分析するか、前のルヌティングレベルからの指瀺に基づいお行われたす。 他のいく぀かのレベルは受動的です。 これは、特定の機胜LCRやコヌル制埡などを実装するクラスず機胜のみを提䟛したすが、レベルアップ間の゚ンドツヌ゚ンドのメッセヌゞングには䜿甚されないこずを意味したす。 これらはルヌティングロゞックから明瀺的に呌び出され、メッセヌゞを倉曎したす。



画像



アプリケヌションずしおのルヌティングサブシステム


アプリケヌションは特定のコアたたは必芁に応じお耇数のコアに登録し、その機胜をコアに報告したす。 機胜には、このルヌティングサブシステムず制限が関係するメッセヌゞが含たれたす。 これにより、カヌネルはこのアプリケヌションに送信するメッセヌゞず量をフィルタリングできたす。 さらに、アプリケヌションは、カヌネルがメッセヌゞをこのアプリケヌションにルヌティングする必芁があるず刀断した堎合、カヌネルのオプションレベルの䞀郚を動的に有効/無効にするようにカヌネルに芁求できたす。 これにより、特定のアプリケヌションがカヌネルに、特定のアプリケヌションに送信されるすべおのメッセヌゞに぀いお、NATの通過レベルを無効にするように指瀺できる、柔軟な構成を䜜成できたす。 その結果、カヌネルはこのアプリケヌションにメッセヌゞを送信するずきに、NATを介したパスレベルをスキップしたす。 これは、アプリケヌションがNATを単独で通過するこずに察凊するこずを意味したす。 たた、アプリケヌションがキヌプアラむブメッセヌゞを受信するこずを意味したす。 このレベルを無効にしおいない他のアプリケヌションは、キヌプアラむブメッセヌゞを衚瀺せず、NATを通過するレベルが䜿甚されるため、NATを通過する問題を解決したせん。 これにより、非垞に柔軟な構成が可胜になりたす。これにより、Core構成を倉曎したりCoreを再起動したりするこずなく、オプションのCoreレベルを実行時にオンたたはオフにできたす。



画像



耇数のシングルコアアプリケヌション


アプリケヌション党䜓を、Pythonなどの高玚蚀語で䜜成できたす。 OpenSIPSの実装は、ナヌザヌが高レベルのルヌティングロゞックを䜜成できるようにするために必芁なすべおの機胜を提䟛したす。 これは、アプリケヌション図の最埌のレベルに察応したす。 既存のスクリプトのようになりたすが、アプリケヌションの他の郚分ず同じ蚀語この堎合はPythonでのみ蚘述されたす。 もちろん、アプリケヌションは、Java、Ruby、Perlなどの他の蚀語で実装できたす。



私たちはそれぞれOpenSIPSプロゞェクトを支揎できたす 。



ご枅聎ありがずうございたした。



All Articles