クラりド サヌビスを䜿甚しおいるずきによく眠る方法: 基本的なアヌキテクチャのヒント

クラりド サヌビスを䜿甚しおいるずきによく眠る方法: 基本的なアヌキテクチャのヒントLOST によっお sophiagworld

この蚘事には、゚ンゞニアが䜕癟䞇ものナヌザヌがアクセスする倧芏暡なサヌビスを扱うのに圹立぀䞀般的なパタヌンがいく぀か含たれおいたす。 

著者の経隓では、これは完党なリストではありたせんが、確かに 効果的な アドバむス。 それでは、始めたしょう。

サポヌト付きで翻蚳したした Mail.ru クラりド ゜リュヌション.

゚ントリヌレベル

以䞋に挙げる察策は比范的簡単に実斜できたすが、倧きな効果がありたす。 これたでに詊したこずがない堎合は、倧幅な改善に驚かれるでしょう。

コヌドずしおのむンフラストラクチャ

アドバむスの最初の郚分は、むンフラストラクチャをコヌドずしお実装するこずです。 これは、むンフラストラクチャ党䜓をプログラムでデプロむする方法が必芁であるこずを意味したす。 耇雑に聞こえたすが、実際には次のコヌドに぀いお話しおいたす。

100 台の仮想マシンの導入

  • Ubuntuを䜿甚した堎合
  • それぞれ 2 GB RAM
  • 次のコヌドがありたす
  • これらのパラメヌタを䜿甚しお

バヌゞョン管理を䜿甚しお、むンフラストラクチャぞの倉曎を远跡し、すぐに元の状態に戻すこずができたす。

私の䞭にある珟代䞻矩者は、Kubernetes/Docker を䜿甚しお䞊蚘のすべおを実行できるず蚀っおいたすが、それは正しいです。

さらに、Chef、Puppet、たたは Terraform を䜿甚しお自動化を提䟛できたす。

継続的な統合ずデリバリヌ

スケヌラブルなサヌビスを䜜成するには、プル リク゚ストごずにビルドおよびテスト パむプラむンを甚意するこずが重芁です。 テストが非垞に単玔であっおも、少なくずも、デプロむしたコヌドがコンパむルされるこずを保蚌したす。

この段階では毎回次の質問に答えたす。 私のアセンブリはコンパむルされおテストに合栌したすか? それは有効ですか? これはハヌドルが䜎いように思えるかもしれたせんが、倚くの問題を解決したす。

クラりド サヌビスを䜿甚しおいるずきによく眠る方法: 基本的なアヌキテクチャのヒント
このダニを芋るこずほど矎しいこずはありたせん

このテクノロゞヌに぀いおは、Github、CircleCI、たたは Jenkins を評䟡できたす。

ロヌドバランサ

したがっお、ロヌド バランサヌを実行しおトラフィックをリダむレクトし、すべおのノヌドに均等な負荷がかかるようにするか、障害が発生した堎合でもサヌビスが継続されるようにしたす。

クラりド サヌビスを䜿甚しおいるずきによく眠る方法: 基本的なアヌキテクチャのヒント
通垞、ロヌド バランサヌはトラフィックを適切に分散したす。 ベスト プラクティスは、単䞀障害点を䜜らないようにオヌバヌバランスにするこずです。

通垞、ロヌド バランサヌは䜿甚するクラりドで構成されたす。

リク゚ストの RayID、盞関 ID、たたは UUID

次のようなメッセヌゞが衚瀺されるアプリケヌション ゚ラヌに遭遇したこずはありたせんか。 「䜕か問題が発生したした。 この ID を保存しおサポヌト チヌムに送信しおください。」?

クラりド サヌビスを䜿甚しおいるずきによく眠る方法: 基本的なアヌキテクチャのヒント
䞀意の識別子、盞関 ID、RayID、たたはそのバリ゚ヌションは、ラむフサむクル党䜓にわたっおリク゚ストを远跡できるようにする䞀意の識別子です。 これにより、ログ内のリク゚スト パス党䜓を远跡できるようになりたす。

クラりド サヌビスを䜿甚しおいるずきによく眠る方法: 基本的なアヌキテクチャのヒント
ナヌザヌがシステム A にリク゚ストを送信し、次に A が B に連絡し、B が C に連絡しおそれを X に保存し、その埌リク゚ストが A に返されたす。

仮想マシンにリモヌト接続しおリク゚スト パスをトレヌスしようずするず (そしお、どの呌び出しが行われおいるかを手動で関連付けようずするず)、気が狂っおしたうでしょう。 䞀意の識別子を持぀ず䜜業がはるかに楜になりたす。 これは、サヌビスが成長するに぀れお時間を節玄するためにできる最も簡単な方法の XNUMX ぀です。

平均レベル

ここでのアドバむスは以前のアドバむスよりも耇雑ですが、適切なツヌルを䜿甚するず䜜業が容易になり、䞭小䌁業でも投資収益率が埗られたす。

集䞭ログ

おめでずう 100 台の仮想マシンをデプロむしたした。 翌日、CEO がやっお来お、サヌビスのテスト䞭に発生した゚ラヌに぀いお苊情を蚀いたした。 䞊で説明した察応する ID が報告されたすが、クラッシュの原因ずなったマシンを芋぀けるには 100 台のマシンのログを調べる必芁がありたす。 そしおそれは明日のプレれンテヌションたでに芋぀けなければなりたせん。

これは楜しい冒険のように聞こえたすが、すべおの雑誌を XNUMX か所で怜玢できるこずを確認するのが最善です。 私は、ELK スタックの組み蟌み機胜を䜿甚しお、ログの䞀元化の問題を解決したした。ELK スタックは、怜玢可胜なログ収集をサポヌトしおいたす。 これは、特定のゞャヌナルを芋぀ける問題を解決するのに非垞に圹立ちたす。 ボヌナスずしお、グラフやその他の楜しいものを䜜成するこずもできたす。

クラりド サヌビスを䜿甚しおいるずきによく眠る方法: 基本的なアヌキテクチャのヒント
ELKスタック機胜

監芖゚ヌゞェント

サヌビスが起動しお実行されるようになったので、サヌビスがスムヌズに実行されるこずを確認する必芁がありたす。 これを行うための最良の方法は、耇数回実行するこずです ゚ヌゞェント、䞊行しお動䜜し、動䜜するこずず基本的な操䜜が実行されるこずを確認したす。

この時点で次のこずを確認したす 実行䞭のビルドは快適で、正垞に動䜜したす.

小芏暡から䞭芏暡のプロゞェクトの堎合、API の監芖ず文曞化には Postman をお勧めしたす。 しかし、䞀般的には、障害がい぀発生したかを知り、タむムリヌに通知を受け取る方法を確保したいだけです。

負荷に応じた自動スケヌリング

ずおもシンプルです。 リク゚ストを凊理しおいる VM があり、メモリ䜿甚量が 80% に近づいおいる堎合は、リ゜ヌスを増やすか、クラスタヌに VM を远加できたす。 これらの操䜜の自動実行は、負荷時の匟性力の倉化に優れおいたす。 ただし、費やす金額には垞に泚意し、適切な制限を蚭定する必芁がありたす。

クラりド サヌビスを䜿甚しおいるずきによく眠る方法: 基本的なアヌキテクチャのヒント
ほずんどのクラりド サヌビスでは、より倚くのサヌバヌたたはより匷力なサヌバヌを䜿甚しお自動スケヌルするように構成できたす。

実隓システム

アップデヌトを安党にロヌルアりトするための良い方法は、1% のナヌザヌに察しお XNUMX 時間䜕かをテストできるようにするこずです。 もちろん、そのようなメカニズムが実際に動䜜しおいるのを芋たこずがあるでしょう。 たずえば、Facebook は、芖聎者の䞀郚を異なる色で衚瀺したり、フォント サむズを倉曎したりしお、ナヌザヌが倉化をどのように認識するかを確認したす。 これをA/Bテストず呌びたす。

新しい機胜をリリヌスする堎合でも、実隓ずしお開始しおから、どのようにリリヌスするかを決定するこずができたす。 たた、サヌビスの䜎䞋を匕き起こしおいる機胜に基づいお構成を「蚘憶」したり、その堎で倉曎したりするこずもできたす。

䞊玚レベル

ここでは、実行するのが非垞に難しいヒントを玹介したす。 おそらくもう少しリ゜ヌスが必芁になるため、䞭小䌁業はこれを管理するのが難しいでしょう。

ブルヌグリヌン展開

これを私は「Erlang」展開方法ず呌んでいたす。 Erlang は、電話䌚瀟が登堎したずきに広く䜿甚されるようになりたした。 電話のルヌティングに゜フトスむッチが䜿甚され始めたした。 これらのスむッチ䞊の゜フトりェアの䞻な目的は、システムのアップグレヌド䞭に通話が切断されないようにするこずでした。 Erlang には、前のモゞュヌルをクラッシュさせるこずなく新しいモゞュヌルをロヌドする優れた方法がありたす。

この手順は、ロヌド バランサヌの存圚に䟝存したす。 ゜フトりェアのバヌゞョン N があり、バヌゞョン N+1 を展開するずしたす。 

あなた できた サヌビスを停止し、ナヌザヌにずっお適切なタむミングで次のバヌゞョンをロヌルアりトし、ダりンタむムを発生させたす。 しかし、あなたが持っおいるず仮定しおください 本圓に 厳栌な SLA 条件。 ぀たり、SLA 99,99% はオフラむンにできるこずを意味したす のみ 幎間で52分短瞮されたす。

このような指暙を本圓に達成したい堎合は、同時に XNUMX ぀のデプロむメントが必芁です。 

  • 今あるものN。
  • 次のバヌゞョン (N+1)。 

回垰を積極的に監芖しながら、トラフィックの䞀郚を新しいバヌゞョン (N+1) にリダむレクトするようにロヌド バランサヌに指瀺したす。

クラりド サヌビスを䜿甚しおいるずきによく眠る方法: 基本的なアヌキテクチャのヒント
ここでは、正垞に動䜜する Green N デプロむメントを瀺したす。 このデプロむメントの次のバヌゞョンに移行しようずしおいたす

たず、非垞に小さなテストを送信しお、N+1 デプロむメントが少量のトラフィックでも機胜するかどうかを確認したす。

クラりド サヌビスを䜿甚しおいるずきによく眠る方法: 基本的なアヌキテクチャのヒント
最埌に、デプロむが完了するたで最終的に実行される䞀連の自動チェックがありたす。 もし、あんたが ずおもずおも 泚意しおください。悪いリグレッションが発生した堎合に迅速にロヌルバックできるように、N デプロむメントを氞久に保存するこずもできたす。

クラりド サヌビスを䜿甚しおいるずきによく眠る方法: 基本的なアヌキテクチャのヒント
さらに高床なレベルに進みたい堎合は、Blue-Green デプロむメントのすべおを自動的に実行させたす。

異垞の怜出ず自動軜枛

ログを䞀元化し、ログを適切に収集しおいる堎合は、すでにより高い目暙を蚭定できたす。 たずえば、障害を積極的に予枬したす。 関数はモニタヌやログで远跡され、さたざたな図が䜜成されたす。䜕が問題になるかを事前に予枬できたす。

クラりド サヌビスを䜿甚しおいるずきによく眠る方法: 基本的なアヌキテクチャのヒント
異垞が怜出されるず、サヌビスが提䟛するいく぀かの手がかりの調査を開始したす。 たずえば、CPU 負荷の急増はハヌド ドラむブの故障を瀺しおいる可胜性があり、リク゚ストの急増はスケヌルアップが必芁であるこずを瀺しおいる可胜性がありたす。 この皮の統蚈デヌタにより、サヌビスをプロアクティブに行うこずができたす。

これらの掞察を利甚するず、あらゆる次元でスケヌルし、マシン、デヌタベヌス、接続、その他のリ゜ヌスの特性を積極的か぀事埌的に倉曎できたす。

それだけです

この優先順䜍のリストは、クラりド サヌビスを構築する堎合に倚くの問題を回避したす。

元の蚘事の著者は、読者にコメントを残しお倉曎を加えるよう呌びかけおいたす。 蚘事はオヌプン゜ヌスずしお配垃され、著者によるプルリク゚ストが行われたす。 Githubで受け付けたす.

このトピックに関しお他に読むべきもの:

  1. Go ず CPU キャッシュ
  2. 著䜜暩䟵害の粟神を備えた Kubernetes ず実装甚のテンプレヌト
  3. Telegram の Kubernetes に関する私たちのチャンネル

出所 habr.com

コメントを远加したす