NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

モノリスをマむクロサヌビスに再蚭蚈するのに䜕か月も費やし、぀いに党員が団結しおスむッチを入れるこずができたした。最初の Web ペヌゞにアクセスするず、䜕も起こりたせん。それをリロヌドしたすが、やはり良い結果は埗られたせん。サむトは非垞に遅く、数分間応答したせん。どうしたの

ゞミヌ ボガヌド氏は講挔の䞭で、実際のマむクロサヌビス障害に関する「事埌分析」を実斜したす。圌は、圌が発芋したモデリング、開発、および生産䞊の問題ず、圌のチヌムがどのようにしお新しい分散モノリスをゆっくりず最終的な正垞な状態に倉換したかを瀺したす。蚭蚈゚ラヌを完党に防ぐこずは䞍可胜ですが、少なくずも蚭蚈プロセスの早い段階で問題を特定しお、最終補品が信頌性の高い分散システムになるこずを保蚌するこずはできたす。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

みなさん、こんにちは。私はゞミヌです。今日は、マむクロサヌビスを構築するずきに倧芏暡灜害を回避する方法を聞きたす。これは、船が氷山に衝突するのを防ぐために私が玄 90 幎半働いた䌚瀟の話です。この話を適切に䌝えるには、過去に戻っお、この䌚瀟がどこで始たったのか、そしおその IT むンフラストラクチャが時間の経過ずずもにどのように成長しおきたのかに぀いお話す必芁がありたす。この灜害で無実の人々の名前を守るために、私はこの䌚瀟の名前をベルコンピュヌタに倉曎したした。次のスラむドは、XNUMX 幎代半ばのこうした䌁業の IT むンフラストラクチャがどのようなものであったかを瀺しおいたす。これは、コンピュヌタ ハヌドりェア ストアを運営するための倧芏暡なナニバヌサル フォヌルト トレラント HP Tandem メむンフレヌム サヌバヌの兞型的なアヌキテクチャです。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

すべおの泚文、販売、返品、補品カタログ、顧客ベヌスを管理するシステムを構築する必芁があったため、圓時最も䞀般的なメむンフレヌム ゜リュヌションを遞択したした。この巚倧なシステムには䌚瀟に関するあらゆる情報が含たれおおり、あらゆるトランザクションがこのメむンフレヌムを通じお実行されたした。圌らはすべおの卵を 1 ぀のカゎに入れおおり、それが正垞だず考えおいたした。ここに含たれないのはカタログ通販ず電話泚文だけです。

時間が経぀に぀れお、システムはたすたす倧きくなり、膚倧な量のゎミが蓄積されたした。たた、COBOL は䞖界で最も衚珟力豊かな蚀語ではないため、システムは巚倧なモノリシックのゞャンクになっおしたいたした。 2000 幎たでに、倚くの䌁業が Web サむトを䜿甚しおすべおの業務を遂行しおいるこずに気づき、最初の商甚ドットコム Web サむトを構築するこずにしたした。

初期のデザむンは非垞に芋栄えがよく、トップレベルのサむト bell.com ず、個々のアプリケヌション甚の倚数のサブドメむン (catalog.bell.com、accounts.bell.com、orders.bell.com、product search search.bell) で構成されおいたした。コム。各サブドメむンは ASP.Net 1.0 フレヌムワヌクず独自のデヌタベヌスを䜿甚し、それらはすべおシステム バック゚ンドず通信したした。ただし、すべおの泚文は匕き続き単䞀の巚倧なメむン​​フレヌム内で凊理および実行され、その䞭にはすべおのゎミが残りたすが、フロント゚ンドは個別のアプリケヌションず個別のデヌタベヌスを備えた個別の Web サむトでした。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

したがっお、システムの蚭蚈は秩序正しく論理的に芋えたしたが、実際のシステムは次のスラむドに瀺すずおりでした。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

すべおの芁玠は、盞互の呌び出し、アクセスされた API、組み蟌みのサヌドパヌティ DLL などに察応しおいたした。バヌゞョン管理システムが他人のコヌドを取埗しおプロゞェクト内に抌し蟌み、その埌すべおが壊れるずいうこずがよくありたした。 MS SQL Server 2005 ではリンク サヌバヌの抂念が䜿甚されおおり、スラむドには矢印を瀺しおいたせんが、耇数のデヌタベヌスから取埗したデヌタに基づいおテヌブルを構築するこずに問題がないため、各デヌタベヌスも盞互に通信したす。

システムの異なる論理領域間である皋床の分離が行われたため、これが分散された汚れの塊ずなり、最倧のゎミが䟝然ずしおメむンフレヌムのバック゚ンドに残っおいたす。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

面癜いのは、このメむンフレヌムはベル コンピュヌタの競合他瀟によっお構築され、䟝然ずしおその技術コンサルタントによっお保守されおいたずいうこずです。アプリケヌションのパフォヌマンスが䞍十分であるこずを確信した同瀟は、それらを削陀しおシステムを再蚭蚈するこずにしたした。

既存のアプリケヌションは 15 幎間運甚されおおり、これは ASP.Net ベヌスのアプリケヌションの蚘録です。このサヌビスは䞖界䞭から泚文を受け付け、この XNUMX ぀のアプリケヌションからの幎間収益は XNUMX 億ドルに達したした。利益の倧郚分は、bell.com Web サむトによっおもたらされたした。ブラック フラむデヌには、このサむトを通じお行われた泚文の数が数癟䞇件に達したした。ただし、システム芁玠の厳密な盞互接続によりサヌビスに倉曎を加えるこずが事実䞊䞍可胜だったため、既存のアヌキテクチャでは開発ができたせんでした。

最も深刻な問題は、このような取匕スキヌムがグロヌバル䌁業では非垞に䞀般的であるにもかかわらず、ある囜で泚文し、別の囜で支払い、第䞉囜に送るこずができないこずでした。既存のりェブサむトではこのようなこずはできなかったため、電話で泚文を受け付けお発泚する必芁がありたした。これにより、同瀟はアヌキテクチャの倉曎、特にマむクロサヌビスぞの切り替えに぀いおたすたす怜蚎するようになりたした。

圌らは、他の䌁業を調べお同様の問題をどのように解決したかを確認するずいう賢明な行動をずりたした。これらの゜リュヌションの 1 ぀は、API ず倖郚デヌタベヌスを介しお接続されたマむクロサヌビスで構成される Netflix サヌビス アヌキテクチャでした。

Bell Computers の経営陣は、特定の基本原則を遵守しお、たさにそのようなアヌキテクチャを構築するこずを決定したした。たず、共有デヌタベヌスのアプロヌチを䜿甚しおデヌタの重耇を排陀したした。デヌタは送信されず、それどころか、デヌタを必芁ずする人は党員、集䞭管理された゜ヌスにアクセスする必芁がありたした。その埌、分離ず自埋性が続き、各サヌビスは他のサヌビスから独立したした。圌らは、あらゆるこずに Web API を䜿甚するこずを決定したした。デヌタを取埗したり、別のシステムに倉曎を加えたい堎合は、すべお Web API を通じお行われたした。最埌の目玉は、競合他瀟のハヌドりェアをベヌスにした「Bell」メむンフレヌムずは察照的に、「Bell on Bell」ず呌ばれる新しいメむンフレヌムでした。

そこで、18 か月かけお、これらの基本原則に基づいおシステムを構築し、プリプロダクションに持ち蟌みたした。週末が終わり仕事に戻った開発者たちは集たっお、新しいシステムが接続されおいるすべおのサヌバヌの電源を入れたした。 18 か月の䜜業、䜕癟人もの開発者、最新の Bell ハヌドりェアを䜿甚したしたが、良い結果は埗られたせんでした。このシステムをラップトップで䜕床も実行し、すべお問題がなかったので、倚くの人がこれに倱望したした。

圌らはこの問題の解決にすべおのお金を投じたのは賢明でした。圌らは、スむッチ付きの最新のサヌバヌ ラックを蚭眮し、ギガビット光ファむバヌ、非垞識な量の RAM を備えた最も匷力なサヌバヌ ハヌドりェアを䜿甚し、すべおを接続し、蚭定したしたが、やはり䜕もしたせんでした。その埌、原因はタむムアりトではないかず疑い始めたので、すべおの Web 蚭定ずすべおの API 蚭定を調べお、タむムアりト蚭定党䜓を最倧倀に曎新したした。そのため、圌らにできるこずは座っお䜕かが起こるのを埅぀こずだけでした。サむトぞ。圌らは埅っお埅っお、りェブサむトが最終的に読み蟌たれるたで 9 分半埅ちたした。

その埌、圌らは珟状を培底的に分析する必芁があるこずに気づき、私たちを招埅しおくれたした。私たちが最初にわかったこずは、18 か月にわたる開発期間䞭、本物の「マむクロ」は XNUMX ぀も䜜成されおおらず、すべおが倧きくなるばかりだったずいうこずでした。この埌、私たちは灜害の原因を理解するために、「回想」たたは「悲しい回顧」ずしおも知られる事埌調査「ブレむム ストヌム」ずも呌ばれる、「ブレむンストヌム」ずも呌ばれる、「ブレむム ストヌム」を曞き始めたした。

いく぀かの手がかりがあり、そのうちの 2 ぀は API 呌び出し時のトラフィックが完党に飜和しおいたこずでした。モノリシック サヌビス アヌキテクチャを䜿甚するず、障害の原因ずなった可胜性のあるすべおを報告する単䞀のスタック トレヌスがあるため、䜕が問題になったのかをすぐに理解できたす。倚数のサヌビスが同じ API に同時にアクセスする堎合、WireShark などの远加のネットワヌク監芖ツヌルを䜿甚する以倖にトレヌスを远跡する方法はありたせん。これを䜿甚するず、単䞀のリク゚ストを調べお、その実装䞭に䜕が起こったのかを知るこずができたす。そこで私たちは XNUMX ぀の Web ペヌゞを取り䞊げ、ほが XNUMX 週間かけおパズルのピヌスを組み立お、さたざたな呌び出しを行っお、それぞれが䜕をもたらしたのかを分析したした。
この画像芋お。これは、1 ぀の倖郚リク゚ストによりサヌビスが倚数の内郚呌び出しを実行し、それが返されるこずを瀺しおいたす。必芁な情報を取埗するために他のどこにもアクセスできないため、このリク゚ストを独立しお凊理できるようにするために、各内郚呌び出しが远加のホップを行うこずがわかりたす。この図は、倖郚リク゚ストが远加サヌビスを呌び出し、そのサヌビスがさらに別の远加サヌビスを呌び出すずいうような、無意味な呌び出しのカスケヌドのように芋えたす。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

この図の緑色は、サヌビス A がサヌビス B を呌び出し、サヌビス B がサヌビス C を呌び出し、サヌビス A が再床サヌビス A を呌び出すずいう、サヌビスが互いに呌び出し合う半円を瀺しおいたす。その結果、「分散デッドロック」が発生したす。 1 ぀のリク゚ストで 1,000 のネットワヌク API 呌び出しが䜜成され、システムにはフォヌルト トレランスずルヌプ保護が組み蟌たれおいなかったため、これらの API 呌び出しの 1 ぀でも倱敗するずリク゚ストは倱敗したす。

蚈算しおみたした。各 API 呌び出しの SLA は 150 ミリ秒以䞋で、皌働時間は 99,9% でした。 200 ぀のリク゚ストで 200 回の異なる呌び出しが発生し、最良の堎合、ペヌゞは 150 x 30 ミリ秒 = 99,9 秒で衚瀺されたす。圓然、これではダメでした。 200% の皌働時間を 0 で乗算するず、可甚性は XNUMX% になりたす。このアヌキテクチャは最初から倱敗する運呜にあったこずが刀明したした。

私たちは開発者に、18 か月の䜜業にもかかわらず、どのようにしおこの問題を認識できなかったのかを尋ねたした。実行したコヌドの SLA のみをカりントしおいたしたが、サヌビスが別のサヌビスを呌び出した堎合、その時間は SLA にカりントされおいなかったこずが刀明したした。 150 ぀のプロセス内で起動されるものはすべお XNUMX ミリ秒の倀に準拠しおいたしたが、他のサヌビス プロセスぞのアクセスにより合蚈遅延が䜕倍にも増加したした。最初に孊んだ教蚓は、「SLA を管理しおいるのはあなたですか、それずも SLA があなたを管理しおいたすか?」ずいうこずでした。私たちの堎合は埌者でした。

次に私たちが発芋したのは、圌らはピヌタヌ・ダむッチずゞェヌムス・ゎズリングによっお定匏化された分散コンピュヌティングの誀解の抂念に぀いおは知っおいたが、その最初の郚分を無芖しおいたずいうこずでした。 「ネットワヌクは信頌できる」、「遅延れロ」、「スルヌプットは無限」ずいう蚘述は誀解であるず述べおいたす。その他の誀解ずしおは、「ネットワヌクは安党である」、「トポロゞは決しお倉曎されない」、「管理者は垞に 1 人だけである」、「デヌタ転送のコストはれロである」、「ネットワヌクは同皮である」などがありたす。
圌らはロヌカル マシンでサヌビスをテストし、倖郚サヌビスに接続しなかったため、間違いを犯したした。ロヌカルで開発し、ロヌカル キャッシュを䜿甚する堎合、ネットワヌク ホップに遭遇するこずはありたせんでした。 18 か月にわたる開発期間䞭、倖郚サヌビスが圱響を受けた堎合に䜕が起こるか考えたこずは䞀床もありたせんでした。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

前の図のサヌビス境界を芋るず、それらがすべお間違っおいるこずがわかりたす。サヌビス境界の定矩方法に぀いおアドバむスする情報源はたくさんありたすが、次のスラむドの Microsoft のように、そのほずんどが間違っおいたす。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

この写真は、「マむクロサヌビスの構築方法」ずいうテヌマに関する MS ブログからのものです。これは、単玔な Web アプリケヌション、ビゞネス ロゞックのブロック、およびデヌタベヌスを瀺しおいたす。リク゚ストは盎接送信されたす。おそらく、Web 甚に 1 台のサヌバヌ、ビゞネス甚に 1 台、デヌタベヌス甚に 1 台のサヌバヌが存圚したす。トラフィックが増加するず、状況は少し倉わりたす。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

ここでは、2000 ぀の Web サヌバヌ間でトラフィックを分散するロヌド バランサヌ、Web サヌビスずビゞネス ロゞックの間に配眮されるキャッシュ、およびビゞネス ロゞックずデヌタベヌスの間に配眮されるもう XNUMX ぀のキャッシュが登堎したす。これはたさに、XNUMX 幎代半ばに Bell が負荷分散および Blue/Green デプロむメント アプリケヌションに䜿甚したアヌキテクチャです。このスキヌムはモノリシック構造を目的ずしおいたため、しばらくの間はすべおがうたく機胜したした。

次の図は、MS がモノリスからマむクロサヌビスぞの移行を掚奚する方法を瀺しおいたす。これは、各䞻芁サヌビスを個別のマむクロサヌビスに分割するだけです。ベルが間違いを犯したのは、この蚈画の実行䞭にでした。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

圌らはすべおのサヌビスをさたざたな局に分割し、各局は倚くの個別のサヌビスで構成されおいたした。たずえば、Web サヌビスにはコンテンツのレンダリングず認蚌のためのマむクロサヌビスが含たれ、ビゞネス ロゞック サヌビスは泚文ずアカりント情報を凊理するためのマむクロサヌビスで構成され、デヌタベヌスは特殊なデヌタを含む䞀連のマむクロサヌビスに分割されたした。 Web、ビゞネス ロゞック、デヌタベヌスはどちらもステヌトレス サヌビスでした。

ただし、この図は完党に間違っおいたした。䌚瀟の IT クラスタヌの倖郚にあるビゞネス ナニットがマッピングされおいなかったからです。このスキヌムは倖郚䞖界ずの぀ながりをたったく考慮しおいないため、たずえばサヌドパヌティのビゞネス分析をどのように取埗するかは明確ではありたせんでした。圌らは、より倚くのお金を埗るためにできるだけ倚くの人々を管理しようずする個々の埓業員のキャリアを開発するためだけに発明されたいく぀かのサヌビスもありたした。

圌らは、マむクロサヌビスぞの移行は、内郚の N 局物理局むンフラストラクチャを取り出しお、そこに Docker を貌り付けるのず同じくらい簡単だず信じおいたした。埓来の N 局アヌキテクチャがどのようなものかを芋おみたしょう。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

UI ナヌザヌ むンタヌフェむス レベル、ビゞネス ロゞック レベル、デヌタ アクセス レベル、デヌタベヌスの 4 ぀のレベルで構成されたす。より進歩的なのは DDD (ドメむン駆動蚭蚈)、぀たり゜フトりェア指向アヌキテクチャで、XNUMX ぀の䞭間レベルがドメむン オブゞェクトずリポゞトリです。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

私は、このアヌキテクチャにおけるさたざたな倉化領域、さたざたな責任領域に目を向けようずしたした。兞型的な N 局アプリケヌションでは、構造の䞊から䞋たで垂盎に浞透するさたざたな倉曎領域が分類されたす。これらはカタログ、個々のコンピュヌタヌで実行される構成蚭定、チェックアりト チェックであり、私のチヌムが凊理したした。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

このスキヌムの特城は、これらの倉曎領域の境界がビゞネス ロゞック レベルに圱響を䞎えるだけでなく、デヌタベヌスにたで及ぶこずです。

サヌビスずは䜕を意味するのか芋おみたしょう。サヌビス定矩には 6 ぀の特城的なプロパティがありたす。サヌビス定矩は次のような゜フトりェアです。

  • 特定の組織によっお䜜成および䜿甚されたす。
  • システム内の特定の皮類の情報のコンテンツ、凊理、および/たたは提䟛に察しお責任を負いたす。
  • 特定の運甚ニヌズを満たすために独立しお構築、展開、実行できたす。
  • 消費者およびその他のサヌビスず通信し、合意たたは契玄䞊の保蚌に基づいお情報を提䟛したす。
  • 䞍正アクセスから自身を保護し、情報の損倱を防ぎたす。
  • 情報の損傷に぀ながらないように障害を凊理したす。

これらの性質はすべお「自埋性」ずいう䞀蚀で衚珟できたす。サヌビスは互いに独立しお動䜜し、特定の制限を満たし、人々が必芁な情報を受け取るための契玄に基づいお定矩されたす。特定のテクノロゞヌに぀いおは蚀及したせんでしたが、その䜿甚は自明のこずです。

次に、マむクロサヌビスの定矩を芋おみたしょう。

  • マむクロサヌビスはサむズが小さく、1 ぀の特定の問題を解決するように蚭蚈されおいたす。
  • マむクロサヌビスは自埋的です。
  • マむクロサヌビス アヌキテクチャを䜜成するずきは、郜垂蚈画のメタファヌが䜿甚されたす。これは、Sam Newman の著曞『Building Microservices』の定矩です。

境界コンテキストの定矩は、Eric Evans の著曞 Domain-Driven Design から匕甚されおいたす。これは、ボリュヌム建築モデルを操䜜しおモデルを異なる境界コンテキストに分割し、それらの間の盞互䜜甚を明瀺的に定矩する建築蚭蚈センタヌである DDD の䞭栞ずなるパタヌンです。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

簡単に蚀えば、境界コンテキストは、特定のモゞュヌルが䜿甚できる範囲を瀺したす。このコンテキスト内には、たずえばビゞネス ドメむンで芋るこずができる論理的に統合されたモデルがありたす。受泚関係者に「顧客ずは誰ですか」ず聞けば1぀の定矩が埗られ、営業関係者に聞けば別の定矩が埗られ、出挔者が3぀目の定矩を䞎える。

したがっお、Bounded Context は、サヌビスの消費者が䜕であるかに぀いお明確な定矩を䞎えるこずができない堎合は、この甚語の意味に぀いお話すこずができる境界を定矩し、その埌、これらの異なる定矩の間の移行点を定矩したしょう、ず蚀っおいたす。぀たり、クラむアントのこずを発泚の芳点から蚀えばこれはこれを意味し、営業の芳点から蚀えばこれはこれを意味したす。

マむクロサヌビスの次の定矩は、あらゆる皮類の内郚操䜜をカプセル化し、䜜業プロセスのコンポヌネントが環境に「挏掩」するこずを防ぐこずです。次に、SLA から返される契玄の抂念に代衚される、「倖郚ずのやり取りたたは倖郚通信のための明瀺的な契玄の定矩」が続きたす。最埌の定矩はセル (セル) の比喩であり、マむクロサヌビス内の䞀連の操䜜が完党にカプセル化され、マむクロサヌビス内に倖郚ず通信するためのレセプタヌが存圚するこずを意味したす。

NDCロンドンカンファレンス。 マむクロサヌビス灜害の防止。 パヌト1

そこで私たちはベルコンピュヌタの瀟員たちにこう蚀いたした。「あなたにはお金がないので、あなたが匕き起こした混乱を修正するこずはできたせん。しかし、サヌビスを 9 ぀だけ修正しお、すべおがうたくいくようにしたす」センス。"ここでは、リク゚ストに XNUMX 分半より早く応答できるように、唯䞀のサヌビスをどのように修正したかを説明するこずから始めたす。

22:30分

続きはたたすぐに 

いく぀かの広告

い぀もご宿泊いただきありがずうございたす。 私たちの蚘事が気に入っおいたすか? もっず興味深いコンテンツを芋たいですか? 泚文したり、友人に勧めたりしお私たちをサポヌトしおください。 開発者向けのクラりド VPS は 4.99 ドルから, 圓瀟があなたのために発明した、゚ントリヌレベルのサヌバヌのナニヌクな類䌌物です。 VPS (KVM) E5-2697 v3 (6 コア) 10GB DDR4 480GB SSD 1Gbps 19 ドルからの真実、たたはサヌバヌを共有する方法? (RAID1 および RAID10、最倧 24 コア、最倧 40GB DDR4 で利甚可胜)。

アムステルダムの゚クむニクス Tier IV デヌタセンタヌでは Dell R730xd が 2 倍安い? ここだけ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV 199 ドルから オランダで Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 ドルから! に぀いお読む むンフラストラクチャヌ䌁業を構築する方法730 ペニヌで 5 ナヌロの䟡倀がある Dell R2650xd E4-9000 vXNUMX サヌバヌを䜿甚したクラスですか?

出所 habr.com

コメントを远加したす