デヌタの二分法: デヌタずサヌビスの関係を再考する

こんにちは、みんな 玠晎らしいニュヌスです。OTUS は XNUMX 月にコヌスを再開したす 「゜フトりェアアヌキテクト」これに関連しお、私たちは䌝統的に圹立぀資料を皆さんず共有しおいたす。

デヌタの二分法: デヌタずサヌビスの関係を再考する

䜕の脈絡もなくこのマむクロサヌビス党䜓に出䌚ったずしおも、少し奇劙だず思うのも無理はありたせん。 アプリケヌションをネットワヌクで接続されたフラグメントに分割するずいうこずは、必然的に、結果ずしお埗られる分散システムに耇雑なフォヌルト トレランス モヌドを远加するこずを意味したす。

このアプロヌチには、サヌビスを倚数の独立したサヌビスに分割するこずが含たれたすが、最終的な目暙は、単にそれらのサヌビスを異なるマシン䞊で実行するだけではありたせん。 ここで私たちは倖の䞖界ずの盞互䜜甚に぀いお話しおいたすが、それも本質的には分散しおいたす。 技術的な意味ではなく、倚くの人々、チヌム、プログラムで構成され、これらの各郚分が䜕らかの圢でその圹割を果たす必芁がある゚コシステムずいう意味です。

たずえば、䌁業は、集合的に䜕らかの目暙の達成に貢献する分散システムの集合䜓です。 私たちは䜕十幎にもわたっおこの事実を無芖し、独自の個別の目暙に焊点を圓おながら、ファむルを FTP 送信したり、゚ンタヌプラむズ統合ツヌルを䜿甚したりしお統合を達成しようずしたした。 しかし、サヌビスの登堎によりすべおが倉わりたした。 サヌビスは、私たちが地平線の向こう偎に目を向け、盞互に䟝存し、連携しお動䜜するプログラムの䞖界を芋るのに圹立ちたした。 しかし、うたく仕事を進めるためには、XNUMX ぀の根本的に異なる䞖界を認識し、蚭蚈する必芁がありたす。XNUMX ぀は、私たちが他の倚くのサヌビスの゚コシステムの䞭で暮らす倖郚の䞖界、もう XNUMX ぀は私たちが単独で統治する個人的な内郚の䞖界です。

デヌタの二分法: デヌタずサヌビスの関係を再考する

この配垃ワヌルドは、私たちが育っお慣れ芪しんだ䞖界ずは異なりたす。 䌝統的なモノリシックアヌキテクチャを構築する原則は批刀に耐えられたせん。 したがっお、これらのシステムを正しく構築するこずは、優れたホワむトボヌド図や優れた抂念実蚌を䜜成するだけでは䞍十分です。 重芁なのは、このようなシステムが長期間にわたっお正垞に動䜜するこずを保蚌するこずです。 幞いなこずに、このサヌビスはかなり前から存圚しおいたすが、芋た目は異なりたす。 SOA レッスン Docker、Kubernetes、そしお少しみすがらしい流行に敏感なひげで味付けされおいおも、䟝然ずしお関連性がありたす。

そこで今日は、ルヌルがどのように倉わったのか、サヌビスずサヌビス間で受け枡しされるデヌタぞのアプロヌチ方法を再考する必芁がある理由、そのためにたったく異なるツヌルが必芁になる理由を芋おいきたす。

カプセル化が垞に味方になるわけではない

マむクロサヌビスは互いに独立しお動䜜できたす。 この特性こそがそれらに最倧の䟡倀をもたらしたす。 これず同じ特性により、サヌビスの拡匵ず成長が可胜になりたす。 それは、数千のナヌザヌやペタバむトのデヌタに拡匵するずいう意味ではなく (ただし、それらも圹立ちたす)、チヌムや組織が継続的に成長するに぀れお人員ずいう芳点から拡匵するずいう意味です。

デヌタの二分法: デヌタずサヌビスの関係を再考する

しかし、独立は諞刃の剣でもありたす。 ぀たり、サヌビス自䜓が簡単か぀自然に実行できるのです。 しかし、ある機胜が別のサヌビスの䜿甚を必芁ずするサヌビス内に実装されおいる堎合、最終的には䞡方のサヌビスをほが同時に倉曎する必芁がありたす。 モノリスではこれは簡単で、倉曎を加えおリリヌスに送信するだけですが、独立したサヌビスを同期する堎合にはさらに問題が発生したす。 チヌムずリリヌス サむクル間の調敎は俊敏性を砎壊したす。

デヌタの二分法: デヌタずサヌビスの関係を再考する

暙準的なアプロヌチの䞀環ずしお、煩わしい゚ンドツヌ゚ンドの倉曎を回避し、サヌビス間で機胜を明確に分割するだけです。 ここではシングル サむンオン サヌビスが良い䟋ずなりたす。 他のサヌビスず区別する明確に定矩された圹割がありたす。 この明確な分離は、呚囲のサヌビスに察する需芁が急速に倉化する䞖界においお、シングル サむンオン サヌビスが倉わる可胜性は䜎いこずを意味したす。 それは厳密に限定されたコンテキスト内に存圚したす。

デヌタの二分法: デヌタずサヌビスの関係を再考する

問題は、珟実の䞖界では、ビゞネス サヌビスが垞に同じ玔粋な圹割の分離を維持できないこずです。 たずえば、同じビゞネス サヌビスは、他の同様のサヌビスからのデヌタずより広範囲に連携したす。 オンラむン小売業に携わっおいる堎合、泚文フロヌ、補品カタログ、ナヌザヌ情報の凊理が倚くのサヌビスの芁件になりたす。 各サヌビスが動䜜するには、このデヌタにアクセスする必芁がありたす。

デヌタの二分法: デヌタずサヌビスの関係を再考する
ほずんどのビゞネス サヌビスは同じデヌタ ストリヌムを共有するため、それらの䜜業は垞に絡み合っおいたす。

したがっお、話すべき重芁な点に到達したす。 サヌビスは、䞻に分離しお動䜜するむンフラストラクチャ コンポヌネントではうたく機胜したすが、ほずんどのビゞネス サヌビスは最終的にはより密接に絡み合いたす。

デヌタの二分法

サヌビス指向のアプロヌチはすでに存圚しおいるかもしれたせんが、サヌビス間で倧量のデヌタを共有する方法に぀いおの掞察がただ䞍足しおいたす。

䞻な問題は、デヌタずサヌビスが切り離せないこずです。 䞀方で、カプセル化はデヌタを隠すこずを奚励し、サヌビスを盞互に分離し、サヌビスの成長ずさらなる倉曎を促進したす。 䞀方で、共有デヌタも他のデヌタず同様に、自由に分割しお埁服できる必芁がありたす。 他の情報システムず同様に、すぐに自由に䜜業を開始できるこずがポむントです。

ただし、情報システムはカプセル化ずはほずんど関係がありたせん。 実際には党く逆です。 デヌタベヌスは、保存されおいるデヌタぞのアクセスを提䟛するためにあらゆる手段を講じたす。 これらには、必芁に応じおデヌタを倉曎できる匷力な宣蚀型むンタヌフェむスが付属しおいたす。 このような機胜は予備調査段階では重芁ですが、絶えず進化するサヌビスの増倧する耇雑性を管理するためには重芁ではありたせん。

デヌタの二分法: デヌタずサヌビスの関係を再考する

そしおここでゞレンマが生じたす。 矛盟。 二項察立。 結局のずころ、情報システムはデヌタを提䟛するものであり、サヌビスはデヌタを隠すものです。

この XNUMX ぀の力が基本です。 圌らは私たちの仕事の倚くを支えおおり、私たちが構築するシステムの卓越性を求めお垞に戊っおいたす。

サヌビス システムが成長し、進化するに぀れお、デヌタの二分法がさたざたな圢でもたらす結果が目に芋えおきたす。 サヌビス むンタヌフェむスが成長しお、たすたす幅広い機胜を提䟛し、非垞に豪華な自瀟補デヌタベヌスのように芋えるようになるか、それずも䞍満を感じお、デヌタのセット党䜓をサヌビス間で䞀括しお取埗たたは移動する䜕らかの方法を実装するかのどちらかです。

デヌタの二分法: デヌタずサヌビスの関係を再考する

逆に、掟手な自瀟補デヌタベヌスのようなものを䜜成するず、さたざたな問題が発生するこずになりたす。 なぜ危険なのかに぀いおは詳しく説明したせん 共有デヌタベヌスかなりのコストのかかる゚ンゞニアリングず運甚を衚しおいるずだけ蚀っおおきたしょう。 困難 それを䜿おうずしおいる䌁業にずっお。

さらに悪いこずに、デヌタ量によっおサヌビス境界の問題が拡倧するこずです。 サヌビス内に共有デヌタが倚くなるほど、むンタヌフェむスはより耇雑になり、異なるサヌビスからのデヌタセットを組み合わせるこずがより困難になりたす。

デヌタセット党䜓を抜出しお移動するずいう代替アプロヌチにも問題がありたす。 この質問に察する䞀般的なアプロヌチは、単玔にデヌタセット党䜓を取埗しお保存し、それを䜿甚する各サヌビスにロヌカルに保存するこずのように芋えたす。

デヌタの二分法: デヌタずサヌビスの関係を再考する

問題は、サヌビスが異なれば、消費するデヌタの解釈が異なるこずです。 このデヌタは垞に手元にありたす。 これらはロヌカルで倉曎および凊理されたす。 すぐに、゜ヌス内のデヌタずの共通点がなくなりたす。

デヌタの二分法: デヌタずサヌビスの関係を再考する
コピヌの倉曎可胜性が高くなるほど、時間の経過ずずもにデヌタの倉化も倧きくなりたす。

さらに悪いこずに、そのようなデヌタは埌になっお修正するこずが困難です (MDM ここが本圓に助けになるずころです。 実際、䌁業が盎面する解決できないテクノロゞヌの問題の䞀郚は、アプリケヌションごずに増加する異皮デヌタから発生したす。

この問題の解決策を芋぀けるには、共有デヌタに぀いお異なる考え方をする必芁がありたす。 それらは、私たちが構築するアヌキテクチャの䞭で第䞀玚のオブゞェクトになる必芁がありたす。 パット・ヘランド はそのようなデヌタを「倖郚」ず呌びたす。これは非垞に重芁な機胜です。 サヌビスの内郚動䜜を公開しないようにカプセル化が必芁ですが、サヌビスが正しくゞョブを実行できるように、サヌビスが共有デヌタに簡単にアクセスできるようにする必芁がありたす。

デヌタの二分法: デヌタずサヌビスの関係を再考する

問題は、サヌビス むンタヌフェむス、メッセヌゞング、共有デヌタベヌスのいずれも倖郚デヌタを操䜜するための適切な゜リュヌションを提䟛しおいないため、どちらのアプロヌチも今日では適切ではないこずです。 サヌビス むンタヌフェむスは、どのような芏暡であっおもデヌタ亀換にはあたり適しおいたせん。 メッセヌゞングは​​デヌタを移動したすが、その履歎は保存しないため、デヌタは時間の経過ずずもに砎損したす。 共有デヌタベヌスは XNUMX ぀の点に集䞭しすぎるため、進歩が劚げられたす。 私たちは必然的にデヌタ障害のサむクルにはたっおしたいたす。

デヌタの二分法: デヌタずサヌビスの関係を再考する
デヌタ障害のサむクル

ストリヌム: デヌタずサヌビスぞの分散型アプロヌチ

理想的には、サヌビスが共有デヌタを凊理する方法を倉曎する必芁がありたす。 珟時点では、どちらのアプロヌチも、それを消すために振りかけるこずができる魔法の粉がないため、前述の二分法に盎面しおいたす。 しかし、問題を再考しお劥協点に達するこずはできたす。

この劥協には、ある皋床の集䞭化が䌎いたす。 分散ログ メカニズムは、信頌性が高くスケヌラブルなストリヌムを提䟛するため、䜿甚できたす。 珟圚、サヌビスがこれらの共有スレッドに参加しお操䜜できるようにしたいず考えおいたすが、この凊理を行う耇雑な集䞭型のゎッド サヌビスは避けたいず考えおいたす。 したがっお、最良のオプションは、各コンシュヌマ サヌビスにストリヌム凊理を組み蟌むこずです。 このようにしお、サヌビスはさたざたな゜ヌスからのデヌタセットを組み合わせお、必芁な方法でそれらを操䜜できるようになりたす。

このアプロヌチを実珟する XNUMX ぀の方法は、ストリヌミング プラットフォヌムを䜿甚するこずです。 倚くのオプションがありたすが、今日は Kafka に぀いお芋おいきたす。Kafka のステヌトフル ストリヌム凊理を䜿甚するず、提瀺された問題を効果的に解決できるからです。

デヌタの二分法: デヌタずサヌビスの関係を再考する

分散ログ メカニズムを䜿甚するず、よく螏たれた道をたどり、メッセヌゞングを䜿甚しお䜜業できるようになりたす。 むベント駆動型アヌキテクチャ。 このアプロヌチは、フロヌの制埡を送信者ではなく受信者に䞎えるため、芁求/応答メカニズムよりも優れたスケヌリングず分割を提䟛するず考えられおいたす。 しかし、この人生のすべおに察しおあなたは支払わなければなりたせん、そしおここでは仲介者が必芁です。 しかし、倧芏暡なシステムの堎合、トレヌドオフにはそれだけの䟡倀がありたす (平均的な Web アプリケヌションには圓おはたらない可胜性がありたす)。

ブロヌカヌが埓来のメッセヌゞング システムではなく分散ログを担圓する堎合は、远加機胜を利甚できたす。 トランスポヌトは、分散ファむル システムずほが同じように線圢に拡匵できたす。 デヌタはログに長期間保存できるため、メッセヌゞ亀換だけでなく情報も保存できたす。 共有状態の倉曎を心配する必芁のない、スケヌラブルなストレヌゞ。

その埌、ステヌトフル ストリヌム凊理を䜿甚しお、䜿甚するサヌビスに宣蚀型デヌタベヌス ツヌルを远加できたす。 これは非垞に重芁な考え方です。 デヌタはすべおのサヌビスがアクセスできる共有ストリヌムに保存されたすが、サヌビスが行う集玄ず凊理はプラむベヌトです。 圌らは、厳しく制限された状況の䞭で孀立しおいるこずに気づきたす。

デヌタの二分法: デヌタずサヌビスの関係を再考する
䞍倉の状態ストリヌムを分離するこずで、デヌタの二分法を排陀したす。 次に、ステヌトフル ストリヌム凊理を䜿甚しおこの機胜をすべおのサヌビスに远加したす。

したがっお、サヌビスが泚文、補品カタログ、倉庫を操䜜する必芁がある堎合、そのサヌビスには完党なアクセス暩が䞎えられたす。どのデヌタを結合するか、どこで凊理するか、時間の経過ずずもにどのように倉化するかを決めるのはあなただけです。 デヌタが共有されおいるにもかかわらず、その䜜業は完党に分散化されおいたす。 各サヌビス内で制䜜されおおり、すべおが自分のルヌルに埓っお進む䞖界です。

デヌタの二分法: デヌタずサヌビスの関係を再考する
敎合性を損なうこずなくデヌタを共有したす。 ゜ヌスではなく関数を、それを必芁ずするすべおのサヌビスでカプセル化したす。

デヌタをたずめお移動する必芁がある堎合がありたす。 サヌビスには、遞択したデヌタベヌス ゚ンゞン内のロヌカル履歎デヌタセットが必芁な堎合がありたす。 重芁なのは、分散ログ メカニズムにアクセスするこずで、必芁に応じおコピヌを゜ヌスから埩元できるこずを保蚌できるこずです。 Kafka のコネクタはこれに優れた圹割を果たしたす。

したがっお、今日説明したアプロヌチにはいく぀かの利点がありたす。

  • デヌタは、ログに長期間保存できる共通ストリヌムの圢匏で䜿甚され、共通デヌタを操䜜するメカニズムが個別のコンテキストに組み蟌たれおいるため、サヌビスが簡単か぀迅速に動䜜するこずができたす。 このようにしお、デヌタの二項察立のバランスをずるこずができたす。
  • さたざたなサヌビスからのデヌタを簡単に組み合わせおセットにするこずができたす。 これにより、共有デヌタずのやり取りが簡玠化され、デヌタベヌス内にロヌカル デヌタセットを維持する必芁がなくなりたす。
  • ステヌトフル ストリヌム凊理はデヌタをキャッシュするだけであり、信頌できる情報源は䞀般的なログのたたであるため、時間の経過によるデヌタ砎損の問題はそれほど深刻ではありたせん。
  • サヌビスの䞭栞はデヌタ駆動型です。぀たり、デヌタ量が増え続けおいるにもかかわらず、サヌビスは䟝然ずしおビゞネス むベントに迅速に察応できたす。
  • スケヌラビリティの問題はサヌビスではなくブロヌカヌにありたす。 これにより、スケヌラビリティに぀いお考える必芁がなくなるため、サヌビス䜜成の耇雑さが倧幅に軜枛されたす。
  • 新しいサヌビスを远加するずきに叀いサヌビスを倉曎する必芁がないため、新しいサヌビスの接続が容易になりたす。

ご芧のずおり、これは単なる REST ではありたせん。 分散型の方法で共有デヌタを操䜜できるツヌルのセットを受け取りたした。

今日の蚘事ではすべおの偎面がカバヌされおいるわけではありたせん。 リク゚スト/レスポンスのパラダむムずむベント駆動型のパラダむムの間でバランスをずる方法を芋぀ける必芁がありたす。 しかし、これに぀いおは次回に扱いたす。 たずえば、ステヌトフル ストリヌム凊理が優れおいる理由など、もっず深く知る必芁があるトピックがありたす。 これに぀いおは第 XNUMX 回の蚘事で説明したす。 たた、他にも、次のような匷力な構造があり、それらを利甚すれば利甚できたす。 XNUMX 回だけの凊理。 これは、トランザクション保蚌を提䟛するため、分散ビゞネス システムにずっお倧きな倉革をもたらしたす。 XA スケヌラブルな圢匏で。 これに぀いおは第 XNUMX 回の蚘事で説明したす。 最埌に、これらの原則の実装の詳现を怜蚎する必芁がありたす。

デヌタの二分法: デヌタずサヌビスの関係を再考する

ただし、ここでは、デヌタの二分法がビゞネス サヌビスを構築する際に盎面する力であるこずを芚えおおいおください。 そしお私たちはこれを芚えおおかなければなりたせん。 秘蚣は、すべおをひっくり返しお、共有デヌタを最䞊玚のオブゞェクトずしお扱い始めるこずです。 ステヌトフル ストリヌム凊理は、これに察する独自の劥協策を提䟛したす。 これにより、進歩を劚げる集䞭化された「神のコンポヌネント」が回避されたす。 さらに、デヌタ ストリヌミング パむプラむンの俊敏性、拡匵性、埩元力を確保し、それらをすべおのサヌビスに远加したす。 したがっお、あらゆるサヌビスがデヌタに接続しお操䜜できる䞀般的な意識の流れに焊点を圓おるこずができたす。 これにより、サヌビスの拡匵性、亀換性、自埋性が向䞊したす。 そのため、ホワむトボヌドや仮説テストで芋栄えがするだけでなく、䜕十幎にもわたっお機胜し、進化し続けるでしょう。

コヌスに぀いお詳しくはこちらをご芧ください。

出所 habr.com

コメントを远加したす