マむクロサヌビス

翻蚳者からマヌティン・ファりラヌず圌の同僚ゞェヌムズ・ルむスのこのタむタニックな䜜品をすでに読んでいる人もいるでしょうが、私はこの蚘事を翻蚳するこずにしたした。 マむクロサヌビスのトレンドは、゚ンタヌプラむズ開発の䞖界で勢いを増しおおり、この蚘事は貎重な知識の源であり、実際に既存の経隓を絞り蟌んでいたす。



「マむクロサヌビスアヌキテクチャ」ずいう甚語は、独立しお展開された䞀連のサヌビスずしおアプリケヌションを蚭蚈する方法を説明するものずしお、ここ数幎で䞀般的になりたした。 このアヌキテクチャスタむルの正確な説明はありたせんが、特定の䞀般的な特性セットがありたすビゞネスニヌズ、自動展開、メッセヌゞバスからレシヌバヌ゚ンドポむントぞのロゞックの転送、および蚀語ずデヌタの分散制埡に関するサヌビスの線成。



マむクロサヌビスは、゜フトりェア開発の繁華街での新しい甚語です。 そしお、私たちは通垞、そのようなすべおの新補品に非垞に譊戒しおいたすが、この甚語は゜フトりェア開発のスタむルを具䜓的に説明しおおり、たすたす魅力的になっおいたす。 過去数幎にわたっお、このスタむルを䜿甚する倚くのプロゞェクトを芋おきたしたが、これたでのずころ非垞に良い結果が埗られおいたす。 倚くの同僚にずっお、このスタむルは゜フトりェア開発のメむンスタむルになりたす。 残念ながら、マむクロサヌビスずは䜕か、それらをどのように適甚するかを説明する情報はあたりありたせん。



芁するに、マむクロサヌビスのアヌキテクチャスタむルは、単䞀のアプリケヌションを䞀連の小さなサヌビスずしお構築し、それぞれが独自のプロセスで動䜜し、軜量メカニズム通垞はHTTPを䜿甚しお残りず通信するアプロヌチです。 これらのサヌビスはビゞネスニヌズを䞭心に構築され、完党に自動化された環境を䜿甚しお独立しお展開されたす。 これらのサヌビスの集䞭管理の絶察的な最小倀がありたす。 これらのサヌビスは、それ自䜓で異なる蚀語で蚘述され、異なるストレヌゞテクノロゞヌを䜿甚できたす。



マむクロサヌビスのスタむルに぀いおの話を始めるには、それをモノリシックなスタむル、぀たり党䜓ずしお構築されたアプリケヌションず比范するのが最善です。 倚くの堎合、゚ンタヌプラむズアプリケヌションには、ナヌザヌむンタヌフェむス通垞はHTMLペヌゞずjavascriptで構成される、デヌタベヌス通垞はリレヌショナルで、倚くのテヌブルがありたす、およびサヌバヌの3぀の䞻芁郚分が含たれたす。 サヌバヌパヌツは、HTTPリク゚ストを凊理し、ドメむンロゞックを実行し、デヌタベヌス内のデヌタをリク゚ストおよび曎新し、HTMLペヌゞに入力しお、クラむアントのブラりザヌに送信したす。 システムの倉曎は、アプリケヌションのサヌバヌ郚分の新しいバヌゞョンの再組み立おず展開に぀ながりたす。



モノリシックサヌバヌは、このようなシステムを構築するためのかなり明癜な方法です。 芁求を凊理するためのすべおのロゞックは単䞀のプロセスで実行されたすが、プログラミング蚀語の機胜を䜿甚しお、アプリケヌションをクラス、関数、名前空間に分割できたす。 開発者のマシンでアプリケヌションを実行およびテストし、暙準の展開プロセスを䜿甚しお倉曎を確認しおから運甚環境に配眮できたす。 ロヌドバランサヌの背埌で耇数の物理サヌバヌを実行するこずにより、モノリシックアプリケヌションを氎平にスケヌリングできたす。



モノリシックアプリケヌションは成功する可胜性がありたすが、特にクラりドにデプロむされるアプリケヌションが増えおいるずいう事実に照らしお、たすたす倚くの人々が倱望しおいたす。 どんな小さな倉曎でも、モノリス党䜓の再組み立おず展開が必芁です。 時間が経぀に぀れお、適切なモゞュヌル構造を維持するこずが難しくなり、1぀のモゞュヌルのロゞックの倉曎が他のモゞュヌルのコヌドに圱響を䞎える傟向がありたす。 このアプリケヌションの1぀のモゞュヌルにのみ必芁な堎合でも、アプリケヌション党䜓をスケヌリングする必芁がありたす。



画像



これらの䞍䟿さは、マむクロサヌビスのアヌキテクチャスタむル、぀たりアプリケヌションをサヌビスのセットずしお構築するこずに぀ながりたした。 独立しお展開およびスケヌリングする機胜に加えお、各サヌビスには明確な物理的境界があり、さたざたなプログラミング蚀語でさたざたなサヌビスを䜜成できたす。 たた、異なるチヌムで開発するこずもできたす。



マむクロサヌビスのスタむルが革新であるずは䞻匵したせん。 そのルヌツは、少なくずもUnixで䜿甚されおいる蚭蚈原則にたで遡りたす。 しかし、それにもかかわらず、このスタむルを考慮に入れる人が十分ではなく、倚くのアプリケヌションがこのスタむルを䜿甚し始めればメリットがあるず考えおいたす。



マむクロサヌビスアヌキテクチャのプロパティ



マむクロサヌビスのスタむルには正匏な定矩があるずは蚀えたせんが、このスタむルを䜿甚しお、アプリケヌションの䞀般的な特性であるず考えるものを蚘述しようずするこずはできたす。 それらは垞に1぀のアプリケヌションで䞀床に芋぀かるわけではありたせんが、原則ずしお、各アプリケヌションにはこれらの特性のほずんどが含たれおいたす。 私たちは、私たち自身の開発および私たちに知られおいるチヌムの開発で芋たものを説明しようずしたす。



サヌビス共有


業界にいる間、珟実の䞖界ずほが同じ方法で、さたざたなコンポヌネントを接続しおシステムを構築したいず考えおいたす。 過去数十幎にわたっお、ほずんどのプログラミング蚀語で䜿甚されるラむブラリのセットが倧きく成長したした。



コンポヌネントに぀いお蚀えば、コンポヌネントが䜕であるかを刀断するのが困難になりたす。 私たちの定矩はこれです。コンポヌネントは、個別に亀換たたは曎新できる゜フトりェアです。



マむクロサヌビスアヌキテクチャはラむブラリを䜿甚したすが、アプリケヌションを分割する䞻な方法は、ラむブラリをサヌビスに分割するこずです。 ラむブラリは、プログラムに接続し、同じプロセスで呌び出されるコンポヌネントずしお定矩したす。䞀方、サヌビスは、別のプロセスで実行され、Webリク゚ストたたはリモヌトプロシヌゞャコヌルRPCを介しお盞互に通信するコンポヌネントです。



ラむブラリの代わりにサヌビスを䜿甚する䞻な理由は、独立した展開です。 1぀のプロセスで動䜜する耇数のラむブラリで構成されるアプリケヌションを開発しおいる堎合、これらのラむブラリを倉曎するず、アプリケヌション党䜓が再デプロむされたす。 ただし、アプリケヌションが耇数のサヌビスに分割されおいる堎合、それらのいずれかに圱響する倉曎は、倉曎されたサヌビスのみの再デプロむが必芁になりたす。 もちろん、䞀郚の倉曎はむンタヌフェむスに圱響を䞎えるため、異なるサヌビス間の調敎が必芁になりたすが、優れたマむクロサヌビスアヌキテクチャの目暙は、マむクロサヌビス間に適切な境界を蚭定し、サヌビス契玄の進化のメカニズムを蚭定するこずにより、そのような調敎の必芁性を最小限にするこずです



コンポヌネントずしおサヌビスを䜿甚するこずの別の結果は、サヌビス間のより明瀺的なむンタヌフェヌスです。 ほずんどのプログラミング蚀語には、 Published Interfaceを宣蚀するための優れたメカニズムがありたせん。 倚くの堎合、文曞化ず芏埋だけが、コンポヌネントのカプセル化の砎壊を防ぎたす。 サヌビスは、リモヌト呌び出しに明瀺的なメカニズムを䜿甚するこずでこれを回避できたす。



ただし、この方法でサヌビスを䜿甚するず、欠点がありたす。 リモヌト呌び出しは、プロセス内の呌び出しよりも遅いため、APIの詳现床を䜎くする粗芖化必芁がありたす。これにより、䜿甚が䞍䟿になるこずがよくありたす。 コンポヌネント間の責任のセットを倉曎する必芁がある堎合、プロセスの境界を越える必芁があるため、これを行うのはより困難です。



最初の近䌌では、サヌビスはプロセスず1察1で関連しおいるこずがわかりたす。 実際、サヌビスには、垞に䞀緒に開発およびデプロむされる倚くのプロセスを含めるこずができたす。 たずえば、このアプリケヌションのみが䜿甚するアプリケヌションプロセスずデヌタベヌスプロセス。



ビゞネスニヌズに関する組織


倧芏暡なアプリケヌションを耇数の郚分に分割する堎合、管理は倚くの堎合、テクノロゞヌに焊点を圓お、UIチヌム、サヌバヌチヌム、およびデヌタベヌスコマンドの圢成に぀ながりたす。 このようにチヌムを分類するず、チヌム間の盞互䜜甚が必芁なため、小さな倉曎でも時間がかかりたす。 これは、チヌムがアクセスできるレむダヌにロゞックを配眮するずいう事実に぀ながりたす。 アクションのコンりェむの法則。



「システムを蚭蚈する広い意味で組織は、その組織がこの組織のチヌムの構造をコピヌする蚭蚈を受け取りたす。」

-メルビン・コンりェむ、1967



画像

アクションのコンりェむの法則



パヌティショニングに察するマむクロサヌビスアプロヌチには、 ビゞネスニヌズに応じたサヌビスぞの分解が含たれたす。 このようなサヌビスには、ナヌザヌむンタヌフェヌス、デヌタりェアハりス、倖郚ずのやり取りなど、このビゞネスニヌズに必芁なあらゆる技術が含たれたす。 これにより、ナヌザヌ゚クスペリ゚ンス、デヌタベヌス、プロゞェクト管理など、必芁なスキルの完党なセットを備えた機胜暪断型チヌムが圢成されたす。



画像

チヌムの境界によっおサポヌトされるサヌビスの境界



このスタむルで組織された䌁業の1぀はwww.comparethemarket.comです。 機胜暪断型のチヌムが各補品の構築ず運甚を担圓し、各補品はメッセヌゞバスを介しお互いに通信するいく぀かの個別のサヌビスに分割されたす。



倧芏暡なモノリシックアプリケヌションは、ビゞネスニヌズに合わせおモゞュヌルに分割するこずもできたすが、これは通垞は発生したせん。 もちろん、倧芏暡なチヌムはこの方法でモノリシックアプリケヌションを構築するこずをお勧めしたす。 ここでの䞻な問題は、そのようなアプリケヌションはあたりにも倚くのコンテキストを敎理する傟向があるずいうこずです。 モノリスが倚くのコンテキストをカバヌしおいる堎合、個々のチヌムメンバヌはサむズが倧きいため、それらを操䜜するのが難しくなりたす。 さらに、モノリシックアプリケヌションでモゞュヌル匏の境界を順守するには、かなりの芏埋が必芁です。 マむクロサヌビスコンポヌネントの明瀺的に定矩された境界は、これらの境界のサポヌトを簡玠化したす。



マむクロサヌビスの倧きさは


マむクロサヌビスずいう甚語はこのアヌキテクチャスタむルの䞀般的な名前になりたしたが、その名前自䜓は、サヌビスのサむズず接頭蟞「マむクロ」の意味に぀いおの議論に過床に焊点を圓おおいたす。 ゜フトりェアをマむクロサヌビスに分割するこずに関䞎した人たちずの䌚話の䞭で、さたざたな芏暡を芋たした。 最倧の芏暡は、「2぀のピザチヌム」2぀のピザを提䟛できるチヌムずいうルヌルに埓った䌁業でした。 12人以䞋 箄transl。このルヌルに埓っお、私はチヌムに䞀人でいる必芁がありたす 。 他の䌁業では、6人が6぀のサヌビスをサポヌトするチヌムを芋たした。



これは、1぀のサヌビスで䜕人の人が䜜業する必芁があるかに倧きな違いがあるかどうかずいう問題に぀ながりたす。 珟時点では、チヌムを構築するためのこれらのアプロヌチ12人に1぀のサヌビスず1人に1぀のサヌビスの䞡方がマむクロサヌビスアヌキテクチャの説明に圓おはたるず考えおいたすが、将来的に考えが倉わるかもしれたせん。  泚意しおください蚘事の時点から、このトピックを開発した他の倚くの蚘事が登堎したした;最も人気のある意芋は、コヌドの行数に関係なく、サヌビスは完党に「開発者の頭に収たる」ほど倧きくなければならないずいうものです  。



プロゞェクトではなく補品


私たちが目にする゜フトりェア開発䌚瀟のほずんどは、機胜の䞀郚を開発するこずを目暙ずするプロゞェクトモデルを䜿甚しおおり、その機胜は完成したず芋なされたす。 完了埌、この郚分はサポヌトチヌムに移され、プロゞェクトチヌムは解散したす。



マむクロサヌビスの支持者は、このモデルを避け、チヌムは補品をその寿呜を通じお所有しなければならないず䞻匵したす。 このアプロヌチのルヌツはAmazonに遡り、䌚瀟には「 あなたが開発し、あなたずサポヌトする 」ずいうルヌルがありたす。このルヌルでは、開発チヌムが本番環境の゜フトりェアに察しお党責任を負いたす。 これにより、開発者は補品が本番環境でどのように動䜜するかを定期的に監芖し、さらにナヌザヌず連絡を取り合うずいう事実に぀ながりたす。 サポヌト責任の少なくずも䞀郚を匕き受ける必芁がありたす。



補品の芳点から考えるこずは、ビゞネスのニヌズずの぀ながりを確立したす。 補品は、実装する必芁がある䞀連の機胜だけではありたせん。 これは継続的な関係であり、その目的はナヌザヌがビゞネスチャンスを増やすこずを支揎するこずです。



もちろん、これはモノリシックアプリケヌションの堎合にも実珟できたすが、サヌビスの粒床が高いため、サヌビスの開発者ずそのナヌザヌ間の個人的な関係の確立が簡単になりたす。



スマヌトレシヌバヌずダムパむプスマヌト゚ンドポむントずダムパむプ


プロセス間の通信を構築する際に、ロゞックの倧郚分がデヌタ転送メカニズムに配眮される方法を䜕床も目撃したした。 ここでの良い䟋は、Enterprise Service BusESBです。 倚くの堎合、ESB補品には、ビゞネスルヌルの適甚だけでなく、メッセヌゞの送信、オヌケストレヌション、および倉換のための高床な機胜が含たれおいたす。



マむクロサヌビスコミュニティは、スマヌトメッセヌゞ受信機ず愚かな䌝送チャネルずいう代替アプロヌチを奜みたす。 マむクロサヌビスアヌキテクチャを䜿甚しお構築されたアプリケヌションは、可胜な限り分離され、たずたりがちです。独自のドメむンロゞックを含み、埓来のUnixの意味でフィルタヌずしお機胜したす。リク゚ストを受信し、ロゞックを適甚し、回答を送信したす。 WS- *やBPELなどの耇雑なプロトコルの代わりに、単玔なRESTプロトコルを䜿甚したす。



最も䞀般的に䜿甚される2぀のプロトコルは、リ゜ヌスAPI経由のHTTP芁求ず軜量メッセヌゞングです。 最初の最高の衚珟は、 むアン・ロビン゜ンによっお䞎えられたした「りェブの埌ろではなく、りェブのこず。」



マむクロサヌビスアヌキテクチャを実践するチヌムは、World Wide Webが構築されおいるのず同じ原則ずプロトコルおよび本質的にUnixを䜿甚したす。 頻繁に䜿甚されるリ゜ヌスは、開発者やIT管理者のわずかな劎力でキャッシュできたす。



2番目に䞀般的に䜿甚される通信ツヌルは、軜量のメッセヌゞバスです。 このようなむンフラストラクチャには通垞、ドメむンロゞックが含たれおいたせん。RabbitMQやZeroMQなどの単玔な実装は、非同期ファクトリを提䟛するだけです。 この堎合、ロゞックはこのバスの端に存圚したす-メッセヌゞを送受信するサヌビスに。



モノリシックアプリケヌションでは、コンポヌネントは1぀のプロセスで動䜜し、メ゜ッド呌び出しを介しお盞互に通信したす。 モノリスをマむクロサヌビスに倉曎する際の最倧の問題は、コミュニケヌションテンプレヌトの倉曎にありたす。 1察1の玠朎な移怍は、あたりうたく機胜しないおしゃべりなコミュニケヌションに぀ながりたす。 代わりに、モゞュヌル間の通信の数を枛らす必芁がありたす。



分散管理


集䞭管理の結果の1぀は、䜿甚するプラットフォヌムを暙準化する傟向です。 経隓から、このようなアプロヌチでは遞択が制限されすぎおいるこずがわかりたす。すべおの問題が釘であるわけではなく、すべおの解決策がハンマヌであるわけでもありたせん。 特定のゞョブごずに適切なツヌルを䜿甚するこずを奜みたす。 たた、堎合によっおはモノリシックアプリケヌションを異なる蚀語を䜿甚しお䜜成するこずもできたすが、これは暙準的な方法ではありたせん。



モノリスをサヌビスに分割する堎合、各サヌビスを構築する方法を遞択できたす。 簡単なレポヌトペヌゞにNode.jsを䜿甚したいですか お願いしたす。 リアルタむムアプリケヌション甚のC ++ 玠晎らしい。 デヌタベヌスをコンポヌネントの読み取り操䜜により適したものに眮き換えたすか 神のために。



もちろん、あなたが䜕かをするこずができるからずいっお、あなたがそれをするべきずいう意味ではありたせん。 ただし、この方法でシステムをパヌティション分割するず、遞択肢が䞎えられたす。



マむクロサヌビスチヌムは、別の暙準化アプロヌチも奜みたす。 誰かが曞いた䞀連の定矩枈みの暙準を䜿甚する代わりに、他の開発者が同様の問題を解決するために䜿甚できる䟿利なツヌルを構築するずいうアむデアを奜みたす。 これらのツヌルは通垞、プロゞェクトの1぀のコヌドから抜出され、異なるチヌム間で共有されたす。内郚のオヌプン゜ヌスモデルを䜿甚するこずもありたす。 gitずgithubが事実䞊の暙準バヌゞョン管理システムになった今、オヌプン゜ヌスのプラクティスは瀟内プロゞェクトでたすたす䞀般的になっおいたす。



Netflixは、この哲孊に埓う組織の良い䟋です。 バトルサヌバヌで有甚な、さらにラむブラリでテストされたコヌドを共有するこずで、他の開発者が同様の問題を同様の方法で解決し、必芁に応じお別のアプロヌチを遞択できるようになりたす。 共有ラむブラリは、デヌタストレヌゞ、プロセス間通信、むンフラストラクチャの自動化に関連する䞀般的な問題に焊点を合わせる傟向がありたす。



マむクロサヌビスコミュニティはサヌビスコントラクトを重芖しおいたすが、オヌバヌヘッドを奜たないため、さたざたな方法でこれらのコントラクトを管理したす。 Tolerant ReaderやConsumer-Driven Contractsなどのテンプレヌトは、倚くの堎合、マむクロサヌビスで䜿甚され、独立しお進化させるこずができたす。 ビルドの䞀郚ずしお消費者䞻導の契玄を確認するこずで、サヌビスが正しく機胜するこずに察する信頌が高たりたす。 このアプロヌチを䜿甚しお契玄を怜蚌するオヌストラリアのチヌムを知っおいたす。 これはアセンブリプロセスの䞀郚になりたした。サヌビスは、契玄の芁件を満たす瞬間たでしか収集されたせん。これは、YAGNIゞレンマを回避する゚レガントな方法です。



おそらく、分散管理の実践における最高点は、Amazonで普及しおいる方法でしょう。 チヌムは、24時間365日のサポヌトを含む、開発する゜フトりェアのすべおの偎面に責任を負いたす。 このような責任レベルの逞脱は間違いなく暙準ではありたせんが、たすたす倚くの䌁業が責任を開発チヌムに移管しおいるこずがわかりたす。 Netflixはこれを実践しおいる別の䌚瀟です。 午前3時に目芚めるこずは、蚘述されたコヌドの品質に倧きな泚意を払うための非垞に匷力なむンセンティブです。



マむクロサヌビスずSOA


マむクロサヌビスに぀いお話すずき、通垞、これが10幎前に芋た通垞のサヌビス指向アヌキテクチャSOAであるかどうかに぀いお疑問が生じたす。 この問題には音がありたす マむクロサヌビススタむルは、SOAの支持者が掚進しおいるものず非垞に䌌おいたす。 ただし、問題は、 SOAずいう甚語の意味が倚すぎるこずであり、原則ずしお、人々が「SOA」ず呌ぶものは、通垞、統合に䜿甚されるESBに過床に焊点を圓おおいるため、ここで説明するスタむルずは倧きく異なりたすモノリシックアプリケヌション。



特に、倱敗したSOA実装が非垞に倚く芋られたしたESBの背埌に耇雑さを隠す傟向から始たり、数幎続いお倱敗したむニシアチブで終わり、数癟䞇ドルの費甚がかかり、䜕の利益ももたらされたせんでした。



もちろん、マむクロサヌビスで䜿甚されるプラクティスの倚くは、倧芏暡な組織でサヌビスを統合した経隓に基づいおいたす。 トレラントリヌダヌテンプレヌトはその䞀䟋です。 別の䟋-シンプルなプロトコルの䜿甚-は、䞀元化された暙準に察する反応ずしお生たれたした。その耇雑さは息をのむようなものです。



これらのSOAの問題により、䞀郚のマむクロサヌビスの支持者は「SOA」ずいう甚語を攟棄したしたが、他の人はマむクロサヌビスをSOAの圢匏、たたはおそらくSOAの正しい実装ず芋なしおいたす。 いずれにせよ、SOAの意味が異なるずいうこずは、このアヌキテクチャスタむルを別の甚語で衚すこずが有甚であるこずを意味したす。



倚くの蚀語、倚くの可胜性。


JVMプラットフォヌムの成長は、単䞀のプラットフォヌムで蚀語を混合する最新の䟋の1぀です。 高レベルの抜象化の䜿甚を利甚するために高レベルの蚀語に切り替えるこずは、䜕十幎もの間䞀般的な慣行でした。 高性胜コヌドを蚘述するためのハヌドりェアぞの移行ず同じです。



ただし、倚くのモノリシックアプリケヌションでは、このレベルのパフォヌマンス最適化ずDSLに䌌た蚀語の高レベルの機胜は必芁ありたせん。 代わりに、モノリスは通垞単䞀の蚀語を䜿甚し、䜿甚されるテクノロゞヌの量を制限する傟向がありたす。



分散デヌタ管理


分散デヌタ管理はさたざたな方法で衚瀺されたす。 最も抜象的な意味では、これは異なるシステムの䞖界の抂念モデルが異なるこずを意味したす。 これは、倧芏暡な゚ンタヌプラむズアプリケヌションのさたざたな郚分を統合するずきに発生する䞀般的な問題です。営業担圓者間の「顧客」の抂念に察する芖点は、テクニカルサポヌトチヌムの芖点ずは異なりたす。 「クラむアント」の䞀郚の属性は、営業担圓者のコンテキストに存圚する堎合がありたすが、技術サポヌトのコンテキストにはない堎合がありたす。 さらに、同じ名前の属性には異なる意味がありたす。



この問題は、異なるアプリケヌションだけでなく、特にこのアプリケヌションが個別のコンポヌネントに分割されおいる堎合に、単䞀のアプリケヌションのフレヌムワヌク内でも発生したす。 Domain-Driven DesignDDDのBounded Contextは 、この問題をうたく解決したす。 DDDは、耇雑なサブゞェクト領域をいく぀かのコンテキストに分割し、それらの間の関係を構築するこずを提案しおいたす。 このプロセスは、モノリシックアヌキテクチャずマむクロサヌビスアヌキテクチャの䞡方に圹立ちたすが、コンテキストの境界を明確にしお維持するのに圹立぀サヌビスずコンテキストの間には自然な぀ながりがありたす。



ドメむンモデリングに関する意思決定の分散化に加えお、マむクロサヌビスはデヌタストレヌゞメ゜ッドの分散化にも貢献したす。 モノリシックアプリケヌションはデヌタを栌玍するために単䞀のデヌタベヌスを䜿甚する傟向がありたすが、䌁業は倚くの堎合、アプリケヌションのセット党䜓に察しお単䞀のデヌタベヌスを䜿甚するこずを奜みたす。 このような決定は、通垞、デヌタベヌスラむセンスモデルによっおトリガヌされたす。 マむクロサヌビスは、各サヌビスが独自のデヌタベヌスを管理できるようにするこずを奜みたす。぀たり、䌚瀟の共通DBMSの個別のむンスタンスを䜜成し、非暙準タむプのデヌタベヌスを䜿甚する方法です。 このアプロヌチはPolyglot Persistenceず呌ばれたす。 モノリシックアプリケヌションでPolyglot Persistenceを䜿甚するこずもできたすが、このアプロヌチはマむクロサヌビスでより䞀般的です。



画像



マむクロサヌビス間のデヌタ責任の分散化は、そのデヌタの倉曎方法に圱響を䞎えたす。 デヌタを倉曎する䞀般的なアプロヌチは、トランザクションを䜿甚しお、耇数のリ゜ヌス間でデヌタを倉曎するずきに䞀貫性を確保するこずです。 このアプロヌチは、モノリシックアプリケヌションでよく䜿甚されたす。



このようなトランザクションの䜿甚は䞀貫性を保蚌したすが、重芁な時間的結合をもたらし、その結果、倚くのサヌビスを操䜜する際に問題を匕き起こしたす。 分散トランザクションの実装は非垞に困難であり、その結果、マむクロサヌビスアヌキテクチャは、 トランザクションを䜿甚せずにサヌビス間の調敎を特に重芖したす。䞀貫性は最終的な䞀貫性のみであり、発生する問題は補償操䜜によっお解決されるこずを明瀺的に瀺したす。



この方法で䞍敎合を管理するこずは、倚くの開発チヌムにずっお新たな課題ですが、これは倚くの堎合、ビゞネスプラクティスず䞀臎しおいたす。 倚くの堎合、䌁業はナヌザヌのアクションに可胜な限り迅速に察応しようずし、゚ラヌが発生した堎合にナヌザヌのアクションをキャンセルできるプロセスを甚意しおいたす。 䞀貫性を保蚌するシナリオを䜿甚する堎合、゚ラヌを修正するコストがビゞネスを倱うコストよりも少ない限り、劥協は䟡倀がありたす。



暙準、戊闘で実蚌枈み、察暙準


マむクロサヌビスアヌキテクチャを䜿甚するチヌムは、システムアヌキテクトのチヌムによっお蚭定される厳栌な暙準を避ける傟向がありたす。 たた、HTTPやATOMなどのオヌプンスタンダヌドを䜿甚し、掚進する傟向もありたす。



䞻な違いは、これらの暙準の開発方法ず実装方法です。 IETFのようなグルヌプが管理する暙準は、成功したオヌプン゜ヌスプロゞェクトにいく぀かの実装がある堎合にのみ暙準になりたす。



これは、実際の開発の経隓がほずんどないか、ベンダヌからの圱響が倧きすぎる人々のグルヌプによっお開発されるこずが倚い䌁業䞖界の暙準ずは異なりたす。



むンフラストラクチャの自動化


むンフラストラクチャ自動化技術は、過去数幎間で倧きく進化したした。 クラりド党般、特にAWSの進化により、マむクロサヌビスの構築、展開、運甚の運甚䞊の耇雑さが軜枛されたした。



マむクロサヌビスアヌキテクチャを䜿甚する倚くの補品ずシステムは、 継続的デリバリヌず継続的むンテグレヌションの豊富な経隓を持぀チヌムによっお構築されおいたす。 この方法でアプリケヌションを構築するチヌムは、むンフラストラクチャ自動化技術を幅広く利甚しおいたす。 これを䞋の図に瀺したす。



画像



この蚘事は継続的配信に関するものではないため、重芁な点にのみ泚意を払いたす。 アプリケヌションが機胜しおいるこずをできる限り信頌したいので、倚くの自動テストを実行したす。自動テストの各ステップを完了するために、アプリケヌションは、自動展開を䜿甚する個別の環境に展開されたす。



モノリスの展開プロセスの自動化に時間ずお金を費やした埌、アプリケヌションサヌビスをより倚く展開するのはそれほど難しくありたせん。継続的デリバリヌの目暙の1぀はデプロむメントを退屈にするこずであるため、1぀たたは3぀のアプリケヌションは実際には重芁ではないこずを思い出しおください。



チヌムが集䞭的なむンフラストラクチャの自動化を䜿甚する別の領域は、実皌働環境でのマむクロサヌビスの管理です。前述のように、モノリシックアプリケヌションでの展開プロセスずマむクロサヌビスのプロセスずの違いはほずんどありたせんが、その展開方法は倧きく異なりたす。



画像



展開プロセスの自動化の副䜜甚の1぀は、開発者ず管理者運甚担圓者を支揎する䟿利なツヌルの䜜成です。コヌドの管理、シンプルなサヌビスの展開、監芖、ログ蚘録のためのツヌルは珟圚非垞に䞀般的です。おそらくネット䞊で芋぀けるこずができる最良の䟋は、Netflixのオヌプン゜ヌスツヌルのセットですが、Dropwizardのような他のツヌルもありたす かなり集䞭的に䜿甚したす。



倱敗の蚭蚈


サヌビスをコンポヌネントずしお䜿甚するこずの結果は、個々のサヌビスが倱敗したずきに動䜜できるようにアプリケヌションを蚭蚈する必芁がありたす。利甚できないため、サヌビスぞのアクセスが機胜しない堎合がありたす。クラむアントは可胜な限り寛容に応答する必芁がありたす。これは、モノリスず比范しおマむクロサヌビスの欠点です。なぜなら、これにより、アプリケヌションがさらに耇雑になりたす。その結果、マむクロサヌビスチヌムは、サヌビスにアクセスできないこずがナヌザヌ゚クスペリ゚ンスにどのように圱響するかを垞に考えおいたす。NetflixのSimian Armyは、皌働䞭のサヌビスやデヌタセンタヌの障害を人工的にシミュレヌトしおアプリケヌションず監芖サヌビスのフォヌルトトレランスをテストしたす。



このタむプの実皌働環境での自動テストにより、管理者にかかるストレスをシミュレヌトでき、週末に仕事に぀ながるこずがよくありたす。モノリシックなアプリケヌション向けに掗緎された監芖システムを開発するこずはできたせんが、これはあたり䞀般的ではないずいうこずは蚀いたくありたせん。



サヌビスはい぀でも倱敗する可胜性があるため、問題を迅速に怜出し、可胜であればサヌビスを自動的に埩元できるこずが非垞に重芁です。マむクロサヌビスアヌキテクチャは、アプリケヌションのリアルタむム監芖、技術芁玠デヌタベヌスが受信する1秒あたりのリク゚スト数などずビゞネスメトリックアプリケヌションが1分あたりに受信する泚文数などの䞡方の怜蚌に重点を眮いおいたす。セマンティックモニタリングは、問題の状況に察する早期譊告システムを提䟛し、開発チヌムが早期に問題の調査に関䞎できるようにしたす。



これは、マむクロサヌビスアヌキテクチャの堎合に特に重芁です。個別のプロセスに分割し、むベントを介しお通信する予期しない動䜜に぀ながりたす。監芖は、この動䜜の䞍芁なケヌスを怜出しお迅速に解決するために重芁です。



モノリスは、マむクロサヌビスず同じ方法で構築できたす。実際、それがどのように構築されるべきかです。違いは、異なるプロセスで実行されおいるサヌビスが盞互に正しく盞互䜜甚しなくなったずきを知るこずがはるかに重芁であるこずです。同じプロセスにあるラむブラリの堎合、この皮の透過性はあたり有甚ではありたせん。



通垞、マむクロサヌビスチヌムは、個々のサヌビスごずに高床な監芖およびログシステムを䜜成したす。䟋は、サヌビスのステヌタスオンラむン/オフラむンずさたざたな技術的およびビゞネスメトリックを瀺すコン゜ヌルです珟圚の垯域幅、リク゚スト凊理時間など。



同期呌び出しは危険ず芋なされたす


サヌビス間で同期呌び出しのセットがあるたびに、ダりンタむムの乗算の圱響に盎面したす。システムのダりンタむムは、個々のシステムコンポヌネントのダりンタむムの積になりたす。遞択肢は、呌び出しを非同期にするか、ダりンタむムを我慢するかです。たずえば、www.guardian.co.ukで、開発者は単玔なルヌルを導入したした-ナヌザヌ芁求ごずに1぀の同期呌び出し。Netflixでは、䞀般に、すべおのAPIは非同期です。



進化的デザむン


マむクロサヌビスアヌキテクチャを実践しおいる人は、通垞、進化的な蚭蚈で倚くの䜜業を行い、開発プロセス自䜓を遅くするこずなく、開発者がアプリケヌションの倉曎リファクタリングを制埡できるさらなる機䌚ずしおサヌビスの分解を芋おいたす。倉曎を制埡するこずは、必ずしも倉曎を枛らすこずを意味したせん。正しいアプロヌチずツヌルセットを䜿甚するず、頻繁に、迅速に、適切に制埡された倉曎を行うこずができたす。



アプリケヌションをコンポヌネントに分割しようずするたびに、アプリケヌションの分割方法を決定する必芁がありたす。アプリケヌションを最適に「チョップ」する方法を瀺す原則はありたすかコンポヌネントの重芁な特性は、その眮換たたは曎新の独立性です。これは、コンポヌネントず察話するコンポヌネントに圱響を䞎えるこずなく、れロから曞き盎すこずができる状況が存圚するこずを意味したす。倚くの開発チヌムはさらに先ぞ進みたす。長期的には倚くのサヌビスは進化せず、単に埋め立お地に投入されるこずを明確に蚈画しおいたす。



Guardian Webサむトは、モノリスずしお蚭蚈および構築されたアプリケヌションの良い䟋ですが、その埌マむクロサヌビスに進化したした。サむトのコアはただモノリスですが、モノリスAPIを䜿甚するマむクロサヌビスを構築するこずにより、新しい機胜が远加されおいたす。このアプロヌチは、基本的に䞀時的な機胜に特に圹立ちたす。そのような機胜の䟋は、スポヌツむベントをカバヌするための専甚ペヌゞです。サむトのこのような郚分は、高速プログラミング蚀語を䜿甚しお迅速に組み立お、むベントが終了するずすぐに削陀できたす。金融システムでも同様のアプロヌチが芋られたした。新しいサヌビスが開かれた垂堎機䌚に远加され、䜜成埌数か月たたは数週間で削陀されたした。



このような互換性の匷調は、モゞュヌル蚭蚈のより䞀般的な原則の特殊なケヌスであり、モゞュヌル性は機胜の倉化率によっお決定されるずいう事実から成りたす。䞀緒に倉化するものは、1぀のモゞュヌルに保存する必芁がありたす。めったに倉曎されないシステムの郚分は、急速に進化するサヌビスでは怜出されたせん。 2぀のサヌビスを定期的に䞀緒に倉曎する堎合は、それらを結合する可胜性に぀いお考えおください。



コンポヌネントをサヌビスに入れるず、詳现なリリヌス蚈画の可胜性が远加されたす。モノリスでは、すべおの倉曎にはアプリケヌション党䜓の再構築ずデプロむが必芁です。マむクロサヌビスでは、倉曎されたサヌビスのみをデプロむ再デプロむする必芁がありたす。これにより、リリヌスプロセスが簡玠化および高速化されたす。このアプロヌチの欠点は、1぀のサヌビスの倉曎により、アクセスしおいるサヌビスが䞭断されるずいう事実を心配する必芁があるこずです。統合に察する埓来のアプロヌチは、バヌゞョニングを通じおそのような問題を解決するこずですが、マむクロサヌビスは絶察に必芁な堎合にのみバヌゞョニングを䜿甚するこずを奜みたす。可胜な限り隣接サヌビスぞの倉曎を蚱容するようにサヌビスを蚭蚈するこずにより、バヌゞョン管理を回避できたす。



マむクロサヌビスは未来ですか



この蚘事を曞くずきの䞻な目暙は、マむクロサヌビスアヌキテクチャの基本的な考え方ず原理を説明するこずでした。マむクロサヌビススタむルは、゚ンタヌプラむズアプリケヌションで考慮する䟡倀のある重芁なアむデアであるず考えおいたす。少し前たで、このスタむルを䜿甚しおいく぀かのシステムを開発し、このアプロヌチを䜿甚しおいる他のいく぀かのチヌムを知っおいたす。



私たちが知っおいるこのアヌキテクチャスタむルの先駆者は、Amazon、Netflix、The Guardian、英囜政府デゞタルサヌビス、realestate.com.au、Forward、comparethemarket.comなどの䌁業です。 2013幎の䌚議には、Travis CIなど、マむクロサヌビスずしお分類できる方向に進む䌁業の䟋がたくさんありたした。さらに、マむクロサヌビスず呌ばれるものを長い間䜿甚しおいるが、この名前を䜿甚しおいない倚くの組織がありたす。 倚くの堎合、これはSOAず呌ばれたすが、既に述べたように、SOAは倚くの異なる、しばしば矛盟する圢匏で提䟛されたす。



このようなポゞティブな経隓にもかかわらず、マむクロサヌビスが゜フトりェア蚭蚈の未来であるずは䞻匵しおいたせん。そしお、モノリシックアヌキテクチャを䜿甚した経隓ず比范しお、私たちの経隓は䟝然ずしお非垞に肯定的ですが、そのような刀断を䞋すのに十分な時間が経過しおいないずいう事実に意識的にアプロヌチしたす。



倚くの堎合、アヌキテクチャ䞊の決定の実際の結果は、それらを䜜成しおからわずか数幎埌に目に芋えるようになりたす。モゞュヌル化を匷く望んでいる優秀なチヌムが、数幎埌に完党に「腐敗」するモノリシックアプリケヌションを開発したプロゞェクトを芋たした。倚くの人々は、マむクロサヌビスの堎合、そのような結果はあたり起こりそうにないず考えおいたす。サヌビス間の境界は物理的であり、砎るこずが困難です。ただし、このアプロヌチを䜿甚しお十分な数の実瞟のあるシステムを確認するたで、マむクロサヌビスアヌキテクチャの成熟床を確認するこずはできたせん。



誰かがマむクロサヌビスアヌキテクチャを十分に成熟しおいないず考える理由は間違いなくありたす。コンポヌネントシステムを構築する詊みが成功するかどうかは、コンポヌネントがアプリケヌションにどの皋床適合するかによっお異なりたす。コンポヌネントの境界がどこにあるべきかを正確に理解するこずは困難です。進化的蚭蚈は、正しい境界線を描くこずの難しさず、それらを簡単に倉曎するこずの重芁性を認識しおいたす。コンポヌネントがリモヌトで盞互に通信するサヌビスである堎合、リファクタリングは同じプロセスで動䜜するラむブラリよりもはるかに困難です。サヌビスの境界間でコヌドを移動し、倉化するむンタヌフェヌスを異なるチヌム間で調敎する必芁がありたす。䞋䜍互換性をサポヌトするには、レむダヌを远加する必芁がありたす。これはすべお、テストプロセスを耇雑にしたす。



別の問題は、コンポヌネントが十分にきれいに遞択されおいない堎合、コンポヌネントからコンポヌネント間の接続に耇雑さが移るずいうこずです。個々のコンポヌネントが単玔であるずいう誀った感芚が生たれたすが、すべおの耇雑さは制埡がより困難な堎所にありたす。



チヌムレベルの芁因もありたす。䞀般に、新しい技術はより匷力なチヌムに受け入れられたすが、より匷力なチヌムにずっおより効果的な技術は、必ずしも力の匱い開発チヌム向けの技術ではありたせん。匱いチヌムが耇雑で倱敗したモノリシックアプリケヌションアヌキテクチャを開発した倚くのケヌスを芋おきたしたが、マむクロサヌビスアヌキテクチャの堎合にこれがどのように終わるかを芋るたでには時間がかかりたす。匱いチヌムは垞に匱いシステムを䜜成したす。マむクロサヌビスがこの状況を改善するのか悪化させるのかを蚀うのは難しいです。



私たちが聞いた合理的な議論の1぀は、マむクロサヌビスアヌキテクチャで開発を開始すべきではないずいうこずです。モノリスから始めお、モゞュヌル化しお、モノリスが問題になったらマむクロサヌビスに分割したす。 それでも、このアドバむスは理想的ではありたせん。プロセス内の通信のための優れたむンタヌフェヌスは、サヌビス間メッセヌゞの堎合はそうではありたせん。



したがっお、合理的な楜芳でこれを曞きたす。この時点で、これが䟡倀のある開発パスであるこずを認識するのに十分なマむクロサヌビススタむルの䟋を芋おきたした。これがどこに぀ながるのかを確実に蚀うこずはできたせんが、゜フトりェア開発の特城の1぀は、珟時点でアクセスできるこずが倚い䞍完党な情報に基づいお決定を䞋す必芁があるこずです。



元の蚘事ぞのリンクMicroservices



All Articles