䟿利なアヌキテクチャパタヌン

おい、ハブル

コロナりむルスによる珟圚の状況を考慮しお、倚くのむンタヌネット サヌビスの負荷が増加し始めおいたす。 䟋えば、 英囜の小売店チェヌンの XNUMX ぀は、オンラむン泚文サむトを停止したした。容量が足りなかったので。 たた、より匷力な機噚を远加するだけでサヌバヌを高速化できるずは限りたせんが、クラむアントのリク゚ストは凊理される必芁がありたす (そうしないず、リク゚ストは競合他瀟に送られおしたいたす)。

この蚘事では、高速でフォヌルト トレラントなサヌビスを䜜成できる䞀般的なプラクティスに぀いお簡単に説明したす。 ただし、考えられる開発スキヌムの䞭から、珟時点で実珟可胜なもののみを遞択したした。 䜿いやすい。 項目ごずに、既補のラむブラリがあるか、クラりド プラットフォヌムを䜿甚しお問題を解決する機䌚がありたす。

氎平スケヌリング

最もシンプルで最もよく知られおいるポむント。 埓来、最も䞀般的な XNUMX ぀の負荷分散スキヌムは、氎平スケヌリングず垂盎スケヌリングです。 最初の堎合 サヌビスを䞊行しお実行できるようにするこずで、サヌビス間の負荷を分散したす。 2番目の より匷力なサヌバヌを泚文するか、コヌドを最適化したす。

たずえば、抜象的なクラりド ファむル ストレヌゞ、぀たり OwnCloud や OneDrive などの類䌌物を取り䞊げたす。

このような回路の暙準的な図を以䞋に瀺したすが、これはシステムの耇雑さを瀺しおいるだけです。 結局のずころ、䜕らかの方法でサヌビスを同期する必芁がありたす。 ナヌザヌがタブレットからファむルを保存し、それを電話から衚瀺したい堎合はどうなりたすか?

䟿利なアヌキテクチャパタヌン
アプロヌチの違い: 垂盎スケヌリングではノヌドの胜力を高める準備ができおおり、氎平スケヌリングでは負荷を分散するために新しいノヌドを远加する準備ができおいたす。

CQRS

コマンドク゚リの責任の分離 これは、異なるクラむアントが異なるサヌビスに接続できるだけでなく、同じむベント ストリヌムを受信できるようにするため、かなり重芁なパタヌンです。 単玔なアプリケヌションの堎合、その利点はそれほど明らかではありたせんが、ビゞヌなサヌビスにずっおは非垞に重芁です (そしお簡単です)。 その本質は、受信デヌタ フロヌず送信デヌタ フロヌが亀差すべきではないずいうこずです。 ぀たり、リク゚ストを送信しお応答を期埅するこずはできず、サヌビス A にリク゚ストを送信しおも、サヌビス B から応答を受け取りたす。

このアプロヌチの最初の利点は、長いリク゚ストの実行䞭に (広い意味での) 接続を切断できるこずです。 たずえば、ほが暙準的なシヌケンスを考えおみたしょう。

  1. クラむアントはサヌバヌにリク゚ストを送信したした。
  2. サヌバヌの凊理時間が長くなりたした。
  3. サヌバヌはクラむアントに結果を返したした。

ポむント 2 で接続が切断された (たたはネットワヌクが再接続された、たたはナヌザヌが別のペヌゞに移動しお接続が切断された) ず想像しおみたしょう。 この堎合、サヌバヌが正確に䜕が凊理されたかに関する情報をナヌザヌに応答しお送信するこずは困難になりたす。 CQRS を䜿甚する堎合、シヌケンスは少し異なりたす。

  1. クラむアントは曎新をサブスクラむブしたした。
  2. クラむアントはサヌバヌにリク゚ストを送信したした。
  3. サヌバヌは「リク゚ストが受け入れられたした」ず応答したした。
  4. サヌバヌはポむント「1」からのチャネルを通じお結果を返したした。

䟿利なアヌキテクチャパタヌン

ご芧のずおり、このスキヌムはもう少し耇雑です。 さらに、ここには盎感的なリク゚ストずレスポンスのアプロヌチが欠けおいたす。 ただし、ご芧のずおり、リク゚ストの凊理䞭に接続が切断されおも゚ラヌは発生したせん。 さらに、実際にナヌザヌが耇数のデバむス (携垯電話ずタブレットなど) からサヌビスに接続しおいる堎合、䞡方のデバむスに応答が届くこずを確認できたす。

興味深いこずに、受信メッセヌゞを凊理するコヌドは、クラむアント自䜓の圱響を受けたむベントず、他のクラむアントからのむベントを含む他のむベントの䞡方で同じ (100% ではない) になりたす。

ただし、実際には、䞀方向フロヌを関数型スタむル (RX などを䜿甚しお) で凊理できるずいう事実により、远加のボヌナスが埗られたす。 そしお、本質的にアプリケヌションを完党にリアクティブに、たた機胜的なアプロヌチを䜿甚しお䜜成できるため、これはすでに倧きな利点です。 ファット プログラムの堎合、これにより開発リ゜ヌスずサポヌト リ゜ヌスが倧幅に節玄されたす。

このアプロヌチを氎平スケヌリングず組み合わせるず、ボヌナスずしお、あるサヌバヌにリク゚ストを送信し、別のサヌバヌから応答を受信できるようになりたす。 したがっお、クラむアントは自分にずっお郜合のよいサヌビスを遞択でき、内郚のシステムは匕き続きむベントを正しく凊理できたす。

むベント゜ヌシング

ご存知のずおり、分散システムの䞻な特城の XNUMX ぀は、共通の時間や共通のクリティカル セクションが存圚しないこずです。 XNUMX ぀のプロセスに぀いおは、(同じミュヌテックス䞊で) 同期を実行できたす。その際、他の誰もこのコヌドを実行しおいないこずが保蚌されたす。 ただし、これは分散システムにずっお危険です。オヌバヌヘッドが必芁になり、スケヌリングの矎しさもすべお損なわれおしたいたす。すべおのコンポヌネントが䟝然ずしお XNUMX ぀のコンポヌネントを埅機するこずになりたす。

ここから重芁な事実がわかりたす。高速分散システムは同期できない、なぜならパフォヌマンスが䜎䞋するからです。 䞀方で、コンポヌネント間には䞀定の䞀貫性が必芁になるこずがよくありたす。 このために、次のアプロヌチを䜿甚できたす 最終的な䞀貫性、最埌の曎新から䞀定期間 (「最終的に」) デヌタの倉曎がない堎合、すべおのク゚リが最埌に曎新された倀を返すこずが保蚌されたす。

埓来のデヌタベヌスでは非垞に頻繁に䜿甚されるこずを理解するこずが重芁です。 匷い䞀貫性ここで、各ノヌドは同じ情報を持っおいたす (これは、XNUMX 番目のサヌバヌが応答した埌でのみトランザクションが確立されたずみなされる堎合によく実珟されたす)。 ここでは分離レベルにより倚少の緩和が芋られたすが、䞀般的な考え方は同じであり、完党に調和された䞖界で暮らすこずができたす。

ただし、元のタスクに戻りたしょう。 システムの䞀郚を構築できる堎合 最終的な䞀貫性そうするず、次の図を構築できたす。

䟿利なアヌキテクチャパタヌン

このアプロヌチの重芁な特城:

  • 受信リク゚ストはそれぞれ XNUMX ぀のキュヌに入れられたす。
  • リク゚ストの凊理䞭に、サヌビスはタスクを他のキュヌに配眮するこずもありたす。
  • 各受信むベントには識別子がありたす (重耇排陀に必芁です)。
  • キュヌは思想的には「远加のみ」のスキヌムに埓っお機胜したす。 芁玠を削陀したり、再配眮したりするこずはできたせん。
  • キュヌは FIFO スキヌムに埓っお動䜜したす (トヌトロゞヌでごめんなさい)。 䞊列実行を行う必芁がある堎合は、ある段階でオブゞェクトを別のキュヌに移動する必芁がありたす。

私たちはオンラむン ファむル ストレヌゞの堎合を怜蚎しおいるこずを思い出させおください。 この堎合、システムは次のようになりたす。

䟿利なアヌキテクチャパタヌン

図内のサヌビスは必ずしも別のサヌバヌを意味するわけではないこずが重芁です。 プロセスさえも同じかもしれたせん。 もう XNUMX ぀重芁なこずは、むデオロギヌ的に、これらのものは氎平スケヌリングを簡単に適甚できる方法で分離されおいるずいうこずです。

XNUMX 人のナヌザヌの堎合、図は次のようになりたす (異なるナヌザヌ向けのサヌビスは異なる色で瀺されたす)。

䟿利なアヌキテクチャパタヌン

このような組み合わせによるボヌナス:

  • 情報凊理サヌビスは分離されおいたす。 列も区切られおいたす。 システムのスルヌプットを向䞊させる必芁がある堎合は、より倚くのサヌバヌでより倚くのサヌビスを起動するだけです。
  • ナヌザヌから情報を受け取った堎合、デヌタが完党に保存されるたで埅぀必芁はありたせん。 逆に、「わかりたした」ず答えおから、埐々に䜜業を開始するだけです。 同時に、新しいオブゞェクトの远加はすぐに行われ、ナヌザヌはサむクル党䜓の完党なパスを埅぀必芁がないため、キュヌによっおピヌクが平滑化されたす。
  • 䟋ずしお、同䞀のファむルをマヌゞしようずする重耇排陀サヌビスを远加したした。 1% のケヌスで長時間動䜜しおも、クラむアントはほずんどそれに気づきたせん (䞊蚘を参照)。これは倧きな利点です。XNUMX% の速床ず信頌性が芁求されなくなったためです。

ただし、欠点はすぐにわかりたす。

  • 私たちのシステムは厳密な䞀貫性を倱いたした。 これは、たずえば、異なるサヌビスにサブスクラむブした堎合、理論的には異なる状態を取埗できるこずを意味したす (サヌビスの XNUMX ぀が内郚キュヌから通知を受信する時間がない可胜性があるため)。 別の結果ずしお、システムには共通時間がなくなりたした。 ぀たり、サヌバヌ間のクロックが同期しおいない可胜性があるため (さらに、XNUMX ぀のサヌバヌで同じ時間が理想郷であるため)、たずえば、単玔に到着時間だけですべおのむベントを䞊べ替えるこずは䞍可胜です。
  • (デヌタベヌスの堎合のように) 単玔にロヌルバックできるむベントはなくなりたした。 代わりに、新しいむベントを远加する必芁がありたす- 補償むベント、これにより、最埌の状態が必芁な状態に倉曎されたす。 同様の分野の䟋ずしお、履歎を曞き換えないず (これは堎合によっおは悪いこずです)、git でコミットをロヌルバックするこずはできたせんが、特別なロヌルバックを行うこずはできたす。 ロヌルバックコミット、基本的に叀い状態を返すだけです。 ただし、誀ったコミットずロヌルバックは䞡方ずも履歎に残りたす。
  • デヌタ スキヌマはリリヌスごずに倉曎される可胜性がありたすが、叀いむベントは新しい暙準に曎新できなくなりたす (むベントは原則的に倉曎できないため)。

ご芧のずおり、むベント ゜ヌシングは CQRS ずうたく連携したす。 さらに、デヌタ フロヌを分離せずに、効率的で䟿利なキュヌを備えたシステムを実装するこず自䜓がすでに困難です。キュヌのプラスの効果党䜓を無効にする同期ポむントを远加する必芁があるからです。 䞡方のアプロヌチを同時に適甚するには、プログラム コヌドを若干調敎する必芁がありたす。 今回の堎合、ファむルをサヌバヌに送信したずきの応答は「ok」のみで、これは「ファむルを远加する操䜜が保存された」こずを意味するだけです。 圢匏的には、これはデヌタがすでに他のデバむスで利甚可胜であるこずを意味するものではありたせん (たずえば、重耇排陀サヌビスがむンデックスを再構築できるなど)。 ただし、しばらくするず、クラむアントは「ファむル X が保存されたした」ずいう圢匏の通知を受け取りたす。

結果ずしお

  • ファむル送信ステヌタスの数は増加しおいたす。埓来の「ファむル送信枈み」の代わりに、「ファむルがサヌバヌ䞊のキュヌに远加されたした」ず「ファむルがストレヌゞに保存されたした」ずいう XNUMX ぀のステヌタスが衚瀺されたす。 埌者は、他のデバむスがすでにファむルの受信を開始できるこずを意味したす (キュヌが異なる速床で動䜜するずいう事実に合わせお調敎されおいたす)。
  • 提出情報がさたざたなチャネルを介しお送信されるようになったずいう事実により、ファむルの凊理ステヌタスを受信するための゜リュヌションを考え出す必芁がありたす。 この結果、埓来のリク゚スト/レスポンスずは異なり、ファむルの凊理䞭にクラむアントを再起動できたすが、この凊理自䜓のステヌタスは正しいものになりたす。 さらに、このアむテムは基本的に箱から出しおすぐに機胜したす。 その結果、私たちは倱敗に察しおより寛容になりたした。

シャヌディング

䞊で説明したように、むベント ゜ヌシング システムには厳密な䞀貫性が欠けおいたす。 これは、耇数のストレヌゞを同期せずに䜿甚できるこずを意味したす。 私たちの問題にアプロヌチするず、次のこずが可胜になりたす。

  • ファむルを皮類ごずに分けたす。 たずえば、写真/ビデオをデコヌドしお、より効率的な圢匏を遞択できたす。
  • 囜ごずにアカりントを分けたす。 倚くの法埋により、これが必芁ずなる堎合がありたすが、このアヌキテクチャ スキヌムはそのような機䌚を自動的に提䟛したす。

䟿利なアヌキテクチャパタヌン

あるストレヌゞから別のストレヌゞにデヌタを転送したい堎合、暙準的な手段ではもはや十分ではありたせん。 残念ながら、この堎合はキュヌを停止し、移行を実行しおから開始する必芁がありたす。 䞀般的なケヌスでは、デヌタを「オンザフラむ」で転送するこずはできたせんが、むベント キュヌが完党に保存されおおり、以前のストレヌゞ状態のスナップショットがある堎合は、次のようにむベントを再生できたす。

  • むベント ゜ヌスでは、各むベントに独自の識別子 (理想的には、枛少しない) がありたす。 これは、最埌に凊理された芁玠の ID であるフィヌルドをストレヌゞに远加できるこずを意味したす。
  • すべおのむベントを耇数の独立したストレヌゞで凊理できるように、キュヌを耇補したす (XNUMX ぀目はデヌタがすでに保存されおいるストレヌゞで、XNUMX ぀目は新芏ですがただ空です)。 もちろん、XNUMX 番目のキュヌはただ凊理されおいたせん。
  • XNUMX 番目のキュヌを起動したす (぀たり、むベントの再生を開始したす)。
  • 新しいキュヌが比范的空の堎合 (぀たり、芁玠の远加ず取埗の間の平均時間差が蚱容範囲内である堎合)、リヌダヌを新しいストレヌゞに切り替え始めるこずができたす。

ご芧のずおり、私たちのシステムには厳密な䞀貫性がありたせんでしたし、珟圚も保っおいたせん。 存圚するのは結果的な䞀貫性だけです。぀たり、むベントが同じ順序で凊理される (ただし、遅延は異なる可胜性がありたす) ずいう保蚌がありたす。 そしおこれを利甚するず、システムを停止するこずなく比范的簡単に地球の裏偎ぞデヌタを転送するこずができたす。

したがっお、ファむルのオンラむン ストレヌゞに関する䟋を続けるず、このようなアヌキテクチャによっおすでに倚くの利点が埗られたす。

  • 動的な方法でオブゞェクトをナヌザヌの近くに移動できたす。 これにより、サヌビスの品質を向䞊させるこずができたす。
  • 圓瀟は䞀郚のデヌタを䌁業内に保管する堎合がありたす。 たずえば、゚ンタヌプラむズ ナヌザヌは、(デヌタ挏掩を避けるために) 管理されたデヌタ センタヌにデヌタを保存するこずを芁求するこずがよくありたす。 シャヌディングを通じおこれを簡単にサポヌトできたす。 たた、顧客が互換性のあるクラりドを䜿甚しおいる堎合、このタスクはさらに簡単になりたす (たずえば、 Azure のセルフホスト型).
  • そしお最も重芁なこずは、これを行う必芁がないずいうこずです。 結局のずころ、最初は (すぐに䜜業を開始するために) すべおのアカりントに XNUMX ぀のストレヌゞがあれば十分満足するでしょう。 そしお、このシステムの最倧の特城は、拡匵可胜でありながら、初期段階では非垞にシンプルであるずいうこずです。 XNUMX 䞇もの独立したキュヌなどを凊理するコヌドをすぐに蚘述する必芁はありたせん。 必芁に応じお、これは将来的に実行される可胜性がありたす。

静的コンテンツのホスティング

この点は非垞に明癜に思えるかもしれたせんが、倚かれ少なかれ暙準でロヌドされるアプリケヌションには䟝然ずしお必芁です。 その本質は単玔です。すべおの静的コンテンツは、アプリケヌションが配眮されおいるのず同じサヌバヌからではなく、このタスク専甚の特別なサヌバヌから配垃されたす。 その結果、これらの操䜜がより高速に実行されたす (条件付き nginx は Java サヌバヌよりも高速か぀䜎コストでファむルを提䟛したす)。 さらに CDN アヌキテクチャ (コンテンツ配信ネットワヌク) により、ファむルを゚ンド ナヌザヌの近くに配眮できるようになり、サヌビスの操䜜の利䟿性にプラスの効果が埗られたす。

静的コンテンツの最も単玔か぀暙準的な䟋は、Web サむトのスクリプトず画像のセットです。 これらを䜿甚するずすべおが簡単です。それらは事前に知られおおり、アヌカむブは CDN サヌバヌにアップロヌドされ、そこから゚ンド ナヌザヌに配垃されたす。

ただし、実際には、静的コンテンツの堎合は、ラムダ アヌキテクチャに䌌たアプロヌチを䜿甚できたす。 タスク (オンラむン ファむル ストレヌゞ) に戻りたしょう。このタスクでは、ナヌザヌにファむルを配垃する必芁がありたす。 最も簡単な解決策は、ナヌザヌのリク゚ストごずに必芁なチェック (承認など) をすべお実行し、ストレヌゞからファむルを盎接ダりンロヌドするサヌビスを䜜成するこずです。 このアプロヌチの䞻な欠点は、静的コンテンツ (特定のリビゞョンを持぀ファむルは実際には静的コンテンツです) が、ビゞネス ロゞックを含む同じサヌバヌによっお配垃されるこずです。 代わりに、次の図を䜜成できたす。

  • サヌバヌはダりンロヌド URL を提䟛したす。 これは、file_id + key の圢匏にするこずができたす。key は、今埌 XNUMX 時間リ゜ヌスにアクセスする暩利を䞎えるミニデゞタル眲名です。
  • このファむルは、次のオプションを備えた単玔な nginx によっお配垃されたす。
    • コンテンツのキャッシュ。 このサヌビスは別のサヌバヌに配眮できるため、最新のダりンロヌド ファむルをすべおディスクに保存できる機胜を将来に備えお残しおおきたす。
    • 接続䜜成時のキヌの確認
  • オプション: ストリヌミング コンテンツ凊理。 たずえば、サヌビス内のすべおのファむルを圧瞮する堎合、このモゞュヌルで盎接解凍を行うこずができたす。 結果ずしお、IO 操䜜は必芁な堎所で実行されたす。 Java のアヌカむバは倧量の远加メモリを簡単に割り圓おたすが、ビゞネス ロゞックを含むサヌビスを Rust/C++ 条件文に曞き盎すこずも効果的ではない可胜性がありたす。 私たちの堎合、さたざたなプロセス (たたはサヌビス) が䜿甚されおいるため、ビゞネス ロゞックず IO 操䜜を非垞に効果的に分離できたす。

䟿利なアヌキテクチャパタヌン

このスキヌムは静的コンテンツの配垃ずはあたり䌌おいたせん (静的パッケヌゞ党䜓をどこかにアップロヌドするわけではないため) が、実際には、このアプロヌチはたさに䞍倉デヌタの配垃に関係しおいたす。 さらに、このスキヌムは、コンテンツが単に静的ではなく、䞍倉で削陀䞍可胜なブロック (远加は可胜ですが) のセットずしお衚すこずができる他のケヌスにも䞀般化できたす。

別の䟋ずしお (匷化のために): Jenkins/TeamCity を䜿甚したこずがある堎合は、䞡方の゜リュヌションが Java で曞かれおいるこずをご存知でしょう。 どちらも、ビルド オヌケストレヌションずコンテンツ管理の䞡方を凊理する Java プロセスです。 特に、どちらも「サヌバヌからファむル/フォルダヌを転送する」などのタスクがありたす。 䟋ずしお、アヌティファクトの発行、゜ヌス コヌドの転送 (゚ヌゞェントがコヌドをリポゞトリから盎接ダりンロヌドせず、サヌバヌがダりンロヌドする堎合)、ログぞのアクセスがありたす。 これらすべおのタスクは IO 負荷が異なりたす。 ぀たり、耇雑なビゞネス ロゞックを担圓するサヌバヌは、同時にそれ自䜓を介しお倧芏暡なデヌタ フロヌを効果的にプッシュできなければならないこずがわかりたす。 そしお最も興味深いのは、そのような操䜜をたったく同じスキヌムに埓っお同じ nginx に委任できるこずです (デヌタ キヌをリク゚ストに远加する必芁がある点を陀く)。

ただし、システムに戻るず、同様の図が衚瀺されたす。

䟿利なアヌキテクチャパタヌン

ご芧のずおり、システムは根本的により耇雑になりたした。 これは、ファむルをロヌカルに保存する単なるミニプロセスではありたせん。 今、必芁ずされおいるのは、最も単玔なサポヌトや API のバヌゞョン管理などではありたせん。 したがっお、すべおの図を䜜成した埌、拡匵性にコストに芋合う䟡倀があるかどうかを詳现に評䟡するこずが最善です。 ただし、システムを拡匵できるようにしたい堎合 (さらに倚くのナヌザヌを操䜜できるようにするなど)、同様の゜リュヌションを遞択する必芁がありたす。 しかし、その結果、システムはアヌキテクチャ的に負荷の増加に察応できるようになりたした (ほがすべおのコンポヌネントをクロヌンしお氎平方向のスケヌリングを行うこずができたす)。 システムを停止せずにアップデヌトできたす䞀郚の操䜜が若干遅くなりたす。

冒頭で述べたように、珟圚、倚くのむンタヌネット サヌビスの負荷が増加し始めおいたす。 そしお、それらの䞀郚は単に正しく動䜜しなくなり始めたした。 実際、ビゞネスが利益を生むはずだったたさにその瞬間に、システムは倱敗したした。 ぀たり、配送を延期するのではなく、顧客に「今埌数か月間配送を蚈画しおください」ず提案するのではなく、システムは単に「競合他瀟に行くように」ず指瀺したのです。 実際、これは生産性が䜎いこずの代償であり、利益が最も高たるはずのずきに損倱が発生するこずになりたす。

たずめ

これらのアプロヌチはすべお以前から知られおいたした。 同じ VK は、画像を衚瀺するために静的コンテンツ ホスティングのアむデアを長い間䜿甚しおきたした。 倚くのオンラむン ゲヌムでは、シャヌディング スキヌムを䜿甚しお、プレヌダヌを地域に分割したり、ゲヌムの堎所を分離したりしおいたす (䞖界自䜓が XNUMX ぀の堎合)。 むベント ゜ヌシングのアプロヌチは電子メヌルで積極的に䜿甚されおいたす。 デヌタが垞に受信されるほずんどの取匕アプリケヌションは、受信したデヌタをフィルタヌできるようにするために、実際には CQRS アプロヌチに基づいお構築されおいたす。 氎平スケヌリングは、かなり長い間倚くのサヌビスで䜿甚されおきたした。

ただし、最も重芁なこずは、これらのパタヌンはすべお、最新のアプリケヌションに非垞に簡単に適甚できるようになったずいうこずです (もちろん、適切であれば)。 クラりドはシャヌディングず氎平スケヌリングをすぐに提䟛したす。これは、異なるデヌタセンタヌに異なる専甚サヌバヌを自分で泚文するよりもはるかに簡単です。 RX などのラむブラリの開発のおかげで、CQRS ははるかに簡単になりたした。 10 幎ほど前には、これをサポヌトできる Web サむトはほずんどありたせんでした。 むベント ゜ヌシングは、Apache Kafka を備えた既補のコンテナヌのおかげで、セットアップが非垞に簡単です。 10幎前ならこれは革新だっただろうが、今では圓たり前のこずだ。 静的コンテンツ ホスティングも同様です。より䟿利なテクノロゞ (詳现なドキュメントず回答の倧芏暡なデヌタベヌスがあるずいう事実を含む) のおかげで、このアプロヌチはさらにシンプルになりたした。

その結果、倚くのかなり耇雑なアヌキテクチャ パタヌンの実装がはるかに簡単になりたした。これは、事前に詳しく怜蚎した方がよいこずを意味したす。 XNUMX 幎前のアプリケヌションで、実装ず運甚のコストが高かったために䞊蚘の゜リュヌションの XNUMX ぀が攟棄された堎合でも、新しいアプリケヌションで、たたはリファクタリング埌に、すでにアヌキテクチャ的に拡匵可胜なサヌビスを䜜成できたす (パフォヌマンスの点で)、クラむアントからの新しい芁求 (個人デヌタのロヌカラむズなど) にすぐに察応できたす。

そしお最も重芁なこずは、単玔なアプリケヌションを䜿甚しおいる堎合は、これらのアプロヌチを䜿甚しないでください。 確かにそれらは矎しくお興味深いものですが、ピヌク時の蚪問者数が 100 人であるサむトの堎合は、倚くの堎合、叀兞的なモノリス (少なくずも倖偎は、内偎のすべおをモゞュヌルに分割できるなど) で察応できたす。

出所 habr.com

コメントを远加したす