分散アプリケヌションの構成芁玠。 れロ近䌌

分散アプリケヌションの構成芁玠。 れロ近䌌

䞖界は静止しおいたせん。 進歩は新たな技術的課題を生み出したす。 倉化する芁件に応じお、情報システムのアヌキテクチャも進化する必芁がありたす。 今日は、むベント駆動型アヌキテクチャ、同時実行性、同時実行性、非同期性、そしお Erlang でこれらすべおを問題なく䜿甚する方法に぀いお説明したす。

導入

蚭蚈されたシステムの芏暡ずその芁件に応じお、私たち開発者はシステム内で情報を亀換する方法を遞択したす。 ほずんどの堎合、サヌビスの察話を敎理するには、RabbitMQ や Kafka などに基づくブロヌカヌを䜿甚したスキヌムが有効なオプションずなりたす。 ただし、むベントの流れ、SLA、システムの制埡レベルによっおは、既成のメッセヌゞングが適さない堎合もありたす。 もちろん、ZeroMQ や nanomsg を䜿甚するなど、トランスポヌト局ずクラスタヌの圢成を担圓するこずで、システムを少し耇雑にするこずもできたす。 ただし、システムが暙準 Erlang クラスタヌの十分なスルヌプットず機胜を備えおいる堎合、远加の゚ンティティを導入する問題には詳现な調査ず経枈的正圓性が必芁です。

リアクティブ分散アプリケヌションのトピックは非垞に広範囲に及びたす。 蚘事の圢匏を維持するために、今日の議論の䞻題は Erlang/Elixir 䞊に構築された同皮の環境のみです。 Erlang/OTP ゚コシステムを䜿甚するず、最小限の劎力でリアクティブ アヌキテクチャを実装できたす。 しかし、いずれの堎合でも、メッセヌゞング局が必芁になりたす。

理論的根拠

蚭蚈は、目暙ず制玄を定矩するこずから始たりたす。 䞻な目暙は、開発のための開発領域ではありたせん。 私たちは、さたざたなレベルの最新のアプリケヌションを䜜成、そしお最も重芁なこずに開発できる、安党でスケヌラブルなツヌルを入手する必芁がありたす。小芏暡なナヌザヌにサヌビスを提䟛する単䞀サヌバヌのアプリケヌションから始めお、埌に最倧 50 のクラスタヌに発展させるこずができたす。 -60 ノヌド、クラスタヌ フェデレヌションで終了。 したがっお、䞻な目暙は、最終システムの開発コストず所有コストを削枛しお利益を最倧化するこずです。

最終的なシステムの 4 ぀の䞻な芁件を匷調したしょう。

  • Сむベント指向。
    システムは垞にむベントのフロヌを通過し、必芁なアクションを実行する準備ができおいたす。
  • Мスケヌラビリティ。
    個々のブロックは垂盎方向ず氎平方向の䞡方にスケヌリングできたす。 システム党䜓が無限に氎平方向に成長できる必芁がありたす。
  • О耐障害性。
    すべおのレベルずすべおのサヌビスは、障害から自動的に回埩できる必芁がありたす。
  • Г保蚌された応答時間。
    時間は貎重なので、ナヌザヌはあたり長く埅ちすぎおはいけたせん。

「できる小さな゚ンゞン」に぀いおの叀いおずぎ話を芚えおいたすか? 蚭蚈されたシステムがプロトタむプ段階を正垞に終了し、進歩するためには、その基盀が最小芁件を満たしおいる必芁がありたす。 スモッグ.

むンフラストラクチャ ツヌルおよびすべおのサヌビスの基盀ずしおのメッセヌゞングには、プログラマにずっおの䜿いやすさずいうもう XNUMX ぀のポむントが远加されたす。

むベント指向

アプリケヌションが単䞀サヌバヌからクラスタヌに成長するには、そのアヌキテクチャが疎結合をサポヌトしおいる必芁がありたす。 非同期モデルはこの芁件を満たしたす。 この堎合、送信者ず受信者はメッセヌゞの情報負荷に気を配り、システム内の送信やルヌティングに぀いおは心配したせん。

スケヌラビリティ

スケヌラビリティずシステム効率は隣り合わせです。 アプリケヌション コンポヌネントは、利甚可胜なすべおのリ゜ヌスを利甚できる必芁がありたす。 容量をより効率的に利甚でき、凊理方法がより最適化されるほど、蚭備に費やす費甚が削枛されたす。

Erlang は単䞀マシン内で競争の激しい環境を䜜り出したす。 同時実行性ず䞊列性のバランスは、Erlang VM で䜿甚できるオペレヌティング システム スレッドの数ず、これらのスレッドを利甚するスケゞュヌラの数を遞択するこずで蚭定できたす。
Erlang プロセスは状態を共有せず、ノンブロッキング モヌドで動䜜したす。 これにより、埓来のブロッキングベヌスのアプリケヌションに比べお、比范的䜎いレむテンシず高いスルヌプットが実珟したす。 Erlang のスケゞュヌラは CPU ず IO の公平な割り圓おを保蚌し、ブロッキングがないため、アプリケヌションはピヌク負荷や障害時でも応答できたす。

クラスタヌレベルでは、廃棄の問題も存圚したす。 クラスタヌ内のすべおのマシンに均等な負荷がかかり、ネットワヌクが過負荷にならないこずが重芁です。 状況を想像しおみたしょう。ナヌザヌ トラフィックは受信バランサヌ (haproxy、nginx など) に到達し、利甚可胜なバック゚ンドのセット間で凊理リク゚ストを可胜な限り均等に分散したす。 アプリケヌション むンフラストラクチャ内では、必芁なむンタヌフェむスを実装するサヌビスは最埌のマむルにすぎず、最初のリク゚ストに応答するために他の倚くのサヌビスをリク゚ストする必芁がありたす。 内郚リク゚ストにはルヌティングずバランシングも必芁です。
デヌタ フロヌを効果的に管理するには、メッセヌゞングがルヌティングず負荷分散を管理するむンタヌフェむスを開発者に提䟛する必芁がありたす。 このおかげで、開発者はマむクロサヌビス パタヌン (アグリゲヌタヌ、プロキシ、チェヌン、ブランチなど) を䜿甚しお、暙準的な問題ずめったに発生しない問題の䞡方を解決できるようになりたす。

ビゞネスの芳点から芋るず、スケヌラビリティはリスク管理ツヌルの XNUMX ぀です。 䞻なこずは、機噚を最適に䜿甚しお顧客の芁求を満たすこずです。

  • 進化により装備の嚁力が䞊昇した堎合。 ゜フトりェアが䞍完党なためにアむドル状態になるこずはありたせん。 Erlang は垂盎方向に適切に拡匵でき、垞にすべおの CPU コアず利甚可胜なメモリを利甚できたす。
  • クラりド環境では、珟圚たたは予枬される負荷に応じお機噚の台数を管理し、SLAを保蚌したす。

耐障害性

「倱敗は蚱されない」ず「倱敗は必ずある」ずいう XNUMX ぀の公理を考えおみたしょう。 ビゞネスにずっお、゜フトりェアの障害は金銭の損倱、さらに悪いこずに評刀の損倱を意味したす。 起こり埗る損倱ずフォヌルト トレラント ゜フトりェアの開発コストずのバランスを考慮するず、劥協点が芋぀かるこずがよくありたす。

短期的には、フォヌルト トレランスを組み蟌んだアヌキテクチャにより、既補のクラスタリング ゜リュヌションを賌入するコストが節玄されたす。 高䟡ですし、バグもありたす。
長期的には、フォヌルト トレラント アヌキテクチャは、開発のすべおの段階で䜕倍もの利益をもたらしたす。
コヌド ベヌス内のメッセヌゞングにより、開発段階でシステム内のコンポヌネントの盞互䜜甚を詳现に怜蚎できたす。 これにより、すべおの重芁なコンポヌネントが障害を凊理し、結果ずしお生じるシステムは障害埌に自動的に正垞に戻る方法を蚭蚈䞊認識しおいるため、障害ぞの察応ず管理のタスクが簡玠化されたす。

応答性

障害に関係なく、アプリケヌションはリク゚ストに応答し、SLA を満たす必芁がありたす。 珟実には、人々は埅ちたくないので、䌁業はそれに応じお適応する必芁がありたす。 応答性の高いアプリケヌションがたすたす増加するず予想されたす。
応答性の高いアプリケヌションは、ほがリアルタむムで動䜜したす。 Erlang VM は゜フト リアルタむム モヌドで動䜜したす。 株匏取匕、医療、産業機噚制埡などの䞀郚の分野では、ハヌド リアルタむム モヌドが重芁です。
レスポンシブ システムは UX を向䞊させ、ビゞネスに利益をもたらしたす。

予備結果

この蚘事を蚈画するにあたり、メッセヌゞング ブロヌカヌを䜜成し、それに基づいお耇雑なシステムを構築した私の経隓を共有したいず思いたした。 しかし、理論的および動機付けの郚分は非垞に広範囲にわたるこずが刀明したした。
蚘事の埌半では、亀換ポむントの実装の埮劙な違い、メッセヌゞング パタヌン、およびその応甚に぀いお説明したす。
XNUMX 番目の郚分では、サヌビスの線成、ルヌティング、バランスに関する䞀般的な問題に぀いお怜蚎したす。 システムのスケヌラビリティず耐障害性の実際的な偎面に぀いお話したしょう。

最初の郚分の終わり

フォト @ルカブラボ.

出所 habr.com

コメントを远加したす