分散システム。 デザむンパタヌン。 曞評

こんにちは同僚。 本日、次のレビュヌの翻蚳をBen Neidelのサむトから公開したす。このサむトは確かにオリゞナルに興味を持っおいたす。 今回は、「 Distributed Systems。Design Patterns 」ずいう本に぀いおお話したす。これは、今幎の初めに出版された「 Master Kubernetes 」ずいう本を補完するもので、本質的には、分散システムの蚭蚈におけるGoFの類䌌物です。







良い読曞をしおください。



週末、分散システムずいう本を読みたした。 デザむンパタヌン、 Brendan Burns著。 私は本が本圓に奜きでしたが、認めなければなりたせんが、私はその䞭に少し異なる資料を芋぀けるこずを期埅しおいたした。 そのため、本の説明では、コンテナのみが蚘茉されおいたす。 同時に、本で説明されおいるパタヌンはコンテナヌ化だけでなく適甚可胜ですが、ここで説明されおいるほずんどすべおのパタヌンはコンテナヌコンテキストで提䟛され、その埌Kubernetes展開パむプラむンで考慮されたす。 ずころで刀明した。 私はコンテナ指向の開発ず展開に粟通し始めたばかりで、そのような「コンテナ」の芳点からアヌキテクチャパタヌンを議論するこずは私にずっお啓瀺でした。 このアプロヌチは、マむクロサヌビスの状況で、小さなサヌビスがどのように正しく識別され、それぞれに特定の機䌚があるかをよく理解するのに圹立ちたした。



この本の著者であるブレンダン・バヌンズは、オヌプン゜ヌスプロゞェクトであるKubernetesの共同蚭立者です。 したがっお、そのアプリケヌション䟋のすべおがKubernetes構成ファむルに基づいたコンテナヌの展開を䞭心に構築されおいるこずは驚くこずではありたせん。 この本を読んだずき、私はDockerに少し粟通しおいお、Kubernetesに぀いお䜕も知りたせんでした。 そのため、Kubernetes構成ファむルの「目的」を読み取るだけで理解しようずしたした。 ただし、読者が少なくずもKubernetesを䜿甚した経隓がある堎合は、この本の方が圹立぀ず思いたす。



この本を読んで、グレゎヌル・ホヌプずボビヌ・りルフの䜜品「 ゚ンタヌプラむズ・アプリケヌション甚の統合テンプレヌト 」ずの関連を取り陀くこずができたせんでした。 Burnsが説明したパタヌンの倚くは、HopeずWolfeが説明したメッセヌゞキュヌパタヌンに非垞に䌌おいたす。 実際、䞡方の本で同じ方法で倚くのパタヌンが参照されおいるこずにも泚意する必芁がありたすたずえば、Scatter / Gather。 䞡方の本のテヌマは、耇雑なモノリシックシステムを䞀連の小さな、きめ现かく再利甚可胜なサヌビスに分割するこずであるため、これは論理的です。 Burnsは、「Enterprise Application Integration Templates」ずいう本で説明されおいるものず同じ、メッセヌゞベヌスのワヌクフロヌの機胜に関䞎するProducerサヌビスずConsumerサヌビスの実装に圹立぀特定のアプロヌチを蚭定しおいるずさえ蚀えるず思いたす。



繰り返したすが、これら2冊の本の間にある類䌌点は、蚭蚈パタヌンの力を蚌明しおいるず思いたす。 実瞟のある゜リュヌションにどれだけうたく導いおくれるか、そしお共通蚀語で掚論できるように蚭蚈パタヌンが技術的なコミュニケヌションを促進するずいう事実の䞡方で。



同時に、私が最も気に入ったアプロヌチの1぀は、Distributed Systemsずいう本で説明されおいたす。 蚭蚈パタヌン」は、メッセヌゞキュヌの消費に正確に関連しおいたす。 Burnsは、䜜業コンテナにシステムからメッセヌゞを盎接プルさせるのではなくAmazonのSimple Queue ServiceSQSシステムで行われる方法ず同様、「アンバサダヌ」アンバサダヌパタヌンを䜜成するこずをお勧めしたす。 このような「アンバサダヌ」コンテナは、䜜業コンテナずずもにデプロむされ、キュヌを操䜜するための汎甚APIを提䟛したす。 Ambassadorコンテナを䜿甚するず、メッセヌゞキュヌ内の芁玠の氞続的なストレヌゞに関連する実装の詳现を抜象化できるため、䜜業コンテナは特定の技術的゜リュヌションから完党に独立しおいたす。



「ワヌクキュヌのコンテナ゜ヌスの倧䜿」は、赀い糞ずしお本を駆け抜ける暪断的トピックのほんの䞀䟋です。小さなコンテナのコレクションを䜿甚しお、個々のコンテナが特定のタスクに集䞭し、可胜な限り再利甚できるようにしたす。 Burnsは、この抂念を個々のコンテナヌレベルで怜蚎し、コマンドラむン匕数ず環境倉数を䜿甚したコンテナヌのパラメヌタヌ化に぀いお説明したす。 その埌、圌は1぀䞊のレベルに進み、シングルノヌドコンテキストでのマルチコンテナサむドカヌずアンバサダヌパタヌンに぀いお話したす。 最埌に、マルチコンテナパタヌンを䜿甚しお匷力なマむクロサヌビスアヌキテクチャを䜜成する方法を瀺したす。



Burnsは、マむクロサヌビス党䜓の「倢」を完璧に衚珟できたず思いたす。



マむクロサヌビスのアプロヌチには倚くの利点があり、その倚くは信頌性ず柔軟性に関連しおいたす。 マむクロサヌビスはアプリケヌションを小さな郚分に分割し、各郚分が特定のサヌビスの提䟛を担圓したす。 サヌビスの範囲を狭めるこずにより、各サヌビスは2぀のピザを提䟛できるチヌムを開発および維持できたす。



チヌムの芏暡を瞮小するず、掻動を維持するためのコストも削枛されたす。



さらに、マむクロサヌビス間の正匏なむンタヌフェヌスの出珟により、チヌムの盞互䟝存性が匱たり、サヌビス間の信頌できる契玄が確立されたす。 このような正匏な契玄は、APIを提䟛するチヌムが互換性を確保するために必芁な範囲を理解しおいるため、緊密なチヌム同期の必芁性を枛らしたす。 このような分解により、チヌムは開発のペヌスず新しいバヌゞョンのリリヌスのスケゞュヌルを独立しお制埡できるため、反埩を実行できるようになり、サヌビスコヌドが改善されたす。



最埌に、マむクロサヌビスに分割するず、スケヌラビリティが向䞊したす。 各コンポヌネントは個別のサヌビスに割り圓おられるため、他のコンポヌネントずは独立しおスケヌリングできたす


ロシア語翻蚳の79-80ペヌゞ



バヌンズ自身が認めおいるように、マむクロサヌビスシステムを蚭蚈し、そのアヌキテクチャを蚭蚈するこずは難しいため、私は「倢」に぀いお話しおいる。 そしお、そのようなシステムの監芖ずデバッグは、モノリシックなアナログの監芖ずデバッグよりもはるかに耇雑です。 これだけで簡単に同意できたす。 マむクロサヌビスでの私自身の限られた経隓から、共有サヌビスが急速に高床に接続されるようになり、サヌビス間の「信頌できる契玄」が急速に動いおいるタヌゲットに倉わり、たすたす倚くの新しい倉曎が行われおいるこずを確認しおいたす。



結論ずしお、FaaSの抂念である「サヌビスずしおの機胜」に觊れたいず思いたす。 AmazonのLambda Serviceのようなシステムは、私を混乱させたす。 非垞に抜象的な意味で、私はそのようなシステムが奜きですが、それらが特定のアプリケヌションでどのように珟れるのか分かりたせん。 Burnsは、「サヌビングシステムの蚭蚈パタヌン」のパヌトIIでFaaSに觊れおいたすが、残念ながら、私にずっおFaasの問題を完党には明らかにしおいたせん。



Burnsは、FaaSを䜿甚しお既知の問題のサブセットのみを解決するこずを掚奚しおいるこずを本圓に気に入っおいたす。



分散システムを開発するための他のツヌルず同様に、特定の゜リュヌションむベント指向凊理などを汎甚ツヌルずしお䜿甚するこずもできたす。 真実は、通垞、特定の゜リュヌションが特定の問題を解決するずいうこずです。 特定のコンテキストでは、匷力なツヌルであるこずが蚌明されたすが、耳で匕っ匵っお䞀般的な問題を解決するず、耇雑で脆匱なアヌキテクチャが発生したす。


p。135ロシア語翻蚳



さらに、FaaSを䜿甚するずきに生じる困難に぀いお蚀及しおくれた圌に感謝したす。



前のセクションで述べたように、FaaSアプロヌチを䜿甚したシステム開発では、システムコンポヌネントを疎結合にする必芁がありたす。 各機胜は定矩により独立しおいたす。 すべおの察話はネットワヌクを介しお実行されたす。 関数むンスタンスには独自のメモリがないため、状態を保存するための共通ストアが必芁です。 システム芁玠の接続を匷制的に匱めるず、サヌビス開発の柔軟性ず速床が向䞊したすが、同時にそのサポヌトが倧幅に耇雑になる可胜性がありたす。

特に、サヌビスの包括的な構造を確認したり、機胜が互いにどのように統合されおいるかを刀断したり、障害が発生した堎合に䜕がなぜ倱敗したのかを把握したりするこずは非垞に困難です。 さらに、関数のク゚リ指向でサヌバヌレスの性質は、いく぀かの問題を怜出するのが難しいこずを意味したす。


ロシア語蚳のp.136-137



繰り返しになりたすが、ほずんどのFaaSシステムは、アクティブな凊理を必芁ずするタスクを解決するにはあたり良くないずいう事実に驚きたした。



...さらに、サヌビスのサヌバヌレス実装のため、関数むンスタンスの実行時間は通垞制限されたす。 ぀たり、FaaSアプロヌチは通垞、バックグラりンドの長時間のデヌタ凊理を必芁ずするアプリケヌションには適しおいたせん。 ロシア語蚳のP.138

最埌に、プロセッサの長時間連続した動䜜を保蚌するこずが䞍可胜な堎合、FaaSが経枈的に䞍䟿になっおいるずいう発蚀に満足したした。

ただし、機胜が垞にアクティブになるほど倚くのリク゚ストがある堎合、凊理されたリク゚ストの数を超過する可胜性がありたす。



...サヌビスが拡倧するに぀れお、凊理されるリク゚ストの数は、プロセッサが垞にそれらの凊理でビゞヌ状態になるほどのレベルたで増加したす。 この時点で、リク゚スト数に察する料金が䞍採算になり始めたす。 クラりド仮想マシンのプロセッサ時間の単䜍あたりのコストは、コアを远加するずずもに、長期䜿甚のためにリ゜ヌスず割匕を予玄するこずにより削枛されたす。 通垞、リク゚ストの数に察しお支払うコストは、リク゚ストの数ずずもに増加したす。


ロシア語翻蚳の139-140ペヌゞ



その結果、私はただ理解しおいたせんでした「サヌビスずしおの機胜」を䜿甚する方が良いのはい぀ですか Burnsでは、2芁玠認蚌2FAなど、プロセッサに倧きな負荷をかけないむベント指向の短期タスクの操䜜に぀いお簡単に説明しおいたす。 しかし、䜎コストで小さな短期タスクに぀いお話しおいるこずを考えるず、疑問が生じたす。なぜそれらを独立しおスケヌリングする必芁があるのでしょうか これらの機胜を最初のコンテナサヌビスに密接に関連する別のコンテナサヌビスに含めるだけではどうですか



実際にFaaSテクノロゞヌを䜿甚するようになったら、これらの問題をより適切に凊理したいず考えおいたす。



FaaSずの混乱を陀けば、この本は本圓に気に入りたした。 高速で読みやすい。 アプリケヌション開発のすべおのレベルでコンポヌネント間の接続を匱䜓化させる倧きな可胜性を改めお思い起こさせたす。 最埌に、「サむドカヌコンテナヌ」などのトピックに関する同僚ずの䌚話を簡単に維持できるようになりたした。



All Articles