2018マむクロサヌビスマッドネスデス

ご泚意 perev。 経隓豊富な開発者によっお曞かれたこの資料は、タむトルを芋お、ご想像のずおり、マむクロサヌビスの抂念を埋めるこずを目的ずしおいたせん。 この蚘事は、マむクロサヌビスが「銀の匟䞞」であり、それ自䜓がすべおのアヌキテクチャおよび運甚䞊の問題を解決するこずを決定した人々に察する合理的な譊告です。 これを実蚌するために、著者は、すでにマむクロサヌビスを䜿甚しおいる、たたはマむクロサヌビスに移行しおいる今日のプロゞェクトでよく遭遇する䞀般的な問題を収集しお䜓系化したした。







近幎、マむクロサヌビスは非垞に人気のあるトピックになりたした。 マむクロサヌビスマッドネスは次のようになりたす。



「NetflixはDevOpsが埗意です。 Netflixはマむクロサヌビスを䜜成したす。 そうすれば、マむクロサヌビスをやっおいるなら、DevOpsが埗意です。」


マむクロサヌビスパタヌンを導入するために、特定の問題のコンテキストでマむナスずプラスが䜕をもたらすかを必ずしも理解せずに倚倧な努力が払われた非垞に倚くの堎合がありたす。



マむクロサヌビスずは䜕か、そのパタヌンが非垞に魅力的である理由、およびその䜿甚方法の䞻な難点に぀いお詳しく説明したす。 最埌に、 お客様のニヌズに察するマむクロサヌビスパタヌンの関連性を怜蚎する際に自問する必芁がある簡単な質問で終わりたす。 これらの質問は、蚘事の最埌に蚘茉されおいたす。



マむクロサヌビスずは䜕ですか、なぜそんなに人気があるのですか



基本から始めたしょう。 仮想ビデオ共有プラットフォヌムの可胜な実装の䟋を次に瀺したす。最初にモノリシック衚珟1぀の倧きなブロックで、次にマむクロサヌビスで。







2぀のシステムの違いは、最初のシステムが単䞀の倧きなブロックであるずいうこずです。 モノリス。 2番目は、小さな特定のサヌビスのセットです。 各サヌビスには固有の圹割がありたす。



ダむアグラムがこのような詳现レベルで衚瀺されるず、その魅力がわかりやすくなりたす。 すべおの朜圚的な利点がありたす。



独立した開発 。 小さな独立したコンポヌネントは、小さな独立したチヌムによっお䜜成できたす。 グルヌプは、 トランスコヌドサヌビスに圱響を䞎えるこずなく、たたそれを知らなくおも、 アップロヌドサヌビスの倉曎に取り組むこずができたす。 コンポヌネントの調査に必芁な時間が倧幅に短瞮され、新しい機胜の開発が容易になりたす。



独立展開 。 個々のコンポヌネントはそれぞれ独立しおデプロむできたす。 これにより、新機胜を迅速にリリヌスし、リスクを軜枛できたす。 ストリヌミングコンポヌネントの修正たたは機胜は、他のコンポヌネントを展開するこずなく展開できたす。



独立したスケヌラビリティ 。 各コンポヌネントは、互いに独立しおスケヌリングできたす。 ナヌザヌの需芁が高いずきに、新しい転送が発生する堎合、各コンポヌネントをスケヌリングする必芁なく、 ダりンロヌドコンポヌネントをスケヌリングしお負荷を増やすこずができるため、スケヌリングが柔軟になり、コストが削枛されたす。



再利甚可胜です。 コンポヌネントは小さな特定の機胜を実装したす。 これは、他のシステム、サヌビス、たたは補品での䜿甚に容易に適応できるこずを意味したす。 トランスコヌドコンポヌネントは、他のビゞネス郚門で䜿甚したり、別のナヌザヌにトランスコヌディングサヌビスを提䟛する新しいビゞネスに倉えたりするこずもできたす。



このレベルの詳现では、モノリシックモデルに察するマむクロサヌビスモデルの利点は明らかです。 もしそうなら、なぜパタヌンは今流行しおいたすか 圌は私の人生のどこにいたしたか



すべおがずおもクヌルな堎合、なぜこれたで誰もこれをやったこずがないのですか



この質問には2぀の答えがありたす。 最初の-圌らは実際に 、技術的な胜力の範囲でした。 第二に、最近の技術的改善により、このアプロヌチを新しいレベルに匕き䞊げるこずができたした。



この質問ぞの回答の準備を始めたずき、 長い説明があったので、別の蚘事でそれを遞び出し、少し埌で公開する方が良いでしょう。 ここでは、1぀のプログラムから倚くのプログラムぞのパス、ESB ゚ンタヌプラむズサヌビスバス、぀たり「゚ンタヌプラむズサヌビスバス」-箄Transl。ずSOA サヌビス指向アヌキテクチャ、すなわち「サヌビス指向アヌキテクチャ」 は省略されたす。 -箄Transl。 、コンポヌネント蚭蚈および境界付きコンテキスト「制限されたコンテキスト」-ドメむン駆動蚭蚈からのパタヌン-箄Transl。など



このすべおの代わりに、さたざたな方法でこれたですべおのこずを行っおきたしたが、最近の爆発的な成長を遂げたコンテナテクノロゞヌ特にDockerおよびオヌケストレヌションテクノロゞヌKubernetes、Mesos、Consulなどによっおのみパタヌンが倧きくなりたした技術的な芳点から実装するのがより適切です。



マむクロサヌビスアプロヌチを実装する可胜性を圓然ず考える堎合、その必芁性に぀いお慎重に怜蚎する必芁がありたす。 高床な理論的利点がありたしたが、難点はどうですか



マむクロサヌビスの問題は䜕ですか



マむクロサヌビスが非垞に矎しい堎合、問題は䜕ですか 私が芋た最も重芁な問題のいく぀かを以䞋に瀺したす。



開発者の耇雑さの増加



開発者の人生はずっず難しくなる可胜性がありたす。 開発者が倚くのサヌビス[ゞャヌニヌ]に圱響する機胜で䜜業したい堎合、圌はすべおのサヌビスを自分のマシンで実行し、それらに接続する必芁がありたす。 倚くの堎合、これは単䞀のプログラムを実行するよりも困難です。



この耇雑さは、適切なツヌルの助けを借りお郚分的に軜枛できたすが、システムを構成するサヌビスの数が増えるほど、システム党䜓の起動時に開発者が抱える困難が増えたす。



運甚の耇雑さの増加



サヌビスを開発しないがサポヌトするチヌムは、朜圚的な耇雑さの爆発を経隓したす。 実行䞭の耇数のサヌビスを管理する代わりに、数十、数癟、数千のサヌビスを䜿甚する必芁がありたす。 より倚くのサヌビス、盞互䜜甚するより倚くの方法、朜圚的な問題に察するより倚くの機䌚。



DevOpsの耇雑さの増加



前の2぀のポむントを芋るず、特に、DevOpsがプラクティスずしお人気を博しおいるため私は倧きな支持者です、運甚ず開発は別々に考えられおいるように芋えたす。 それでは、DevOpsのおかげで良くなっおいたせんか



困難なのは、倚くの組織がただ開発チヌムず運甚チヌムを分けおいるこずであり、そのような堎合、マむクロサヌビスの適応に苊劎する可胜性が高いでしょう。



すでにDevOpsを䜿甚しおいる組織の堎合、事態はそれほど単玔でもありたせん。 開発者ずシステム管理者の䞡方になるこずはすでに困難ですが優れた゜フトりェアを䜜成するために重芁です、コンテナヌオヌケストレヌションシステム、特に急速に開発されおいるシステムのニュアンスも理解する必芁がありたす。 だから私は次のポむントに来たす。



必芁な深刻な胜力



䜜業が専門家によっお行われた堎合、結果は玠晎らしいものになりたす。 しかし、単䞀のモノリシックシステムの䜜業ですべおが完璧ではない組織を想像しおください。 システムの数が増えるず、操䜜が耇雑になり、状況が改善されるのはなぜですか



はい、効率的な自動化、監芖、オヌケストレヌションなどを備えおいたす -これはすべお可胜です。 ただし、技術が困難になるこずはめったにありたせん。通垞、技術を効果的に䜿甚できる人を探すこずです。 そのようなスキルの需芁は珟圚非垞に倧きく、それらを芋぀けるこずは容易ではありたせん。



通垞、実際のシステムには明確に定矩された境界がありたせん



マむクロサヌビスの利点を説明するために䜿甚されるすべおの䟋では、独立したコンポヌネントに぀いお話しおいたした。 ただし、倚くの堎合、コンポヌネントは単玔に独立しおいるわけではありたせん。 玙の特定の領域が぀ながっおいるように芋える堎合、実際には、すべおの詳现を掘り䞋げるず、提案されたモデルよりもすべおがはるかに耇雑であるこずが簡単にわかりたす。



ここですべおが非垞に耇雑になりたす。 境界が実際に明確に定矩されおいない堎合、サヌビスの孀立したデプロむの理論的な可胜性の堎合でも、サヌビス間の盞互䟝存関係がポップアップしたす。そのため、サヌビスセットをグルヌプずしおデプロむする必芁がありたす。



蚀い換えるず、これは、互いに連携しお怜蚌およびテストされたサヌビスの䞀貫したバヌゞョンを維持する必芁があるこずを意味したす。 新しい機胜を展開するには、倚くのサヌビスの展開を慎重に管理する必芁があるため、実際にはシステムの䞀郚は個別に展開できたせん。



ステヌトフルな耇雑さはしばしば無芖されたす



前の䟋では、機胜の展開時に耇数のサヌビスの耇数のバヌゞョンを展開する必芁が生じるこずがありたす。 思いやりのある展開手法により、人生が楜になりたす。たずえば、青緑の展開[青/緑の展開] サヌビスを調敎するためにほずんどのプラットフォヌムで最小限の劎力が必芁ですや、ナヌザヌに適切なものを遞択するオプションを備えたサヌビスの倚くのバヌゞョンの䞊行起動です。



サヌビスがステヌトレスである堎合、これらの手法は倚くの障害を取り陀きたす。 しかし、ステヌトレスサヌビスの操䜜は実際には非垞に簡単です。 実際、ステヌトレスサヌビスがある堎合、これらすべおのマむクロサヌビスをスキップし、サヌバヌレスモデルを䜿甚するこずを怜蚎するこずをお勧めしたす。



実際には、倚くのサヌビスが状態を保存する必芁がありたす。 ビデオ共有プラットフォヌムの䟋は、サブスクリプションサヌビスです。 サブスクリプションサヌビスの新しいバヌゞョンが、新しい皮類のデヌタベヌスにデヌタを保存するようにしたす。 䞡方のサヌビスが䞊行しお実行されおいる堎合、2぀のスキヌムを同時に䜿甚するシステムがありたす。 青緑色の展開を行い、他のサヌビスが新しいフォヌムのデヌタに䟝存しおいる堎合は、それらを同時に曎新する必芁がありたす。 サブスクリプションサヌビスの展開が倱敗しおロヌルバックした堎合は、これらのサヌビスもロヌルバックしおから「カスケヌド」する必芁がありたす。



繰り返したすが、NoSQLの䞖界のデヌタベヌスでは、同様のスキヌマ関連の問題はなくなるず思われがちですが、そうではありたせん。 厳密なスキヌマを必芁ずしないデヌタベヌスは、システムにスキヌマがないこずを意味したせん。本質的には、DBMSレベルではなく、アプリケヌションレベルでスキヌマを管理する必芁があるからです。 デヌタの性質ずその倉化を理解するずいう根本的な問題を根絶するこずはできたせん。



盞互䜜甚の耇雑さはしばしば無芖されたす。



盞互に䟝存するサヌビスの倧芏暡なネットワヌクを䜜成しおいるため、サヌビス間盞互䜜甚のための広いフィヌルドが存圚する可胜性がありたす。 倚くの困難がありたす。 たず、朜圚的な障害が発生する堎所がさらにありたす。 ネットワヌクコヌルが機胜しない可胜性を予枬する必芁がありたす。぀たり、あるサヌビスが別のサヌビスにアクセスするたびに、少なくずも詊行を繰り返すようにする必芁がありたす。 サヌビスが倚くのサヌビスにアクセスする必芁がある堎合、状況はさらに耇雑になりたす。



ナヌザヌが共有サヌビスにビデオをアップロヌドするこずを想像しおください。 ダりンロヌドサヌビスを開始し、デヌタをトランスコヌドサヌビスに転送し、サブスクリプションを曎新し、掚奚事項を曎新する必芁がありたす。 これらすべおの課題には特定のオヌケストレヌションが必芁であり、䜕かが壊れた堎合は、アクションを繰り返す必芁がありたす。



繰り返し呌び出しのロゞックは、管理が難しくなる可胜性がありたす。 倱敗点が倚すぎるため、すべおを同期的に実行しようずするず倱敗するこずがよくありたす。 この堎合、非同期盞互䜜甚パタヌンの䜿甚がより信頌できる゜リュヌションになりたす。 しかし、問題は非同期パタヌンのためにシステムがステヌトフルになるこずです。 そしお最埌の段萜で述べたように、ステヌトフルシステムおよび分散状態のシステムを管理するこずは非垞に困難です。



サヌビス間通信のためにマむクロサヌビスシステムでメッセヌゞキュヌが䜿甚される堎合、基本的にすべおのサヌビスを結び付ける倧きなデヌタベヌスメッセヌゞキュヌたたはブロヌカヌがありたす。 繰り返したすが、これは最初はすべお問題ではないように芋えたすが、回路はあなたに远い぀き、自分自身に思い出させたす。 サヌビスバヌゞョンXは特定の圢匏でメッセヌゞを曞き蟌むこずができるため、そのようなメッセヌゞに䟝存するサヌビスも、送信サヌビスがメッセヌゞ内の䜕かを倉曎したずきに曎新する必芁がありたす。



倚くの異なる圢匏のメッセヌゞを凊理するサヌビスを䜿甚できたすが、管理は困難です。 サヌビスの新しいバヌゞョンをデプロむするず、2぀のバヌゞョンのサヌビスが同じキュヌからのメッセヌゞを凊理しようずし、堎合によっおは異なるバヌゞョンの送信者サヌビスからもメッセヌゞを凊理しようずしたす。 これは、混乱した䞍適切な状況に぀ながる可胜性がありたす。 それらを回避するために、特定のバヌゞョンのメッセヌゞのみを蚱可する方が簡単であるこずが刀明する堎合がありたす。これは、サヌビスのセットに察しお䞀貫したバヌゞョンのセットをデプロむする必芁があるこずを意味したす。



これは、詳现に進むず、独立した展開が必ずしも意図したずおりに機胜しないずいう考えを再確認したす。



バヌゞョン管理は耇雑になる可胜性がありたす



䞊蚘の障害を克服するには、バヌゞョンを非垞に慎重に管理する必芁がありたす。 繰り返したすが、 semverのような暙準に埓うこずで問題が解決するず信じる傟向がありたす。 そうではありたせん。 Semverは䜿甚する䟡倀のある契玄ですが、盞互䜜甚する可胜性のあるサヌビスずAPIのバヌゞョンを远跡する必芁がありたす。



すぐに重倧な問題に盎面し、実際にどのバヌゞョンのサヌビスが実際に盞互に連携しおいるかわからない状況に陥るこずがありたす。



NodeやJavaのモゞュヌル、Cのラむブラリなど、゜フトりェアシステムの䟝存関係を管理するこずがどれほど難しいかはよく知られおいたす。 1぀の゚ンティティが䜿甚する独立したコンポヌネントの競合に察凊するこずは非垞に困難です。



䟝存関係が静的であり、パッチの適甚、曎新、線集などが可胜な堎合、これらの問題に察凊するこずは困難です。 皌働䞭のサヌビスが䟝存関係ずしお機胜する堎合、それらを曎新するこずはできたせん。耇数のバヌゞョンを実行する必芁がありたす䞊蚘の問題が発生したす。



分散トランザクション



操䜜䞭にトランザクションの敎合性が必芁な状況では、マむクロサヌビスが倧きな痛みになる堎合がありたす。 分散状態を扱うのは簡単ではなく、壊れる可胜性のある倚くの小さなコンポヌネントはトランザクションオヌケストレヌションを本圓に困難にしたす。



操䜜をi等にしたり、再詊行メカニズムを提案したりするなどしお、問題を回避しようずするこずは魅力的に思えるかもしれたせん。 -倚くの堎合、それは動䜜したす。 ただし、䞭間状態がなくおも、成功たたは倱敗したトランザクションが単に必芁ずなるシナリオが存圚する堎合がありたす。 このタスクたたはマむクロサヌビスモデルでの実装の回避策の耇雑さは非垞に高くなる可胜性がありたす。



マむクロサヌビスはマスクされたモノリスにするこずができたす



はい、特定のサヌビスずコンポヌネントを分離しおデプロむできたすが、ほずんどの堎合、Kubernetesなどのオヌケストレヌション甚の䜕らかのプラットフォヌムが起動したす。 GoogleのGKEやAmazonのEKSなどのマネヌゞドサヌビスを䜿甚するず、クラスタヌの管理の耇雑さのほずんどが解決されたす。



ただし、クラスタヌを自分で管理する堎合は、倧芏暡で耇雑で重芁なシステムで䜜業しおいたす。 個々のサヌビスには䞊蚘のすべおの利点がありたすが、クラスタヌを慎重に管理する必芁がありたす。 そのようなシステムの展開は困難であり、アップグレヌドは耇雑であり、フェむルオヌバヌは耇雑になる可胜性がありたす。



倚くの堎合、党䜓的な利点は残りたすが、別の倧芏暡で耇雑なシステムを管理するこずによっお生じる远加の耇雑さを単玔化たたは過小評䟡しないこずが重芁です。 マネヌゞドサヌビスは圹立ちたすが、倚くの堎合それらは若すぎたすたずえば、Amazon EKSは2017幎末に発衚されたした。



マむクロサヌビスの狂気の死



慎重か぀慎重な決定を䞋すこずで、狂気を避けおください。 そしお、あなたがこれを行うのを助けるために、私はあなたがあなた自身に尋ねるこずができるいく぀かの質問ずそれらに察する答えの説明を準備したした。 ご泚意 perev。 元の画像が翻蚳され、以䞋のテキスト圢匏で衚瀺されたす。



1.チヌムサむズ



チヌム党䜓を1぀の倧きなテヌブルに着垭させるこずは可胜ですか





2.ステヌトレス/ステヌトフル



システムは䞻にステヌトレスですか





3.システムの「ナヌザヌ」



1぀のアプリケヌションたたはサヌビスの゜リュヌションを構築しおいたすか





4.䟝存関係



モノリシックな䟝存関係がありたすか





5.コンピテンシヌ



コンテナ、オヌケストレヌション、DevOpsの専門家はいたすか





すべおの質問ず回答英語を含む元のPDFをここからダりンロヌドしたす 。



最埌の考えマむクロサヌビスずアヌキテクチャを混同しないでください



この蚘事では「a」ずいう蚀葉を意図的に避けたした。 しかし、私の友人であるゟルタンは圌女をチェックしお、非垞に良い点を指摘したした。



マむクロサヌビスアヌキテクチャは存圚したせん。 マむクロサヌビスは、コンポヌネントの単なる別のパタヌンたたは実装であり、それ以䞊でもそれ以䞋でもありたせん。 それらがシステムで衚珟されおいるかどうかは、システムアヌキテクチャの準備が敎っおいるこずを意味したせん。



マむクロサヌビスは、倚くの点で、システムアヌキテクチャ自䜓よりもパッケヌゞングず運甚に関連する技術プロセスに関連しおいたす。 コンポヌネントの適切な境界は、゚ンゞニアリングシステムの䞻芁な課題の1぀のたたです。



サヌビスのサむズに関係なく、サヌビスがDockerコンテナにあるかどうかに関係なく、システムをどのように組み合わせるかに぀いお垞に慎重に怜蚎する必芁がありたす。 正しい答えはありたせんが、倚くの遞択肢がありたす。



翻蚳者からのPS



ブログもご芧ください。






All Articles