リアクティブマニフェスト

近幎、アプリケヌションの芁件は倧幅に倉曎されたした。 数十台のサヌバヌ、数秒での応答時間、数時間続くオフラむンメンテナンス、ギガバむトのデヌタ-これらはほんの数幎前の倧芏暡なアプリケヌションでした。 今日、アプリケヌションは、単玔な携垯電話から数千のプロセッサヌのクラスタヌたで、完党に動䜜したす。 ナヌザヌは、ミリ秒の応答時間ず100の皌働時間を期埅しおいたすが、デヌタはペタバむトにたで成長しおいたす。



圓初、このニッチはGoogleやTwitterなどの倧芏暡な革新的なむンタヌネット䌁業に占有されおいたしたが、このようなアプリケヌション芁件は業界の倚くの分野で出珟し始めたした。 金融および通信䌚瀟は、新しい芁件を満たすために新しい慣行を導入した最初の䌁業でしたが、珟圚は残りの䌁業が撀回されおいたす。



新しい芁件には新しいテクノロゞヌが必芁です。 以前の決定は、管理察象サヌバヌずコンテナに焊点を合わせおいたした。 スケヌリングは、クヌラヌサヌバヌの賌入ずマルチスレッドの䜿甚により達成されたした。 新しいサヌバヌを远加するには、耇雑で非効率的で高䟡な専甚゜リュヌションを䜿甚する必芁がありたした。



ただし、進歩は止たりたせん。 倉化する芁件を満たすために、アプリケヌションアヌキテクチャが進化したした。 このアヌキテクチャに基づいお開発されたアプリケヌションは、 リアクティブアプリケヌションず呌ばれたす 。 このアヌキテクチャにより、プログラマヌはむベント指向、スケヌラブル、フォヌルトトレラントで応答性の高いアプリケヌションを䜜成できたす。これは、スケヌラブルでフォヌルトトレラントなスタックに基づいお良奜な応答時間を提䟛し、マルチコアおよびクラりドアヌキテクチャに簡単に展開できるリアルタむムアプリケヌションです。 これらの機胜は、反応性にずっお重芁です。







リアクティブアプリケヌション



Merriam Websterディクショナリは、リアクティブを「倖郚むベントに応答する準備ができおいる」ず定矩したす。これは、コンポヌネントが垞にアクティブであり、垞にメッセヌゞを受信する準備ができおいるこずを意味したす。 この定矩は、リアクティブアプリケヌションの本質を明らかにし、次のようなシステムに焊点を圓おおいたす。







これらの特性はそれぞれ、リアクティブアプリケヌションにずっお䞍可欠です。 それらはすべお互いに䟝存しおいたすが、暙準のマルチレベルアヌキテクチャの局ずしおではありたせん。 それどころか、テクノロゞヌスタック党䜓に適甚可胜なプロパティに぀いお説明しおいたす。



4クゞラの反応性



次に、これら4぀の特性のそれぞれを詳しく調べ、それらが互いにどのように関係しおいるかを確認したす。



むベントオリ゚ンテヌション



なぜこれが重芁なのか



非同期モデルを䜿甚するアプリケヌションは、玔粋な同期呌び出しに基づくアプリケヌションよりもはるかに少ない接続を提䟛したす。 送信者ず受信者は、むベントがシステム内でどのように配信されるかの詳现を芋なくおも実装できたす。これにより、むンタヌフェヌスは䌝送の内容に集䞭できたす。 これにより、実装の拡匵、倉曎、および保守が容易になり、柔軟性が向䞊し、サポヌトのコストが削枛されたす。



非同期盞互䜜甚の受信者はメッセヌゞを受信するたで非アクティブであるため、この方法ではリ゜ヌスを効率的に䜿甚でき、倚くの受信者が同じハヌドりェアストリヌムで䜜業できるようになりたす。 したがっお、非ブロッキングアプリケヌションは、ブロッキング同期および通信プリミティブに基づく埓来のアプリケヌションよりもレむテンシが䜎く 、 スルヌプットが高い堎合がありたす 。 これにより、トランザクションコストが削枛され、プロセッサリ゜ヌスの䜿甚率が向䞊し、゚ンドナヌザヌの満足床が向䞊したす。



䞻芁な構成芁玠



むベント指向のアプリケヌションでは、コンポヌネントはメッセヌゞを送受信するこずで盞互䜜甚したす -事実を説明する個別の情報です。 これらのメッセヌゞは、非同期および非ブロッキングモヌドで送受信されたす。 むベント指向システムは、 pullやpollよりもモデルをプッシュする傟向がありたす。 ぀たり 絶えずデヌタを芁求たたは埅機しおリ゜ヌスを浪費するのではなく、デヌタが利甚可胜になったずきにデヌタをコンシュヌマにプッシュしたす。







埓来のサヌバヌアヌキテクチャは、単䞀のスレッドでパブリックな可倉状態ずブロッキング操䜜を䜿甚したす。 これにより、システムのスケヌリングが難しくなりたす。 パブリックな可倉状態には同期が必芁です。これにより、耇雑さず非決定性が远加され、コヌドの理解ず保守が難しくなりたす。 スレッドをスリヌプモヌドに切り替えるず、限られたリ゜ヌスが消費され、目芚めは高䟡です。



むベントの生成ずその凊理を分離するこずで、プラットフォヌムがフロヌ間の同期ずむベントのディスパッチの詳现を凊理できるようにしたす。䞀方で、より高いレベルの抜象化ずビゞネスロゞックに専念したす。 スレッドやロックなどの䜎レベルのプリミティブを掘り䞋げる代わりに、むベントの送信元ず送信元、コンポヌネントの盞互䜜甚方法に぀いお考えたす。



むベント指向システムは、コンポヌネントずサブシステム間の接続性が䞍十分です。 このような接続は、埌で説明するように、スケヌラビリティずフォヌルトトレランスに必芁な条件の1぀です。 コンポヌネント間の耇雑で匷力な䟝存関係がなければ、システムを拡匵するには最小限の劎力しか必芁ありたせん。



アプリケヌションに高いパフォヌマンスず優れたスケヌラビリティが必芁な堎合、ボトルネックが発生する可胜性のある堎所を予枬するこずは困難です。 したがっお、゜リュヌション党䜓が非同期で非ブロッキングであるこずが非垞に重芁です。 これは、兞型的なアプリケヌションでは、アヌキテクチャが完党にむベント指向であり、グラフィカルむンタヌフェむスブラりザヌ、RESTなどを介したナヌザヌリク゚ストから始たり、Webレむダヌでリク゚ストを凊理し、サヌビス、キャッシュ、デヌタベヌスで終わるこずを意味したす。 これらのレむダヌの少なくずも1぀がこの芁件を満たしおいない堎合-デヌタベヌスでブロックク゚リを䜜成し、パブリックな可倉状態を䜿甚し、高䟡な同期操䜜を呌び出す-スタック党䜓が消滅し、ナヌザヌは遅延の増加ずスケヌラビリティの䜎䞋のために苊しみたす。



アプリケヌションは、䞊から䞋にリアクティブでなければなりたせん。



チェヌン内の匱いリンクを排陀する必芁性は、アムダヌルの法則によっおよく説明されおいたす。



䞊列化によるプログラムの高速化は、プログラムのシヌケンシャル郚分に制限されたす。 たずえば、蚈算量の95を䞊列化できる堎合、䜿甚されるプロセッサの数に関係なく、理論䞊の最倧加速床は20を超えるこずはできたせん。



アムダヌル法の図



拡匵性



なぜこれが重芁なのか



スケヌラブルずいう蚀葉は、Merriam Webster蟞曞で「簡単に拡匵たたは近代化できる」ず定矩されおいたす。 スケヌラブルなアプリケヌションは、スケヌルアップするこずができたす。 これは、アプリケヌションの匟力性、぀たりシステムが芁求に応じお䌞瞮ノヌドの远加たたは削陀できるようにするプロパティを提䟛するこずで実珟されたす。 さらに、このアヌキテクチャにより、アプリケヌションを再蚭蚈たたは再䜜成する必芁なく、拡匵たたは瞮小より倚くのプロセッサたたはより少ないプロセッサに展開するこずができたす。 匟力性により、クラりドで機胜するためのコストが最小限に抑えられたすが、実際に䜿甚した分に察しおのみ支払いが行われたす。



スケヌラビリティはリスクの管理にも圹立ちたす。機噚が少なすぎるず顧客の䞍満や損倱に぀ながり、倚すぎるずスタッフずずもに非アクティブになり、䞍芁なコストが発生したす。 別のスケヌラブルなアプリケヌションは、機噚が利甚可胜な堎合の状況のリスクを䜎枛したすが、アプリケヌションはそれを䜿甚できたせん今埌10幎間で、数千ではないにしおも数癟のハヌドりェアスレッドを備えたプロセッサがあり、その朜圚的な䜿甚には顕埮鏡レベルでのスケヌラビリティが必芁になりたす。



䞻芁な構成芁玠



非同期メッセヌゞングに基づくむベントベヌスのシステムは、スケヌラビリティの基瀎です。 コンポヌネントずサブシステムの匱い接続性ず堎所の独立性により、同じセマンティクスで同じ゜フトりェアモデル内にずどたりながら、倚くのノヌドにシステムを展開できたす。 新しいノヌドが远加されるず、システムのスルヌプットが増加したす。 実装に関しおは、クラスタヌたたはデヌタセンタヌ内のより倚くのコアたたはより倚くのノヌドにシステムを展開しおも違いはありたせん。 アプリケヌショントポロゞは、システムの負荷を監芖する構成の問題および/たたは適応ランタむムアルゎリズムになりたす。 これは、 堎所の透過性ず呌ばれるものです。



透明な分散コンピュヌティング、分散オブゞェクト、たたはRPC通信を発明するこずではなく、その目暙はすでに詊みられおおり、このアむデアは倱敗したこずを理解するこずが重芁です。 代わりに、非同期メッセヌゞメカニズムを介しお゜フトりェアモデルで盎接衚珟するこずにより、ネットワヌクを採甚する必芁がありたす 。 真のスケヌラビリティは、圓然、分散コンピュヌティングずノヌド間の盞互䜜甚に䟝存したす。぀たり、本質的に信頌性の䜎いネットワヌクをバむパスしたす。 したがっお、プログラムモデルで䟋倖的な状況の制限、トレヌドオフ、シナリオを明瀺的に考慮するこずは、物事を「単玔化」しようずする挏れやすい抜象化のスクリヌンの背埌に隠すのではなく重芁です。 その結果、コンセンサスに到達するメカニズムや信頌性の高いメッセヌゞングむンタヌフェむスなど、分散環境で発生する可胜性のある兞型的な問題を解決するためのビルディングブロックを含む゜フトりェアツヌルを提䟛するこずも同様に重芁です。



耐障害性



なぜこれが重芁なのか



アプリケヌション障害は、ビゞネスに発生する可胜性のある最も有害なものの1぀です。 通垞、これはサヌビスが単に停止し、利益の流れにギャップを残すずいう事実に぀ながりたす。 長い目で芋れば、これは顧客の䞍満や評刀の䜎䞋に぀ながり、ビゞネスをさらに深刻に傷぀ける可胜性がありたす。 驚くべきこずに、アプリケヌションの埩元力の芁件は、䞀般的に無芖されるか、アドホック技術者によっお察凊されたす。 これは、倚くの堎合、䞍正確で粗雑なツヌルを䜿甚しお、誀った詳现レベルで問題に察凊するこずを意味したす。 䞀般的な解決策は、クラッシュリカバリでアプリケヌションサヌバヌクラスタリングを䜿甚するこずです。 残念ながら、このような既補の゜リュヌションは非垞に高䟡であり、さらに危険です。クラスタヌ党䜓を朜圚的に「カスケヌド」する可胜性がありたす。 その理由は、小さなコンポヌネントの盞互䜜甚のレベルで詳现に解決する必芁がありたすが、障害管理の問題は非垞に小さなスケヌルのマップで解決されおいるためです。



リアクティブアプリケヌションでは、フォヌルトトレランスは埌で䜿甚できるようになりたせんが、最初からアヌキテクチャの䞀郚です。 プログラムモデルのファヌストクラスオブゞェクトずしおの障害に察する態床は、それらに察応し、それらを管理するタスクを容易にしたす。これにより、アプリケヌションは障害に耐えられ、システムは動䜜䞭に自身を「修埩」および「修埩」できたす。 問題は間違ったレベルで解決されないため、䟋倖的な状況を凊理する埓来の方法ではこれを達成できたせん。䟋倖が発生した堎所ですぐに凊理するか、アプリケヌション党䜓の回埩手順を開始したす。



䞻芁な構成芁玠



障害を管理するには、障害を他の正垞なコンポヌネントに拡散しないように隔離し、障害が発生する可胜性のあるコンテキスト倖の安党な堎所から監芖する方法が必芁です。 思い浮かぶ1぀の方法は、システムのコンパヌトメントを分割する隔壁で、コンパヌトメントの1぀がフラッディング倱敗した堎合に、他のコンパヌトメントに圱響しないようにするこずです。 これにより、連鎖障害の叀兞的な問題が回避され、問題を個別に解決できたす。



コンパヌトメントず隔壁



スケヌラビリティを提䟛するむベント駆動型モデルは、フォヌルトトレランスの問題を解決するために必芁なプリミティブも提䟛したす。 むベント駆動型モデルの匱い接続性により、完党に分離されたコンポヌネントが提䟛されたす。障害は必芁な詳现ずずもにメッセヌゞにカプセル化され、他のコンポヌネントに転送されたす。



このアプロヌチにより、次のようなシステムが䜜成されたす。



䜕よりも、コンパヌトメントが、問題が適切なアクションを実行するのに十分なパワヌを持぀レベルにたで䞊昇する倧䌁業のように、階局的な方法で線成されおいる堎合。



このモデルの嚁力は、玔粋にむベント指向であるずいうこずです。リアクティブコンポヌネントず非同期むベントに基づいおいるため、 ロケヌションの透過性がありたす。 実際には、これは、そのセマンティクスがロヌカルサヌバヌで動䜜するか、分散環境で動䜜するかに䟝存しないこずを意味したす。



応答性



なぜこれが重芁なのか



応答性は、Merriam-Webster蟞曞で「迅速に応答する、たたは適切に応答する」ず定矩されおいたす。 以䞋では、この䞀般的な意味でこの単語を䜿甚し、 レスポンシブWebデザむンずCSS メディアク゚リおよび進歩的な改善を混同しないこずに泚意しおください。



レスポンシブアプリケヌションはリアルタむムアプリケヌションであり、魅力的で機胜が豊富で、共有を提䟛したす。 応答性ず双方向性により、顧客ずのオヌプンで継続的な察話が維持されたす。 これにより、クラむアントの生産性が向䞊し、問題を解決しおタスクを完了するための䞀貫性ず即応性がい぀でも埗られたす。 そのような䟋の1぀に、リアルタむムの共同線集をサポヌトするGoogleドキュメントがありたす。これにより、ナヌザヌは互いの線集を盎接芋るこずができたす。



アプリケヌションは、障害が発生した堎合でも、タむムリヌにむベントに応答する必芁がありたす。 アプリケヌションが劥圓な時間内に応答しない堎合レむテンシヌずも呌ばれたす、実際には利甚できないため、 フォヌルトトレラントずは芋なされたせん。



歊噚や医薬品に関連するアプリケヌションなど、䞀郚のアプリケヌションの厳しいリアルタむムフレヌムワヌク内にずどたらないこずは、完党なシステム障害に盞圓したす。 すべおのアプリケヌションにこのような厳しい芁件があるわけではありたせん。 倚くのアプリケヌションは、䞀時的な芁件を満たせなくなるずすぐに圹に立たなくなりたす。たずえば、取匕操䜜を実行するアプリケヌションは、時間通りに応答する時間がなければ珟圚のトランザクションを倱う可胜性がありたす。



オンラむン小売店などのより䞀般的なアプリケヌションは、応答時間が長くなるず収益を倱いたす。 ナヌザヌはレスポンシブアプリケヌションずより集䞭的にやり取りし、倧量の賌入に぀ながりたす。



䞻芁な構成芁玠



リアクティブアプリケヌションは、監芖可胜なモデル、むベントフロヌ、および状態クラむアントを䜿甚したす。



芳察されたモデルにより、他のシステムは状態が倉化したずきにむベントを受信できたす。 これにより、ナヌザヌずシステム間のリアルタむム通信が提䟛されたす。 たずえば、耇数のナヌザヌが同じモデルで同時に䜜業しおいる堎合、倉曎をリアクティブに同期するこずができ、モデルをロックする必芁がなくなりたす。



むベントのストリヌムは、このような関係が構築される基本的な抜象抂念を圢成したす。 それらをリアクティブに保぀こずにより、ブロックを回避し、倉換ず通信が非同期でブロックされないようにしたす。



負荷に関係なく、むベントぞの応答時間がO1たたは少なくずもOlog nを超えないようにするために、リアクティブアプリケヌションはアルゎリズムの順序を知っおいる必芁がありたす。 スケヌリング係数が含たれる堎合がありたすが、顧客、セッション、補品たたは取匕の数に䟝存するべきではありたせん。



遅延を負荷プロファむルに䟝存しないようにするための戊略を次に瀺したす。





䟋ずしお、リッチクラむアントブラりザ、モバむルアプリケヌションを備えたレスポンシブWebアプリケヌションを考えお、ナヌザヌに高品質のむンタラクション゚クスペリ゚ンスを提䟛したす。 このアプリケヌションはロゞックを実行し、クラむアント偎で状態を保存したす。このモデルでは、デヌタがリアルタむムで倉曎されたずきに、芳察されたモデルがナヌザヌむンタヌフェむスを曎新するメカニズムを提䟛したす。 WebSocketやサヌバヌ送信むベントなどの技術により、ナヌザヌむンタヌフェむスはむベントのフロヌに盎接接続できるため、システム党䜓がむベント指向になり、バック゚ンドレむダヌからクラむアントで終わりたす。 これにより、リアクティブアプリケヌションは、非同期および非ブロッキングデヌタ転送を通じおむベントをブラりザおよびモバむルアプリケヌションにプッシュし、スケヌラビリティずフォヌルトトレランスを維持できたす。



ここで、反応性の4぀の「クゞラ」であるむベント指向 、 スケヌラビリティ 、 フォヌルトトレランス、および応答性が盞互に接続され、単䞀の党䜓を圢成する方法が明らかになりたす。



4クゞラの反応性



おわりに



リアクティブアプリケヌションは、゜フトりェアシステムの開発における珟代の問題を解決するためのバランスの取れたアプロヌチです。 これらは、 むベント指向およびメッセヌゞング指向のフレヌムワヌク䞊に構築され、 スケヌラビリティず埩元力のためのツヌルを提䟛したす。 さらに、リッチでレスポンシブなナヌザヌむンタラクションむンタヌフェむスをサポヌトしおいたす。 数が急速に増加しおいるシステムは、近い将来このマニフェストに埓うず予想されたす。



マニフェストの䞋で賌読する








All Articles