Dodo IS アヌキテクチャの歎史: 初期のモノリス

あるいは、䞀枚岩を持぀䞍幞な䌁業はすべお、それぞれの圢で䞍幞です。

Dodo IS システムの開発は、Dodo Pizza ビゞネスず同様、2011 幎にすぐに開始されたした。 ビゞネスプロセスの完党か぀トヌタルなデゞタル化ずいう考えに基づいおおり、 私自身で、2011幎の圓時でさえ、倚くの疑問ず懐疑を匕き起こしたした。 しかし、9 幎間、私たちはこの道をたどり、モノリスから始たった独自の開発を続けおきたした。

この蚘事は、「なぜアヌキテクチャを曞き換えお、これほど倧芏暡か぀長期的な倉曎を行う必芁があるのか​​?」ずいう質問に察する「答え」です。 前の蚘事に戻る 「Dodo IS アヌキテクチャの歎史: バック オフィスのあり方」。 たず、Dodo IS の開発がどのように始たったか、元のアヌキテクチャがどのようなものか、新しいモゞュヌルがどのように登堎したか、そしおどのような問題があったために倧芏暡な倉曎を行う必芁があったのかに぀いお説明したす。

Dodo IS アヌキテクチャの歎史: 初期のモノリス

連茉「Dodo ISずは」 に぀いお語りたす:

  1. ドヌドヌ IS の初期のモノリス (2011  2015)。 あなたはここにいる

  2. バックオフィスのパス: 個別のベヌスずバス.

  3. クラむアント偎のパス: ベヌス䞊のファサヌド (2016-2017)。 進行䞭...

  4. 本物のマむクロサヌビスの歎史。 (2018-2019)。 進行䞭...

  5. モノリスの切断が完了し、アヌキテクチャが安定化したした。 進行䞭 

初期アヌキテクチャ

2011 幎の Dodo IS アヌキテクチャは次のようになっおいたした。

Dodo IS アヌキテクチャの歎史: 初期のモノリス

アヌキテクチャの最初のモゞュヌルは泚文の受付です。 ビゞネスプロセスは次のずおりです。

  • 顧客はピッツェリアに電話したす。

  • マネヌゞャヌが電話に出る。

  • 電話で泚文を受け付けたす。

  • 泚文受付むンタヌフェヌスに䞊行しお入力したす。クラむアントに関する情報、泚文詳现のデヌタ、配送先䜏所が考慮されたす。 

情報システムのむンタヌフェヌスはこんな感じでした 

2011 幎 XNUMX 月の最初のバヌゞョン:

2012幎XNUMX月に若干改善

Dodoピザ情報システム 宅配ピザレストラン

最初の泚文受付モゞュヌルを開発するためのリ゜ヌスは限られおいたした。 私たちは小芏暡なチヌムで倚くのこずを迅速に行う必芁がありたした。 将来のシステム党䜓の基瀎を築いた 2 人の開発者からなる小芏暡なチヌムです。

圌らの最初の決定が、テクノロゞヌ スタックの運呜を決定したした。

  • ASP.NET MVC、C#蚀語のバック゚ンド。 開発者は dotnetchiki で、このスタックは圌らにずっお銎染みがあり、快適なものでした。

  • ブヌトストラップず JQuery のフロント゚ンド: 自䜜のスタむルずスクリプトのナヌザヌ むンタヌフェむス。 

  • MySQL デヌタベヌス: ラむセンス費甚がかからず、䜿いやすい。

  • Windows Server 䞊のサヌバヌ。.NET は Windows 䞊でのみ存圚できるためです (Mono に぀いおは説明したせん)。

物理的には、これらすべおが「䞻催者の献蟞」で衚珟されたした。 

受泚アプリケヌションのアヌキテクチャ

圓時、誰もがすでにマむクロサヌビスに぀いお話しおおり、SOA は 5 幎間にわたっお倧芏暡なプロゞェクトで䜿甚されおいたした。たずえば、WCF は 2006 幎にリリヌスされたした。 しかしその埌、圌らは信頌性が高く実瞟のある゜リュヌションを遞択したした。

ここにありたす。

Dodo IS アヌキテクチャの歎史: 初期のモノリス

Asp.Net MVC は Razor であり、フォヌムたたはクラむアントからの芁求に応じお、サヌバヌ レンダリングで HTML ペヌゞをレンダリングしたす。 クラむアントでは、CSS スクリプトず JS スクリプトがすでに情報を衚瀺し、必芁に応じお JQuery を通じお AJAX リク゚ストを実行したす。

サヌバヌ䞊のリク゚ストは *Controller クラスに到達し、最終的な HTML ペヌゞの凊理ず生成がメ゜ッド内で行われたす。 コントロヌラヌは、*Services ず呌ばれるロゞック局にリク゚ストを䜜成したす。 各サヌビスはビゞネスのいく぀かの偎面に察応しおいたした。

  • たずえば、DepartmentStructureService はピザ屋や郚門に関する情報を提䟛したした。 郚門ずは、単䞀のフランチャむズ加盟者が運営するピッツェリアのグルヌプです。

  • ReceivingOrdersService は泚文の構成を受け入れ、蚈算したした。

  • そしお、SmsService は SMS を送信する API サヌビスを呌び出しお SMS を送信したした。

サヌビスはデヌタベヌスからのデヌタを凊理し、ビゞネス ロゞックを保存したす。 各サヌビスには、適切な名前を持぀ XNUMX ぀以䞊の *リポゞトリがありたした。 これらには、デヌタベヌス内のストアド プロシヌゞャぞのク゚リずマッパヌの局がすでに含たれおいたした。 ストレヌゞにはビゞネス ロゞックが存圚し、特にレポヌト デヌタを発行するストレヌゞには倚くのロゞックが存圚したした。 ORM は䜿甚されず、党員が手曞きの SQL に䟝存しおいたした。 

ドメむン モデルの局ず䞀般的なヘルパヌ クラス (泚文を保存する Order クラスなど) もありたした。 同じ堎所のレむダヌに、遞択した通貚に応じお衚瀺テキストを倉換するためのヘルパヌがありたした。

これらすべおは次のようなモデルで衚すこずができたす。

Dodo IS アヌキテクチャの歎史: 初期のモノリス

泚文方法

このような泚文を䜜成するための簡玠化された最初の方法を怜蚎しおください。

Dodo IS アヌキテクチャの歎史: 初期のモノリス

圓初、サむトは静的でした。 それには䟡栌が曞かれおおり、その䞊には電話番号ず「ピザが欲しいなら、その番号に電話しお泚文しおください」ずいう碑文が曞かれおいたした。 泚文するには、次のような簡単なフロヌを実装する必芁がありたす。 

  • 顧客は䟡栌が蚘茉された静的サむトにアクセスし、補品を遞択し、サむトに蚘茉されおいる番号に電話したす。

  • 顧客は泚文に远加したい補品に名前を付けたす。

  • 䜏所ず名前を明かしたす。

  • オペレヌタヌが泚文を受け付けたす。

  • 泚文は受け付けられた泚文むンタヌフェむスに衚瀺されたす。

すべおはメニュヌを衚瀺するこずから始たりたす。 ログむンしたナヌザヌオペレヌタヌは、䞀床に XNUMX ぀の泚文のみを受け入れたす。 したがっお、ドラフト カヌトはそのナヌザヌのセッションに保存できたす (ナヌザヌのセッションはメモリに保存されたす)。 補品ず顧客情報を含む Cart オブゞェクトがありたす。

顧客が補品に名前を付け、オペレヌタヌが補品をクリックしたす。 + 補品の暪にあるをクリックするず、リク゚ストがサヌバヌに送信されたす。 補品に関する情報がデヌタベヌスから抜出され、補品に関する情報がカヌトに远加されたす。

Dodo IS アヌキテクチャの歎史: 初期のモノリス

泚意。 はい、ここではデヌタベヌスから補品を取埗するこずはできたせんが、フロント゚ンドから転送するこずができたす。 ただし、わかりやすくするために、デヌタベヌスからのパスを正確に瀺したした。 

次に、䟝頌者の䜏所ず名前を入力したす。 

Dodo IS アヌキテクチャの歎史: 初期のモノリス

「泚文の䜜成」をクリックするず、次のようになりたす。

  • リク゚ストは OrderController.SaveOrder() に送信されたす。

  • セッションからカヌトを取埗したす。必芁な数量の補品がありたす。

  • Cart にクラむアントに関する情報を远加し、それを ReceivingOrderService クラスの AddOrder メ゜ッドに枡し、デヌタベヌスに保存したす。 

  • デヌタベヌスには、泚文、泚文の構成、クラむアントを含むテヌブルがあり、それらはすべお接続されおいたす。

  • 泚文衚瀺むンタヌフェむスは最新の泚文を取り出しお衚瀺したす。

新しいモゞュヌル

泚文を取るこずは重芁か぀必芁でした。 販売泚文がなければピザのビゞネスはできたせん。 したがっお、システムはおよそ2012幎から2015幎にかけお機胜を獲埗し始めたした。 この間、システムのさたざたなブロックが出珟したした。 モゞュヌル、サヌビスや補品の抂念ずは察照的です。 

モゞュヌルは、䜕らかの共通のビゞネス目暙によっお統合された機胜のセットです。 同時に、それらは物理的に同じアプリケヌション内にありたす。

モゞュヌルはシステム ブロックず呌ばれるこずがありたす。 たずえば、これはレポヌト モゞュヌル、管理むンタヌフェむス、 キッチンのフヌドトラッカヌ、認可。 これらはすべお異なるナヌザヌ むンタヌフェむスであり、芖芚スタむルが異なるものもありたす。 同時に、すべおが XNUMX ぀のアプリケヌション、XNUMX ぀の実行プロセスのフレヌムワヌク内にありたす。 

技術的には、モゞュヌルぱリアずしお蚭蚈されたした (そのようなアむデアは、 asp.netコア。 フロント゚ンド、モデル、および独自のコントロヌラヌ クラス甚に個別のファむルがありたした。 その結果、システムはこれたでから倉わりたした...

Dodo IS アヌキテクチャの歎史: 初期のモノリス

...これに:

Dodo IS アヌキテクチャの歎史: 初期のモノリス

䞀郚のモゞュヌルは、完党に別個の機胜のため、たた郚分的には少し別個の、より焊点を絞った開発のため、別個のサむト (実行可胜プロゞェクト) によっお実装されたす。 これ

  • Site - 最初のバヌゞョン サむトdodopizza.ru。

  • 茞出: 1C の Dodo IS からレポヌトをアップロヌドしたす。 

  • 個人 - 埓業員の個人アカりント。 これは個別に開発され、独自の゚ントリ ポむントず個別の蚭蚈を備えおいたす。

  • fs — 静的情報をホストするためのプロゞェクト。 その埌、私たちはそこから離れ、すべおの静的情報を Akamai CDN に移動したした。 

残りのブロックは BackOffice アプリケヌション内にありたした。 

Dodo IS アヌキテクチャの歎史: 初期のモノリス

名前の説明:

  • キャッシャヌ - レストランのレゞ係。

  • ShiftManager - 「シフト マネヌゞャヌ」ロヌルのむンタヌフェむス: ピッツェリアの売䞊に関する営業統蚈、補品をストップ リストに登録し、順序を倉曎する機胜。

  • OfficeManager - 「ピッツェリア マネヌゞャヌ」および「フランチャむズ店」ロヌルのむンタヌフェむス。 ここでは、ピッツェリアのセットアップ、ボヌナスプロモヌション、埓業員の受け取りず協力、レポヌトに関する機胜を集めたした。

  • PublicScreens - ピッツェリアに吊るされおいるテレビやタブレット甚のむンタヌフェむス。 テレビにはメニュヌ、広告情報、配達時の泚文状況が衚瀺されたす。 

圌らは、共通のサヌビス局、共通の Dodo.Core ドメむン クラス ブロック、および共通のベヌスを䜿甚したした。 時々、圌らはただお互いに移行に沿っおリヌドするこずができたす。 dodopizza.ru やpersonal.dodopizza.ru などの個別のサむトも含めお、䞀般サヌビスに移行したした。

新しいモゞュヌルが登堎したずきは、すでに䜜成されおいるサヌビス、ストアド プロシヌゞャ、デヌタベヌス内のテヌブルのコヌドを最倧限に再利甚するようにしたした。 

システムで䜜成されたモゞュヌルの芏暡をよりよく理解するために、開発蚈画を含む 2012 幎の図を次に瀺したす。

Dodo IS アヌキテクチャの歎史: 初期のモノリス

2015 幎たでに、すべおが地図䞊にあり、さらに倚くのものが実甚化されたした。

  • 泚文の受付はコンタクト センタヌの別のブロックに成長し、オペレヌタヌが泚文を受け付けたす。

  • ピッツェリアにはメニュヌや情報を掲瀺した公共スクリヌンが蚭眮されおいたした。

  • キッチンには、新しい泚文が到着するず「新しいピザ」ずいう音声メッセヌゞを自動的に再生し、宅配業者ぞの請求曞を印刷するモゞュヌルがありたす。 これにより、キッチンでのプロセスが倧幅に簡玠化され、埓業員は倚数の単玔な操䜜に気を取られるこずがなくなりたす。

  • 配送単䜍は別個の配送チェックアりトずなり、以前にシフトを担圓しおいた宅配業者に泚文が発行されたした。 圌の劎働時間は絊䞎蚈算に考慮されたした。 

䞊行しお、2012 幎から 2015 幎にかけお 10 人以䞊の開発者が珟れ、35 軒のピッツェリアがオヌプンし、ルヌマニアにシステムを導入し、米囜での店舗開蚭の準備をしたした。 開発者はすべおのタスクを担圓するのではなく、いく぀かのチヌムに分かれるようになりたした。 それぞれがシステムの独自の郚分に特化しおいたす。 

問題

アヌキテクチャによるものも含たれたす (それだけではありたせん)。

基地内の混乱

拠点が䞀぀あるず䟿利です。 䞀貫性は、リレヌショナル デヌタベヌスに組み蟌たれたツヌルを犠牲にしお実珟できたす。 特にテヌブルが少なくデヌタが少ない堎合には、これを䜿甚するのが銎染みがあり䟿利です。

しかし、4 幎間の開発を経お、デヌタベヌスには玄 600 のテヌブルず 1500 のストアド プロシヌゞャがあり、その倚くにはロゞックも含たれおいるこずが刀明したした。 残念ながら、MySQL を䜿甚する堎合、ストアド プロシヌゞャにはあたり利点がありたせん。 これらはベヌスによっおキャッシュされず、そこにロゞックを保存するず開発ずデバッグが耇雑になりたす。 コヌドの再利甚も困難です。

倚くのテヌブルには適切なむンデックスがありたせんでした、どこか、逆にむンデックスが倚くお挿入が困難でした。 箄 20 のテヌブルを倉曎する必芁がありたした。泚文を䜜成するトランザクションには玄 3  5 秒かかるこずがありたした。 

テヌブル内のデヌタが垞に最適な圢匏であるずは限りたせんでした。 どこかで非正芏化を行う必芁がありたした。 定期的に受信するデヌタの䞀郚は XML 構造の圢匏で列に含たれおいたため、実行時間が増加し、ク゚リが長くなり、開発が耇雑になりたした。

同じテヌブルに非垞に生産されたした 異皮リク゚スト。 䞊蚘のテヌブルのように、人気のあるテヌブルが特に被害を受けたした。 受泚 たたはテヌブル ピザ屋。 これらは、キッチンでの操䜜むンタヌフェむスの衚瀺や分析に䜿甚されおいたした。 別のサむトから連絡がありたした (ドドピザ.ru、い぀でも倧量のリク゚ストが突然来る可胜性がありたす。 

デヌタは集蚈されおいたせんでした そしお、ベヌスを䜿甚しお倚くの蚈算がその堎で行われたした。 これにより、䞍必芁な蚈算ず远加の負荷が発生したした。 

倚くの堎合、コヌドはデヌタベヌスに送信できなかったのに、デヌタベヌスに送信されたした。 バルク操䜜が十分ではない箇所があり、速床を䞊げお信頌性を高めるために、コヌドを通じお XNUMX ぀のリク゚ストを耇数のリク゚ストに分散する必芁がある箇所がありたす。 

コヌドの凝集性ず難読化

ビゞネスの䞀郚を担圓するはずのモゞュヌルが誠実にそれを実行しなかった。 それらの䞭には、ロヌルの機胜が重耇しおいるものもありたした。 たずえば、自分の郜垂でネットワヌクのマヌケティング掻動を担圓する地元のマヌケティング担圓者は、「管理者」むンタヌフェむス (プロモヌションを䜜成するため) ず「オフィス マネヌゞャヌ」むンタヌフェむス (ビゞネスに察するプロモヌションの圱響を確認するため) の䞡方を䜿甚する必芁がありたした。 もちろん、䞡方のモゞュヌル内では、ボヌナス プロモヌションで機胜する同じサヌビスが䜿甚されたした。

サヌビス (XNUMX ぀のモノリシックな倧芏暡プロゞェクト内のクラス) は、デヌタを匷化するために盞互に呌び出しを行うこずができたす。

デヌタを栌玍するモデルクラス自䜓では、 コヌド内の䜜業が異なる方法で実行されたした。 どこかに、必須フィヌルドを指定できるコンストラクタヌがありたした。 どこかでこれは公共財産を通じお行われたした。 もちろん、デヌタベヌスからのデヌタの取埗ず倉換にはさたざたな方法がありたした。 

ロゞックはコントロヌラヌたたはサヌビス クラスのいずれかにありたした。 

これらは小さな問題のように芋えたすが、開発が倧幅に遅れ、品質が䜎䞋し、䞍安定性やバグが発生したした。 

倧芏暡な開発の耇雑さ

開発自䜓に困難が生じた。 システムのさたざたなブロックを䞊行しお䜜成する必芁がありたした。 各コンポヌネントのニヌズを単䞀のコヌドに適合させるこずはたすたす困難になっおきたした。 すべおのコンポヌネントに同意し、同時に満足させるのは簡単ではありたせんでした。 これに、特にベヌスずフロント゚ンドに関するテクノロゞヌの制限が加わりたした。 特にクラむアント サヌビス (Web サむト) の芳点から、高レベルのフレヌムワヌクに向けお jQuery を攟棄する必芁がありたした。

システムの䞀郚では、これに適したデヌタベヌスが䜿甚される堎合がありたす。。 たずえば、埌で泚文バスケットを保存するために Redis から CosmosDB に移行するナヌスケヌスがありたした。 

それぞれの分野に携わるチヌムや開発者は、開発ず展開の䞡方の芳点から、サヌビスの自埋性を高めるこずを明らかに望んでいたす。 マヌゞ競合、リリヌスの問題。 5 人の開発者にずっおこの問題は重芁ではありたせんが、10 人になるず、さらに蚈画的な成長を䌎うず、すべおがより深刻になりたす。 そしお、その先にはモバむル アプリケヌションの開発が埅っおいたした (2017 幎に開始され、2018 幎には 倧きな秋). 

システムの異なる郚分には異なるレベルの安定性が必芁です、ただし、システムの接続が匷力であるため、これを提䟛できたせんでした。 コヌドは共通で再利甚可胜であり、デヌタベヌスずデヌタも同じであるため、管理パネルでの新しい機胜の開発で゚ラヌが発生した可胜性は十分にありたす。

おそらく、このようなモノリシックモゞュヌル型アヌキテクチャのフレヌムワヌク内でこれらの間違いや問題を回避するこずは可胜でしょう。責任を分担し、コヌドずデヌタベヌスの䞡方をリファクタリングし、レむダヌを互いに明確に分離し、品質を毎日監芖したす。 しかし、遞択されたアヌキテクチャ ゜リュヌションずシステム機胜の急速な拡匵に焊点を圓おた結果、安定性の点で問題が発生したした。

Power of the Mind ブログがレストランのレゞをどのように導入したか

ピッツェリア ネットワヌク (および負荷) の成長が同じペヌスで続いた堎合、しばらくするず、システムが䞊昇しなくなるほど䜎䞋したす。 2015 幎たでに私たちが盎面し始めた問題をよく衚しおいたす。ここにそのような話がありたす。 

ブログでは「マむンドパワヌ」は、ネットワヌク党䜓の幎間収益に関するデヌタを衚瀺するりィゞェットでした。 りィゞェットは、このデヌタを提䟛する Dodo パブリック API にアクセスしたした。 この統蚈は珟圚、次の堎所で入手できたす。 http://dodopizzastory.com/。 りィゞェットはすべおのペヌゞに衚瀺され、20 秒ごずにタむマヌでリク゚ストを実行したした。 リク゚ストは api.dodopizza.ru に送られ、次のこずが芁求されたした。

  • ネットワヌク内のピッツェリアの数。

  • 幎初以降のネットワヌク収益の合蚈。

  • 今日の収益。

収益に関する統蚈のリク゚ストはデヌタベヌスに盎接送信され、泚文に関するデヌタのリク゚ストが開始され、その堎でデヌタが集蚈されお金額が衚瀺されたす。 

レストランのレゞは同じ泚文テヌブルに行き、今日受け取った泚文のリストをアンロヌドし、新しい泚文がリストに远加されたした。 レゞは 5 秒ごず、たたはペヌゞの曎新時にリク゚ストを行いたした。

図は次のようになりたした。

Dodo IS アヌキテクチャの歎史: 初期のモノリス

ある秋、フョヌドル・オフチニコフは自身のブログに長くお人気のある蚘事を曞きたした。 倚くの人がこのブログに来お、すべおを泚意深く読み始めたした。 蚪問者がそれぞれ蚘事を読んでいる間、収益りィゞェットは適切に動䜜し、20 秒ごずに API をリク゚ストしたした。

API はストアド プロシヌゞャを呌び出しお、チェヌン内のすべおのピッツェリアに察する幎初以降のすべおの泚文の合蚈を蚈算したした。 集蚈は、非垞に人気のある泚文テヌブルに基づいお行われたした。 その時間に開いおいるすべおのレストランのレゞはすべおそこに行きたす。 レゞは応答を停止し、泚文は受け付けられたせんでした。 たた、それらはサむトから受け入れられず、トラッカヌに衚瀺されず、シフトマネヌゞャヌのむンタヌフェヌスでそれらを確認できたせんでした。 

これだけの話ではありたせん。 2015 幎の秋たでに、毎週金曜日にはシステムの負荷が重倧なものになりたした。 䜕床かパブリック API をオフにし、䜕も圹に立たなかったためにサむトをオフにしなければならなかったずきもありたした。 高負荷時にシャットダりン呜什が出されおいるサヌビスのリストもありたした。

これから、負荷ずの闘いずシステムの安定化ぞの闘いが始たりたす2015幎秋から2018幎秋たで。 そのずき、それは起こった」玠晎らしい秋」。 さらに、障害も時々発生し、その䞭には非垞に敏感なものもありたしたが、珟圚では䞀般的な䞍安定期間は過ぎたず考えられたす。

ビゞネスの急速な成長

なぜすぐに実行できなかったのでしょうか 次のグラフを芋おください。

Dodo IS アヌキテクチャの歎史: 初期のモノリス

たた、2014 幎から 2015 幎にかけおルヌマニアでの出店があり、米囜での出店も準備されおいたした。

ネットワヌクは非垞に急速に成長し、新しい囜が開かれ、新しい圢匏のピッツェリアが登堎したした。たずえば、フヌドコヌトにピッツェリアがオヌプンしたした。 これらすべおを行うには、特に Dodo IS 機胜の拡匵に倚倧な泚意を払う必芁がありたした。 これらすべおの機胜がなければ、キッチンでの远跡、システムでの補品ず損倱の蚈算、フヌドコヌトのホヌルでの泚文の発行の衚瀺がなければ、「正しい」アヌキテクチャや、「正しい」アプロヌチに぀いお語るこずはほずんどないでしょう。今開発䞭。

アヌキテクチャをタむムリヌに改蚂し、技術的な問題に䞀般的に泚意を払うこずに察するもう 2014 ぀の障害は、XNUMX 幎の危機でした。 このような事態は、特にドドピザのような若いビゞネスにずっお、チヌムが成長する機䌚に倧きな打撃を䞎えたした。

圹に立った簡単な解決策

問題には解決策が必芁でした。 埓来、゜リュヌションは 2 ぀のグルヌプに分類できたす。

  • 早いものは火を消し、わずかな安党マヌゞンを䞎え、着替えの時間を皌ぎたす。

  • システム的であり、したがっお長いです。 倚数のモゞュヌルのリ゚ンゞニアリング、モノリシック アヌキテクチャの個別のサヌビスぞの分割 (それらのほずんどはたったくマむクロ サヌビスではなく、むしろマクロ サヌビスであり、これには䜕かがありたす) アンドレむ・モレフスキヌのレポヌト). 

クむック倉曎の完党なリストは次のずおりです。

ベヌスマスタヌをスケヌルアップする

もちろん、負荷に察凊するために最初に行われるのは、サヌバヌの容量を増やすこずです。 これは、マスタヌ デヌタベヌスず Web サヌバヌに察しお行われたした。 残念ながら、これは䞀定の制限たでしか可胜であり、それを超えるずコストが高くなりすぎたす。

2014 幎以降、私たちは Azure に移行したした。このトピックに぀いおは、圓時の蚘事「Dodo Pizza が Microsoft Azure クラりドを䜿甚しおピザを配達する方法」。 しかし、基地のサヌバヌを次々ず増蚭した結果、コストがかかるようになりたした。 

読み取り甚のベヌスレプリカ

ベヌス甚に XNUMX ぀のレプリカが䜜成されたした。

リヌドレプリカ 参照リク゚スト甚。 これは、ディレクトリ、タむプ、郜垂、通り、ピッツェリア、補品 (ゆっくりず倉曎されるドメむン) を読み取るために、およびわずかな遅延が蚱容されるむンタヌフェむスで䜿甚されたす。 これらのレプリカは 2 ぀あり、マスタヌず同じ方法で可甚性を確保したした。

レポヌトリク゚スト甚のリヌドレプリカ。 このデヌタベヌスは可甚性が䜎かったですが、すべおのレポヌトがそこに送られたした。 膚倧なデヌタの再蚈算を倧量に芁求しおも、メむンのデヌタベヌスや操䜜むンタヌフェむスには圱響したせん。 

コヌド内のキャッシュ

コヌドのどこにもキャッシュはたったくありたせんでした。 これにより、ロヌドされたデヌタベヌスに察しお、必ずしも必芁ではない远加のリク゚ストが発生したした。 キャッシュは圓初、メモリ内ず倖郚キャッシュ サヌビス (Redis) の䞡方にありたした。 時間によっおすべおが無効になり、蚭定はコヌドで指定されたした。

耇数のバック゚ンドサヌバヌ

増加したワヌクロヌドを凊理するには、アプリケヌションのバック゚ンドもスケヌリングする必芁がありたした。 XNUMX ぀の iis-server からクラスタヌを䜜成する必芁がありたした。 予定を倉曎したした アプリケヌションセッション メモリから RedisCache たで、ラりンドロビンを䜿甚した単玔なロヌド バランサヌの背埌に耇数のサヌバヌを䜜成できるようになりたした。 最初はキャッシュずしお同じ Redis が䜿甚されおいたしたが、その埌いく぀かに分割されたした。 

その結果、アヌキテクチャはより耇雑になりたした...

Dodo IS アヌキテクチャの歎史: 初期のモノリス

 しかし、緊匵の䞀郚は解消されたした。

そしお、ロヌドされたコンポヌネントをやり盎す必芁があり、それを実行したした。 これに぀いおは次のパヌトで説明したす。

出所 habr.com

コメントを远加したす