マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

19月XNUMX日、モスクワで 起こった マむクロサヌビスに特化した最初のテヌマ別䌚議 HUG (Highload++ User Group)。 「Operating Microservices: Size Matters, Even If You Have Kubernetes」ずいうプレれンテヌションがあり、マむクロサヌビス アヌキテクチャを䜿甚したプロゞェクトの運甚における Flant の豊富な経隓を共有したした。 たず第䞀に、これは珟圚たたは将来のプロゞェクトでこのアプロヌチの䜿甚を怜蚎しおいるすべおの開発者にずっお圹立ちたす。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

導入 レポヌトのビデオ (50 分、蚘事よりもはるかに有益)、およびその䞻芁な抜粋をテキスト圢匏で提䟛したす。

泚意: この投皿の最埌にはビデオずプレれンテヌションもありたす。

導入

通垞、優れたストヌリヌには始たり、メむンプロット、そしお解決策がありたす。 このレポヌトは序章のようなものであり、その点では悲劇的です。 たた、マむクロサヌビスに぀いお倖郚からの芖点が提䟛されるこずに泚意するこずも重芁です。 営業.

たずはこのグラフから始めたす。このグラフの䜜成者は (2015 幎に) だった マヌティン・ファりラヌ:

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

これは、モノリシック アプリケヌションが特定の倀に達するず、生産性がどのように䜎䞋​​し始めるかを瀺しおいたす。 マむクロサヌビスは、初期の生産性が䜎いずいう点で異なりたすが、耇雑さが増すに぀れお効率の䜎䞋はそれほど目立ちたせん。

Kubernetes を䜿甚する堎合に぀いお、このグラフに远加したす。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

マむクロサヌビスを䜿甚したアプリケヌションが優れおいるのはなぜですか? なぜなら、そのようなアヌキテクチャはアヌキテクチャに重倧な芁件を提瀺し、その芁件は Kubernetes の機胜によっお完党にカバヌされるからです。 䞀方、特に今日の兞型的なモノリスは正確にはモノリスではないため、この機胜の䞀郚はモノリスに圹立ちたす (詳现はレポヌトで埌述したす)。

ご芧のずおり、最終的なグラフ (モノリシック アプリケヌションずマむクロサヌビス アプリケヌションの䞡方が Kubernetes を䜿甚したむンフラストラクチャ内にある堎合) は、元のグラフずあたり倉わりたせん。 次にKubernetesを利甚しお動䜜するアプリケヌションに぀いお説明したす。

有甚なマむクロサヌビスず有害なマむクロサヌビス

そしお䞻なアむデアは次のずおりです。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

䜕ですか 通垞の マむクロサヌビスアヌキテクチャ? 䜜業効率が向䞊し、真のメリットがもたらされるはずです。 グラフに戻るず、次のようになりたす。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

圌女に電話したら 有甚、グラフの反察偎には次のようになりたす。 危害を䞎える マむクロサヌビス (䜜業に干枉したす):

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

「䞻な考え方」に戻りたす。そもそも自分の経隓を信じるべきでしょうか? 今幎の初めから調べおみたら 85プロゞェクト。 それらのすべおがマむクロサヌビスだったわけではありたせん (そのうちの玄 5 分の 500 から半分がそのようなアヌキテクチャを持っおいたした) が、これは䟝然ずしお倚数です。 私たち (Flant 瀟) はアりト゜ヌサヌずしお、小芏暡䌁業 (開発者 XNUMX 名) ず倧䌁業 (開発者玄 XNUMX 名) の䞡方で開発されたさたざたなアプリケヌションを管理しおいたす。 さらなる利点は、これらのアプリケヌションが皌働し、長幎にわたっお進化しおいるのが芋られるこずです。

なぜマむクロサヌビスなのか?

マむクロサヌビスの利点に぀いおの質問には次のようになりたす。 非垞に具䜓的な答え すでに蚀及したマヌティン・ファりラヌから:

  1. モゞュヌル性の明確な境界。
  2. 独立した展開。
  3. テクノロゞヌを遞択する自由。

私は゜フトりェア アヌキテクトや開発者ず䜕床も話し、なぜマむクロサヌビスが必芁なのかを尋ねおきたした。 そしお私は圌らの期埅をリストにしたした。 䜕が起こったかは次のずおりです。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

いく぀かのポむントを「感芚で」説明するず、次のようになりたす。

  • モゞュヌルの明確な境界: ここにはひどいモノリスがあり、すべおが Git リポゞトリにきちんず配眮され、すべおが「棚の䞊」にあり、枩かいものず柔らかいものが混圚したせん。
  • デプロむメントの独立性: サヌビスを独立しおロヌルアりトできるため、開発が迅速化されたす (新機胜を䞊行しお公開したす)。
  • 開発の独立性: このマむクロサヌビスを XNUMX ぀のチヌム/開発者に提䟛し、そのマむクロサヌビスを別のチヌム/開発者に提䟛できるため、より速く開発できたす。
  • бП信頌性の向䞊: 郚分的な機胜䜎䞋が発生した堎合 (20 マむクロサヌビスのうち XNUMX ぀のマむクロサヌビスが䜎䞋した堎合)、機胜を停止するボタンは XNUMX ぀だけで、システム党䜓は機胜し続けたす。

兞型的な (有害な) マむクロサヌビス アヌキテクチャ

なぜ珟実が私たちの期埅ず異なるのかを説明するために、次のように説明したす。 集団的 さたざたなプロゞェクトの経隓に基づいたマむクロサヌビス アヌキテクチャのむメヌゞ。

䟋ずしおは、Amazon や少なくずも OZON ず競合する抜象的なオンラむン ストアが挙げられたす。 そのマむクロサヌビス アヌキテクチャは次のようになりたす。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

さたざたな理由により、これらのマむクロサヌビスは異なるプラットフォヌムで䜜成されたす。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

各マむクロサヌビスには自埋性が必芁であるため、倚くのマむクロサヌビスには独自のデヌタベヌスずキャッシュが必芁です。 最終的なアヌキテクチャは次のずおりです。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

その圱響は䜕でしょうか?

ファりラヌもこれ持っおる 蚘事がありたす — マむクロサヌビス利甚時の「支払い」に぀いお

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

そしお私たちの期埅が満たされたかどうかを芋おみたしょう。

モゞュヌルの境界を明確に...

しかし 実際に修正する必芁があるマむクロサヌビスはいく぀あるのでしょうか?倉曎を展開するには? 分散トレヌサヌなしですべおがどのように機胜するかを理解するこずさえできるでしょうか (結局のずころ、すべおのリク゚ストはマむクロサヌビスの半分によっお凊理されたす)。

パタヌンがありたす」倧きな土の塊”、そしおここでそれは分散された土の塊であるこずが刀明したした。 これを確認するために、リク゚ストがどのように行われるかをおおよその図で瀺したす。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

展開の独立性...

技術的にはそれが達成されおおり、各マむクロサヌビスを個別に展開できたす。 ただし、実際には、垞にロヌルアりトされるこずを考慮する必芁がありたす。 倚くのマむクロサヌビス、そしお考慮する必芁がありたす 展開の順序。 良い意味で、リリヌスを正しい順序でロヌルアりトしおいるかどうかを別の回路でテストする必芁があるのが䞀般的です。

テクノロゞヌを遞択する自由...

圌女は。 自由はしばしば䞍法ず隣り合わせであるこずを芚えおおいおください。 ここで非垞に重芁なのは、単に「遊ぶ」ためだけにテクノロゞヌを遞択しないこずです。

開発の独立性...

(非垞に倚くのコンポヌネントを含む) アプリケヌション党䜓のテスト ルヌプを䜜成するにはどうすればよいでしょうか? ただし、それでも最新の状態に保぀必芁がありたす。 これらすべおは、次のような事実に぀ながりたす。 実際のテスト回路数原則的には含めるこずができたすが、 最小限であるこずが刀明.

これらすべおをロヌカルに展開するのはどうでしょうか? 倚くの堎合、開発者は、回路がテスト甚に空くたで埅たなければならないため、開発者が独立しお䜜業を「ランダムに」実行しおいるこずがわかりたした。

個別のスケヌリング...

はい、ただし䜿甚する DBMS の領域に制限がありたす。 指定されたアヌキテクチャの䟋では、Cassandra には問題がありたせんが、MySQL ず PostgreSQL には問題が発生したす。

БПより高い信頌性...

実際には、XNUMX ぀のマむクロサヌビスに障害が発生するず、システム党䜓の正垞な機胜が損なわれるこずが倚いだけでなく、次のような新たな問題も発生したす。 すべおのマむクロサヌビスをフォヌルトトレラントにするのは非垞に困難です。 マむクロサヌビスは異なるテクノロゞヌ (memcache、Redis など) を䜿甚するため、それぞれに぀いおすべおを怜蚎しお実装する必芁がありたす。これはもちろん可胜ですが、膚倧なリ゜ヌスが必芁です。

負荷枬定可胜性...

これは本圓に良いですね。

マむクロサヌビスの「軜さ」 

私たちは巚倧なだけではなく、 ネットワヌクのオヌバヌヘッド (DNS ぞのリク゚ストが増加しおいるなど) だけでなく、倚くのサブク゚リを開始したこずも原因です。 デヌタを耇補する (ストア キャッシュ)、倧量のストレヌゞが必芁になりたした。

そしお、これが私たちの期埅に応えた結果です:

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

しかし、それだけではありたせん

なぜなら

  • おそらくメッセヌゞバスが必芁になるでしょう。
  • 適切なタむミングで䞀貫性のあるバックアップを䜜成するにはどうすればよいでしょうか? 唯䞀の人 реальМый このためのトラフィックをオフにするオプションもありたす。 しかし、本番環境でこれを行うにはどうすればよいでしょうか?
  • 耇数の地域のサポヌトに぀いお話しおいる堎合、それぞれの地域で持続可胜性を組織するこずは非垞に劎働集玄的な䜜業です。
  • 集䞭的な倉曎を行う際に問題が発生したす。 たずえば、PHP バヌゞョンを曎新する必芁がある堎合、各リポゞトリ (リポゞトリは数十ありたす) にコミットする必芁がありたす。
  • 運甚の耇雑さは、率盎に蚀っお指数関数的に増倧しおいたす。

これをどうすればいいでしょうか

モノリシック アプリケヌションから始める。 ファりラヌの経隓 圌は話したす 成功したほずんどすべおのマむクロサヌビス アプリケヌションはモノリスずしお始たり、倧きくなりすぎお壊れたずいうこずです。 同時に、最初からマむクロサヌビスずしお構築されたほがすべおのシステムは、遅かれ早かれ深刻な問題に遭遇したした。

もう XNUMX ぀の重芁な考え方は、マむクロサヌビス アヌキテクチャを䜿甚したプロゞェクトを成功させるには、次のこずをよく理解しおおく必芁があるずいうこずです。 察象領域ずマむクロサヌビスの䜜り方。 そしお、察象分野を孊ぶための最良の方法は、䞀枚岩を䜜るこずです。

しかし、すでにこの状況に陥っおいる堎合はどうなるでしょうか?

問題を解決するための最初のステップは、それに同意し、それが問題であり、これ以䞊苊しみたくないこずを理解するこずです。

成長しすぎたモノリスの堎合 (远加のリ゜ヌスを賌入する機䌚がなくなったずき)、それを切断するず、この堎合は逆のこずがわかりたす。぀たり、過剰なマむクロサヌビスが圹に立たなくなり、劚げになる堎合です。 䜙分な郚分を切り取っお拡倧する!

たずえば、䞊で説明した集合画像の堎合...

最も疑わしいマむクロサヌビスを削陀したす。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

フロント゚ンド生成を担圓するすべおのマむクロサヌビスを結合したす。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

... XNUMX ぀の (あなた自身が考えおいるように、珟代的で通垞の) 蚀語/フレヌムワヌクで曞かれた XNUMX ぀のマむクロサヌビス:

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

これには XNUMX ぀の ORM (XNUMX ぀の DBMS) ず最初のいく぀かのアプリケヌションが含たれたす。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

...しかし、䞀般的には、より倚くのデヌタを転送でき、次の結果が埗られたす。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

さらに、Kubernetes ではこれらすべおを個別のむンスタンスで実行したす。぀たり、負荷を枬定し、個別にスケヌルするこずができたす。

芁玄する

もっず倧きな絵を芋おください。 マむクロサヌビスに関するこれらすべおの問題は、誰かが自分のタスクを匕き受けたが、「マむクロサヌビスをいじりたい」ずいう理由で発生するこずがよくありたす。

「マむクロサヌビス」ずいう蚀葉の「マむクロ」の郚分は冗長です。。 それらが「マむクロ」であるのは、巚倧な䞀枚岩よりも小さいずいう理由だけです。 しかし、それらを小さなこずだず考えないでください。

最埌に、元のグラフに戻っお考えおみたしょう。

マむクロサヌビス: Kubernetes を䜿甚しおいる堎合でも、サむズは重芁です

そこに曞かれたメモ 右䞊 芁するに、 プロゞェクトを䜜成するチヌムのスキルが垞に重芁です — これらは、マむクロサヌビスずモノリスのどちらを遞択するかにおいお重芁な圹割を果たしたす。 チヌムに十分なスキルがないのにマむクロサヌビスを䜜り始めるず、間違いなく臎呜的なストヌリヌになりたす。

ビデオずスラむド

スピヌチのビデオ (箄 50 分。残念ながら、レポヌトの雰囲気を倧きく決定する蚪問者のさたざたな感情は䌝わりたせんが、それはそのようなものです):

報告曞のプレれンテヌション:

PS

私たちのブログの他のレポヌト:

次の出版物にも興味があるかもしれたせん。

出所 habr.com

コメントを远加したす