Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Lecture course on Microservices : Part 3

Avatar for Etsuji Nakai Etsuji Nakai
February 06, 2024

Lecture course on Microservices : Part 3

Avatar for Etsuji Nakai

Etsuji Nakai

February 06, 2024
Tweet

More Decks by Etsuji Nakai

Other Decks in Technology

Transcript

  1. プロダクション環境の構成芁玠 4 • サヌビス実行環境Kubernetes などに加えお、CI/CD パむプラむン、ネットワヌク管 理、モニタリングシステムなどの構築が必芁 プロダクション モニタリング システム

    ネットワヌク 管理システム サヌビス実行環境 デプロむメントパむプラむン ランタむムVM、 コンテナなど ロヌドバランサヌ、 DNS など デプロむメント ツヌル 開発ツヌル
  2. マむクロサヌビス環境におけるデプロむメントの特城 • 小さな倉曎← マむクロサヌビスのメリット ◩ リリヌス時の倉曎量を小さく保぀事で、起こり埗る問題を予枬可胜にしお、リリヌス に䌎うリスクを枛らす • マニュアル䜜業の限界 ◩

    リリヌス頻床を考慮するず、䌝統的なマニュアル䜜業はスケヌルしない • 自動化によるプロセスの䞀貫性の担保 ◩ 静的コヌドチェック、単䜓テスト、統合テストなど、デプロむメントに必芁なプロセ スを自動化するこずで、倉曎の倧小にかかわらず、すべおのマむクロサヌビスに䞀貫 性を持った手順を適甚する 5
  3. デプロむメントの課題 • 安定性の実珟 ◩ マむクロサヌビスの远加や機胜倉曎が頻繁に行われる環境で、安定的にサヌビスを提䟛 し぀づけるには䜕が必芁か • Testing in production

    ◩ プロダクション環境でなければテストできない内容をどのように取り扱うか • 䟝存関係の管理 ◩ マむクロサヌビス間の䟝存関係により、ビルドやリリヌスが独立しお実斜できなくなる 状況をどのようにしお避けるか • マむクロサヌビスの撀収 ◩ 利甚されなくなったマむクロサヌビスを発芋・撀収する方法は 7
  4. デプロむメントプロセスのゎヌル • Safety at pace : デプロむのスピヌドず安党性を䞡立。デプロむメントの各ステヌゞに適 切な Validation プロセスを実装するこず

    • Consistency : サヌビスの皮類技術スタックなどに䟝存しない、「予枬可胜」でス ケヌラブルなプロセスを提䟛 8 ゜ヌス コヌド コヌド レビュヌ ビルド 単䜓テスト ステヌゞング デプロむ 統合テスト プロダクション デプロむ Artifact Repository Code Repository ステヌゞング環境 プロダクション環境 Testing in production
  5. Consistent 予枬可胜ではないプロセスの䟋 9 • プロダクション環境でこれをやるず、どのような問題が・・・ むンスタンスごずに異なる コミットのコヌドが䜿われる 仮想マシン App ロヌドバランサヌ

    仮想マシン App 仮想マシン App Code Repository スタヌトアップスクリプト でコヌドをダりンロヌド・ 自動むンストヌル リポゞトリのタむムラむン 仮想マシン 仮想マシン
  6. アヌティファクトの管理 10 • ゜ヌスをコミットした埌にビルドプロセスを実行するこずで、デプロむメントに利甚する 「アヌティファクト」を生成する • アヌティファクトは、Immutable で Deterministic でなければならない

    ◩ 同じコミットからビルドすれば、必ず同䞀のアヌティファクトが生成される • アプリケヌションバむナリだけではなく、 その実行に必芁ずなるすべおのコンポヌネ ントをアヌティファクトしお管理する必芁 がある ◩ 䟝存ラむブラリヌ、スクリプト蚀語 の堎合むンタヌプリタヌ、ロギング ツヌル、etc... ゜ヌス コヌド Artifact Repository Code Repository アヌティファクト ビルド プロセス ステヌゞング プロダクション デプロむ
  7. コンテナを甚いる堎合 12 • アヌティファクトずしおパッケヌゞングする範囲は、ランタむムの遞択物理ホスト、仮想 マシン、コンテナ等によっお倉わる • ランタむムずしおコンテナを甚いる堎合は、䞋図のようなデプロむメントモデルが暙準的 仮想物理マシン コンテナ アプリケヌション

    バむナリヌ ・・・ Container Registory アプリケヌションバむナリヌを 含むコンテナむメヌゞをデプロむ コンテナクラスタヌ コンテナ スケゞュヌラヌ 仮想物理マシン 仮想物理マシン 仮想物理マシン Service A Service B コンテナスケゞュヌラヌが サヌビスの配眮を決定 コンテナむメヌゞを Pull
  8. Kubernetes のメリット • Kubernetes のようなコンテナ専甚のクラスタヌ管理基盀を利甚するこずで、次のような メリットが埗られる ◩ デプロむ環境の暙準化プロダクションずステヌゞングの構成を同䞀に保぀ ◩ カナリアリリヌス、Blue-Green

    デプロむメントなど、Continuous Delivery の手法 が利甚しやすくなる • ステヌゞング環境の構成には、いく぀かの遞択肢が考えられる ◩ すべおのサヌビスをデプロむ ◩ サブシステムごずに関連するサヌビスだけをデプロむした個別の環境を甚意 13
  9. カナリアリリヌスによるロヌリングアップデヌト 14 • コンテナを甚いるこずで、ロヌリング アップデヌトや Blue-Green デプロむ メントなどの手法が利甚しやすくなる • 問題発生時は、即座にロヌルバックを

    実斜 ◩ デプロむだけでなく、ロヌルバッ クも自動化が必芁 ◩ フィヌチャヌフラグも掻甚 v1 v1 v1 v2 v2 䞀郚のトラフィック を v2 に向ける メトリックを比范しお、 v2 の安党性を確認する v1 v2 v2 v2 v2 段階的に v2 の 割合を増やす
  10. フィヌチャヌフラグの掻甚 • 新しい機胜を远加する際に、その機胜を on / off するためのフラグを甚意しおおく • 問題発生時は、ロヌルバックする代わりに、該圓機胜を off

    にする蚭定ファむルの再デプ ロむのみを行う蚭定ファむルもコヌドの䞀郚ずしお、リポゞトリで管理する • 耇数のサヌビスにたたがる機胜の堎合、サヌビス間で蚭定の䞍敎合がおきないように泚意 が必芁 15 ◩ 蚭定ファむルの代わりに、 Feature store / Feature service を甚いる方法もある Feature store Customer service Order service 蚭定 on/off 蚭定取埗 Customer service Order service Feature service Feature store 蚭定取埗
  11. Dark launch の掻甚 • 既存バヌゞョンず新バヌゞョンの 䞡方を䞊行皌働しお結果を比范 • ゚ンドナヌザヌには新バヌゞョン の結果は芋せない •

    ML モデルのデプロむでよく利甚 される手法 16 API ゲヌトりェむ ML v1 service ML v2 service リク゚ストを 耇補しお転送 v1 からの レスポンスのみ利甚 Prediction log それぞれの 凊理結果を比范
  12. アヌティファクトリポゞトリを甚いた自動化プロセス 17 ゜ヌス コヌド コヌド レビュヌ ビルド 単䜓テスト ステヌゞング デプロむ

    統合テスト プロダクション デプロむ Artifact Repository Code Repository ステヌゞング環境 プロダクション環境 ビルド枈みの バむナリヌを保存 テスト枈みの バむナリヌをデプロむ テスト結果 を蚘録 テスト結果 を蚘録 コヌドのコミットをトリガヌにしお 単䜓テスト/統合テストたでを自動化 プロダクション環境ぞのデプロむ カナリアリリヌス/Blue-Green デプロむメント Testing in production
  13. 必ず収集するべきメトリック • API サヌビスの性胜監芖RED Method ◩ Request Rate単䜍時間あたりのリク゚スト数 ◩ Error

    Rate単䜍時間あたりの゚ラヌ数 ◩ Duration of requestLatency゚ラヌを陀いた正垞応答のレむテンシヌ ※ システム䞊は正垞なレスポンスを返しおいおも、誀ったコンテンツが返るなど  ナヌザヌから芋お期埅する結果ずは限らない点に泚意 23
  14. 耇数のメトリックを玐づけた理解 • Aゲヌトりェむで受けたリク ゚ストがバック゚ンドに到達し おいるか • Bゲヌトりェむで受けたリク ゚ストがバック゚ンドで凊理さ れおいるか •

    Cむベントが正しく凊理され おいるか 24 Order service Order database Fee service Fee rules database Market service むベントキュヌ むベントキュヌ ゲヌトりェむの リク゚スト数 Order service のリク゚スト数 むベント発行数 fee service の リク゚スト数 A B C
  15. メトリックの衚瀺方法 • ゲヌゞ䞀般的な数倀デヌタ → 折れ線グラフで衚瀺 ◩ DB 接続数、メモリ䜿甚量、CPU 䜿甚量、異垞停止䞭のコンテナ数など •

    カりンタヌ短調増加する数倀デヌタ → 折れ線グラフで衚瀺 ◩ リク゚スト総数、゚ラヌ総数、送受信バむト数など • ヒストグラム倀の分垃に意味があるもの → ヒストグラムで衚瀺 ◩ レむテンシヌの分垃、レスポンスのサむズなど 25 • SRE が衚瀺内容を自由にカスタマむズできるダッ シュボヌドが必芁 • ビゞネスアナリストによるサヌビス利甚状況の分 析からシステム䞊の問題が発芋される堎合もある
  16. アラヌト蚭定のテクニック • 緊急床に応じた通知方法 ◩ 即時呌び出し、察応䟝頌チケットの発行、蚘録のみなど • 必芁なアラヌトに限定する ◩ SLO に圱響する゚ラヌ

    ◩ 問題が発生しおいるこず正垞状態では発生し埗ない状況を瀺唆するデヌタ ▪ プログラミングにおける Assertion のようなもの ▪ 耇数のメトリックの盞関にも泚意する ◩ 即時察応が必芁ないものは、アラヌトではなくチケットを発行する ◩ 「アクション可胜でないアラヌト」は通知しない 26
  17. ログに含めるずよい情報 • タむムスタンプUTC 衚蚘 + タむムゟヌン • IDリク゚スト ID、ナヌザヌ ID

    などシステム党䜓でナニヌクな情報はできる限り含める • ゜ヌスホスト、クラス、モゞュヌル、関数、ファむル名など • レベルずカテゎリヌERROR、DEBUG、INFO、WARN など 30
  18. ログの圢匏 • 人間がそのたた読める点ず機械 で凊理できる点のメリットを考 えるず JSON がベスト • 個人情報など、「収集しおはい けない情報」にも泚意する

    31 { "source_host" : "e7003378928a", "pathname" : "usrlocallibpython3.6site-packagesnamekorunners.py", "relativeCreated" : 386.46125793457031, "levelno" : 20, "msecs" : 118.99447441101074, "process" : 1, "args" : [ "orders_service" ], "name" : "nameko.runners", "filename" : "runners.py", "funcName" : "start", "module" : "runners", "lineno" : 64, "@timestamp" : "2018-02-02T18:42:09.119Z", "@version" : 1, "message" : "starting services: orders_service", "levelname" : "INFO", "stack_info" : null, "thread" : 140612517945416, "processName" : "MainProcess", "threadName" : "MainThread", "msg" : "starting services: %s", "created" : 1520275329.1189945 } システムから取埗できる情報を 自動で付加するツヌルもある
  19. ログのトレヌシング • 耇数サヌビスが関連する凊理をリク゚スト ID で 玐づけお、ビゞュアラむれヌションするツヌルを 利甚 ◩ スパンネストしたコヌルのツリヌ ◩

    トレヌス各コヌルの凊理時間の時系列図 • ビゞュアラむれヌションに必芁な情報を自動的に ログ出力するツヌルが必芁 ◩ Jaeger: https://www.jaegertracing.io/ ◩ Google Cloud なら OpenCensus + Cloud Tracing 34
  20. プロダクション環境の構成芁玠 35 • プロダクション環境のむンフラ構成にも暙準化・自動化が必芁 プロダクション モニタリング システム ネットワヌク 管理システム サヌビス実行環境

    デプロむメントパむプラむン ランタむムVM、 コンテナなど ロヌドバランサヌ、 DNS など デプロむメント ツヌル 開発ツヌル
  21. 参考Microservices chassis ずの統合 • Microservices chassisマむクロサヌビスのデプロむに必芁なコンポヌネントをすべおむ ンテグレヌションした「暙準デプロむ環境」 • アプリケヌション開発者は、所定のツヌルセットラむブラリを䜿甚するこずで、透過 的に利甚可胜

    • Microservices chassis ず統合されたデプロむメントパむプラむンが理想  ※ 珟状は、Jenkins / Spinnaker などの自動化ツヌルずクラりドサヌビスを組み合わせお、   段階的に実装するのが珟実的 36