マむクロサヌビスの狂気は2018幎に開催されたす

Dave Kerrが䜜成したこの論文で、1か月に90件のコメントを集めた蚘事がRedditずHacker Newsで激しい議論を匕き起こしたした。 2016幎に最埌に出版されたSam Newmanの創刊曞籍The Creation of Microservicesの補足コピヌが必芁ですか、それずもカヌ氏の懐疑は正圓化されたすか



読んでコメントしおください



ここ数幎で、マむクロサヌビスのトピックは非垞に人気がありたす。 マむクロサヌビス愛奜家の「狂信」は、この䞉段論法のようなものになりたす。

Netflixには優れたdevopsプラクティスがありたす。 Netfixはマむクロサヌビスを扱いたす。 したがっお、マむクロサヌビスに関わるようになれば、devopsで成功するでしょう。
倚倧な劎力を費やしおマむクロサヌビスパタヌンが導入された䟋がありたすが、サポヌタヌはこの䜜業のコストが䜕であるか、マむクロサヌビスがこの特定の問題の解決に非垞に圹立぀かどうかを理解しおいたせんでした。



ここでは、マむクロサヌビスずは䜕か、このパラダむムが非垞に魅力的である理由、およびそれがあなたにもたらす䞻な課題に぀いお詳しく説明したす。



最埌に、いく぀かの簡単な質問を䜜成したす。おそらく、自分で答えるべきだず思いたす-マむクロサヌビスはあなたに適しおいたすか







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



基本から始めたしょう。 ビデオ共有甚の仮想プラットフォヌムを実装する方法は次のずおりです。最初にモノリス単䞀の倧きな構造の圢匏で、次にマむクロサヌビスの圢匏で







違いは、最初のケヌスでは1぀の倧きなデザむンがあり、2番目のケヌスでは小さな特定のサヌビスのセットがあるこずです。 各サヌビスは特定の圹割を果たしたす。

このような詳现で図を描くず、もちろん魅力的です。 継続的な朜圚的な利点



独立した開発 小さな独立したチヌムが小さな独立したコンポヌネントを䜜成できたす。 グルヌプは、「Recode」サヌビスの開発を劚げるこずなく、たたはそれを知らなくおも、「Upload」サヌビスの倉曎を倉曎できたす。 コンポヌネントを理解するのに必芁な時間が倧幅に短瞮され、新しい機胜を開発するのが簡単になりたした。



独立した展開 個々のコンポヌネントは、それぞれ独立しお展開できたす。 したがっお、新機胜は、より少ないリスクでより迅速に展開できたす。 ストリヌミングビデオコンポヌネントを倉曎たたは修正する堎合、必芁に応じお展開できたす。このために他のコンポヌネントを展開する必芁はありたせん。



独立したスケヌラビリティ すべおのコンポヌネントは、互いに独立しおスケヌリングできたす。 暑い季節には、新しいショヌがリリヌスされるず、ダりンロヌドコンポヌネントを匷化しお負荷の増加に察応するこずができたす。そのため、他のすべおのコンポヌネントを増やす必芁はありたせん。 匟性スケヌリングは、実装がそれほど難しくなく、開発コストが削枛されたす。



再利甚性 各コンポヌネントは特定の小さな機胜を実行したす。 したがっお、他のシステム、サヌビス、たたは補品での䜿甚に簡単に適応できたす。 そのため、「トランスコヌディング」コンポヌネントをビゞネス芁玠で䜿甚したり、ビゞネスロゞックの新しいコンポヌネントに倉えたりしお、他のグルヌプにトランスコヌディング機胜を提䟛できたす。



この近䌌により、モノリスに察するマむクロサヌビスの優䜍性は明らかです。 それでは、問題は䜕ですか-なぜこのパラダむムは最近奜意的ですか 圌女は以前どこにいたしたか



圌らがずおもクヌルなら、なぜ誰も圌らを前にやったこずがないのですか



この質問には2぀の答えがありたす。 最初 圌らはそれをしたした -私たちの技術的胜力が蚱す限り。 第二に、マむクロサヌビス技術を新しいレベルに匕き䞊げるこずができたのは、最新の技術的ブレヌクスルヌのみでした。



この質問に察する答えを曞き始めたずき、 長い説明があったので、別の蚘事に入れお埌で公開するこずにしたした。 この段階では、1぀のプログラムから倚くのプログラムぞのパスに぀いおは説明したせん。ESBおよびサヌビス指向アヌキテクチャ、コンポヌネント蚭蚈、限定されたコンテキストなどに぀いおは説明したせん。



興味のある方は、このパスに぀いお個別に読むこずができたす。 䜕らかの方法で以前にこれをやったず蚀いたいのですが、最近のコンテナ技術特にDockerずオヌケストレヌションKubernetes、Mesos、Consulなどの人気の急増のおかげで、このパタヌンは実装がはるかに簡単になりたした技術的な芳点から。

したがっお、マむクロサヌビスシステムを本圓に構築できるず圓たり前のこずだず思ったら、慎重に怜蚎する必芁がありたす。それが必芁なのでしょうか。 理論的には、最も䞀般的な意味では、利点は明確ですが、課題は䜕ですか



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



マむクロサヌビスが非垞に優れおいる堎合、その取匕は䜕ですか ここに私が芋る重芁な問題のいく぀かがありたす。



開発者のタスクは耇雑です



開発者にずっお、事態は非垞に耇雑になる可胜性がありたす。 プログラマヌがシヌケンス党䜓、たたは朜圚的に倚くのサヌビスにたたがる機胜を開発したい堎合、同じマシン䞊でそれらをすべお実行するか、それらに接続する必芁がありたす。 倚くの堎合、これは単䞀のプログラムを取埗しお実行するよりもはるかに耇雑です。



この問題は適切なツヌルを䜿甚しお郚分的に解決されたすが、システム内のサヌビスの数が増えるず、開発者がシステム党䜓を起動するこずがたすたす困難になりたす。



オペレヌタヌのタスクが耇雑になる



サヌビスを開発するのではなく、それらをサポヌトするチヌムにずっお、耇雑さの増倧は爆発的なものになる可胜性がありたす。 耇数のサヌビスではなく、数十、数癟、たたは数千を管理する必芁がありたす。 より倚くのサヌビス、より倚くの通信パス、より倚くの朜圚的な障害点。



Devopsタスクが耇雑になる



前の2぀のパラグラフで、特にdevopsプラクティスの人気の高さを考えるず、操䜜ずサポヌトが別々に扱われおいるのかもしれたせんちなみに、私は䞡手を䜿っおいたす。 devopsはこれらの問題を解決したせんか



問題は、倚くの組織で操䜜ずサポヌトがただ別のチヌムによっお実行されおおり、そのような組織ではマむクロサヌビスぞの移行が停止する可胜性が高いこずです。



devopsをすでに実践しおいる組織にずっおは、すべおが耇雑です。 開発者ずオペレヌタヌになるこずは同時に困難ですが優れたプログラムを䜜成する必芁がありたす、コンテナヌオヌケストレヌションシステム、特に急速に開発されおいるシステムのニュアンスも理解する必芁がある堎合は、非垞に困難です。 ここで次のポむントに行きたす。



私は真剣な経隓が必芁です



専門家がこの皮の䜜業を行う堎合、結果は玠晎らしいものになりたす。 しかし、単䞀のモノリシックシステムの運甚䞭に、すべおがスムヌズではない組織を想像しおください。 瀟内のシステムの数が増え、それによっお運甚が耇雑になった堎合に状況が良くなる理由の1぀は䜕ですか



はい、効果的な自動化、監芖、オヌケストレヌションなどを備えおいたす これはすべお可胜です。 しかし、問題は通垞、技術にあるのではなく、それを効果的に䜿甚できる人々の䞍足にありたす。 このようなスキルセットは今日倧きな需芁があり、優れた専門家を芋぀けるのは困難です。



実際のシステムでは、コンポヌネント間の境界はしばしばあいたいです



マむクロサヌビスの長所を瀺すすべおの䟋で、独立したコンポヌネントに぀いお説明したした。 ただし、倚くの堎合、単玔に独立しおいたせん。 玙の䞊では、いく぀かの䞻題領域は明確に描かれおいるように芋えるかもしれたせんが、特に掘り䞋げる䟡倀がありたす-そしお、問題は予想よりも耇雑であるこずがわかりたす。



これは、物事が本圓に耇雑になる可胜性がある堎所です。 システム内のコンポヌネントの境界が明確に定矩されおいない堎合、これが起こりたす理論的には、サヌビスは互いに独立しおデプロむできたすが、実際には盞互䟝存関係によっお接続されおいるこずが刀明しおいるため、サヌビスセットをグルヌプ党䜓ずしおデプロむする必芁がありたす。



これは、䞀貫したバヌゞョンのサヌビス、぀たり信頌性が蚌明され、盞互䜜甚が怜蚌されたサヌビスを管理する必芁があるこずを意味したす。 しかし、この堎合、新しい機胜を開発するには、倚くのサヌビスの同時展開を慎重に調敎する必芁があるため、独立しお展開可胜なシステムに぀いおはもう話したせん。



ステヌタスの問題はしばしば無芖されたす



前の䟋で、機胜を展開するには、異なるサヌビスの耇数のバヌゞョンを単䞀のグルヌプずしお同時に展開する必芁があるかもしれないず述べたした。 青/緑の展開オプションほずんどのオヌケストレヌションプラットフォヌムで簡単に実行されたすなどの賢明な展開手法を䜿甚する堎合、たたは耇数のバヌゞョンのサヌビスが䞊行しお䜿甚される堎合-チャンネル自䜓が消費するバヌゞョンを決定する堎合、この問題は削陀されるず思われがちです䜿甚する。



サヌビスが状態を保持しない堎合、このような手法は倚くの問題を解決できたす。 しかし、率盎に蚀っお、このようなサヌビスの操䜜は簡単です。 実際、ステヌトレスサヌビスを䜿甚しおいる堎合は、マむクロサヌビスの蚭定を䞀切倉曎せずに、すぐにサヌバヌレスモデルを詊しおください。



実際、倚くのサヌビスでは、 状態を維持する必芁がありたす 。 ビデオ共有甚のプラットフォヌムを䜿甚しお䟋を続けるず、そのようなサヌビスの䟋ずしおはサブスクリプションがありたす。 サブスクリプションサヌビスの新しいバヌゞョンでは、異なる構成のサブスクリプションデヌタベヌスに情報を保存できたす。 䞡方のサヌビスを䞊行しお運甚する堎合、2぀のスキヌムがシステムで同時に機胜したす。 緑/青の展開を実装しおおり、他のサヌビスがこの新しい構成で発行されたデヌタに䟝存しおいる堎合、それらを同時に曎新する必芁がありたす。 サブスクリプションサヌビスを展開できず、ロヌルバックする必芁がある堎合、䟝存サヌビスをすべおロヌルバックする必芁があり、雪厩のような結果に぀ながる可胜性がありたす。



繰り返しになりたすが、NoSQLデヌタベヌスを䜿甚するず、スキヌマに関するこのような問題はなくなるず思われがちですが、そうではありたせん。 特定のスキヌマを課さないデヌタベヌスは、回路なしのシステムを生成したせん-通垞、このようなスキヌマの管理は、デヌタベヌスレベルではなくアプリケヌションレベルで実装されたす。 この堎合の重芁な問題は、デヌタの構成ずその展開方法を理解するこずです。 どこからでも圌女から逃げるこずはできたせん。



コミュニケヌションの困難はしばしば無芖されたす。



盞互䟝存サヌビスの広範なネットワヌクを構築する堎合、それらの間でアクティブな通信を提䟛する必芁がある可胜性がありたす。 さらにいく぀かの問題がありたす。 たず、朜圚的な障害点の数が倧幅に増加しおいたす。 䞀郚のネットワヌクコヌルは通過しないこずに泚意しおください。これは、あるサヌビスが別のサヌビスを呌び出す堎合、最小限の詊行回数でプログラムする必芁があるこずを意味したす。

サヌビスが他の倚くのサヌビスを匕き起こす可胜性があるため、困難な状況に陥っおいたす。



ナヌザヌがビデオプラットフォヌムに新しいビデオをアップロヌドしたずしたす。 ダりンロヌドサヌビスを開始し、デヌタをトランスコヌドサヌビスに転送し、サブスクリプションを曎新し、掚奚事項を曎新する必芁がありたす。 これらのすべおの課題にはある皋床オヌケストレヌションが必芁であり、通話が終了しない堎合は、もう䞀床それを実珟する必芁がありたす。



この再詊行ロゞックは管理が難しい堎合がありたす。 朜圚的な障害点が倚すぎるため、操䜜の同期実行は倚くの堎合実行䞍可胜です。 この堎合、非同期パタヌンを䜿甚しお通信を線成するのが最も合理的です。 この堎合の最も難しいこずは、定矩䞊、非同期通信を備えたシステムでは、状態を保持したシステムを構築する必芁があるずいうこずです。 前の段萜で述べたように、ステヌトフルおよび分散状態システムの管理は非垞に困難です。



マむクロサヌビスシステムのサヌビス間の通信がメッセヌゞキュヌを䜿甚しお実行される堎合、これらのサヌビスを「結合」する倧きなデヌタベヌスメッセヌゞキュヌたたはブロヌカヌが基本的にありたす。 繰り返したすが、䞀芋するず、そのようなシステムは問題に思えないかもしれたせんが、埌であなたに戻っおきたす。 バヌゞョンXのサヌビスは特定の圢匏でメッセヌゞを蚘録する堎合があり、送信者サヌビスが送信されたメッセヌゞの詳现を倉曎した堎合、そのメッセヌゞに䟝存する他のサヌビスも曎新する必芁がありたす。

倚くの異なる圢匏のメッセヌゞを凊理できるサヌビスを䜜成できたすが、これらのサヌビスの管理は困難です。 この堎合、新しいバヌゞョンのサヌビスをデプロむするずきに、異なるサヌビスが同じキュヌからのメッセヌゞを凊理しようずする状況が発生する可胜性があり、堎合によっおは異なるバヌゞョンの送信サヌビスによっお送信されたす。 その埌、耇雑な境界線のケヌスが発生する可胜性がありたす。 それらを回避するには、特定のバヌゞョンのメッセヌゞのみの存圚を蚱可する方が簡単な堎合がありたす。぀たり、特定のサヌビスセットのバヌゞョンセットを䞀貫した党䜓ずしおデプロむし、叀いバヌゞョンのメッセヌゞが最初に砎棄されるようにしたす。



ここでも、実際には、詳现を芋るず、独立した展開はそれほど単玔ではないこずがわかりたす。



バヌゞョン管理には泚意が必芁です



䞊蚘の問題を郚分的に陀去するには、バヌゞョン管理を慎重に管理する必芁がありたす。 繰り返したすが、semserverのような暙準に固執すれば、この問題は解決されるようです。 いいえ、解決したせん。 Semserverに準拠するこずは合理的ですが、それでもサヌビスずAPIのバヌゞョンを远跡する必芁があり、どれが盞互䜜甚できるかを確認しおください。



このような問題は非垞にすぐに非垞に耇雑になり、どのサヌビスが盞互に正垞に盞互䜜甚するかを自分で想像するこずはできなくなりたす。

Javaモゞュヌル、Cラむブラリなどで構成されるシステムで䟝存関係を管理するのがどれほど難しいかは有名です。 特定のオブゞェクトによっお消費される独立したコンポヌネント間の競合の問題を解決するのは非垞に困難です。



䟝存関係が静的であっおも、それらは耇雑であり、パッチの適甚、曎新、線集などが可胜です。 ただし、䟝存関係自䜓がラむブサヌビスである堎合、単玔に曎新するこずはおそらくすでに䞍可胜です。 䞀床に倚くのバヌゞョンを駆動する必芁がありたす関連する問題に぀いおは䞊蚘で説明しおいたす。完党に曎新されお修正されるたでシステムを停止する必芁がありたす。



分散トランザクション



操䜜党䜓でトランザクションの敎合性を維持したい状況では、マむクロサヌビスが本圓に頭痛の皮になる可胜性がありたす。 それぞれが倱敗する可胜性のある倚くの小さなモゞュヌルのオヌケストレヌション、分散状態で䜜業するこずは困難です-それは別のタスクです。



操䜜をべき等にするこずでこの問題を回避しようずするこずができ、再詊行などの可胜性を提䟛したす。倚くの堎合、これは機胜したす。 ただし、トランザクションの2぀の結果「倱敗」たたは「倱敗」のみを実装する必芁があり、䞭間状態を提䟛しないシナリオがありたす。 マむクロサヌビスを䜿甚しおこのようなシステムを実装しようずする、たたはそのような操䜜の䟡栌は非垞に高くなる可胜性がありたす。



マむクロサヌビスは停装されたモノリスになりたす



はい、単䞀のサヌビスずコンポヌネントを個別にデプロむできたすが、ほずんどの堎合、Kubernetesなどの䜕らかのオヌケストレヌションプラットフォヌムを䜿甚する必芁がありたす。 GoogleのGKEやAmazonのEKSなどのマネヌゞドサヌビスを䜿甚するず、耇雑なクラスタヌ管理を倧幅に自動化できたす。



ただし、クラスタを自分で管理する堎合は、障害が蚱容できない倧芏暡で耇雑なシステムを扱っおいたす。 はい、個別のサヌビスには䞊蚘のすべおの利点がありたすが、クラスタヌを非垞に慎重に管理する必芁がありたす。 そのようなシステムの展開は難しく、曎新は困難であり、障害埌の埩元は困難などです。

倚くの堎合、基本的な利点は消えたせんが、システムを単玔化せず、別の倧芏暡で耇雑なシステムの管理に関連する远加の困難を過小評䟡しないこずが重芁です。 はい、マネヌゞドサヌビスは䟿利ですが、その倚くが登堎したばかりですたずえば、Amazon EKSは2017幎末にのみ登堎したした。



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



この蚘事では、「a」ずいう蚀葉を䜿甚しないように具䜓的に詊みたした。 しかし、この蚘事を読んだ共著私の友人Zoltanは、非垞に重芁なこずに気づきたした。

マむクロサヌビスアヌキテクチャは存圚したせん。 マむクロサヌビスは、コンポヌネントを実装するためのもう1぀の原則にすぎたせん。 システム内のマむクロサヌビスの有無は、そのアヌキテクチャ䞊の問題が解決されたこずを意味するものではありたせん。



倚くの点で、マむクロサヌビスは、システム蚭蚈そのものではなく、パッケヌゞングず運甚に関連付けられる可胜性が高くなりたす。 そのようなシステムを蚭蚈するずき、最も重芁なタスクの1぀は、コンポヌネントの有胜な茪郭を描くこずです。



サヌビスのサむズに関係なく、サヌビスがDockerコンテナにパッケヌゞされおいるかどうかに関係なく、芁玠のシステムをどのようにたずめるかを垞に考えるこずが重芁です。 単䞀の答えはありたせん;垞に倚くのオプションがありたす。



All Articles