SRE になるために役立つシステム エンジニアリングのシラバスのご紹介
Max Saltonstall
Developer Advocate
Salim Virji
SRE Technical Program Manager
※この投稿は米国時間 2024 年 6 月 14 日に、Google Cloud blog に投稿されたものの抄訳です。
Google のサイト信頼性エンジニア(SRE)が広く用いているシステム エンジニアリングの規範は、信頼性の高いシステム(コード、インフラストラクチャなどあらゆるもの)の作成と実装を通して形成されたものです。システム エンジニアリングの詳細とベスト プラクティスの実践方法を学んでいただけるよう、スタートガイドとなるリソースをいくつかまとめてみました。
The Systems Engineering Side of Site Reliability Engineering(USENIX の論文)システム エンジニアとは何でしょうか?また、SRE、ソフトウェア エンジニア、システム管理者とはどう違うのでしょうか?この論文では、システム エンジニアが採用する主要な視点とアプローチ、交差するサービスセットに対する見方、独自の知識を継続的に増やしていく方法について説明しています。この短いレポートを読めば、Google の SRE がアプリケーションの調査と設計にどのように取り組んでいるのか、Google 内部の視点を理解できます。
Non-abstract Large System Design(SRE ワークブックより)信頼性と拡張性に優れたシステムを設計するには、焦点を絞った実用的なアプローチが必要であり、これを非抽象的な大規模システム設計(NALSD)と呼びます。これを成功させるには、実現可能性、復元力、効率性を考慮しながら設計を繰り返し改良するとともに、現実世界のリソースの制約や期待に設計の重点を置く必要があります。この章を読んだ後に NALSD についてさらに詳しい情報をお求めの場合は、他の実際の例(Reliable Cron across the Planet、Making “Push on Green” a Reality、SRE Best Practices for Capacity Management)をお読みになり、キャパシティ プランニング、コンポーネントの分離、グレースフル デグラデーションに関連する研究について詳細をご確認ください。
Distributed ImageServer ワークショップ(SRE Classroom より)上記のようなシステム設計とエンジニアリングのコンセプトを実践に移されたいとお考えの場合は、こちらの自習型のワークショップが、NALSD の原則を使用して大規模システムをコーディングして展開し、理論と実践のギャップを埋めるのに役立ちます。堅牢でスケーラブルかつ信頼性の高いシステムを作成し、設計を反復するために必要なことを学べます。さらに学習を進めるには、SRE Classroom 内の他のワークショップを確認するか、お住まいの地域の SRE コミュニティに参加してください。
Google Production Environment(YouTube トーク)Google が本番環境を運用している方法について興味がおありの場合、この 15 分間の活気あるトークで、何十億もの人々が毎日使用するオンライン サービスを支えるソフトウェアとハードウェア、そして多数のサブシステムについて詳しく説明しています。Google の物理ネットワーク インフラストラクチャ、Borg クラスタ管理システム、永続ファイル システム、大規模なモノリポジトリなどについて動画で学べます。さらに詳しく学びたい場合は、こちらのテックトークをご覧ください。Google の SRE がキャパシティ管理をどのように処理しているかについて詳しく説明しています。
Reliable Data Processing with Minimal Toi(研究論文)データ処理の信頼性を確保することは、特にバッチジョブや自動化では難しい場合があります。バッチ処理では、費用を節約できる一方でデータの破損やダウンストリームの遅延に関するリスクも生じます。安全性、検証、テストに対する構造化されたアプローチにより、バッチ パイプラインの信頼性と一貫性を高めることができます。さらに詳しくは、こちらの動画をご覧ください。また、A/B テストとカナリア デプロイの詳細をご確認のうえ、BigQuery や Dataflow などのマネージド データツールをお試しください。
How to design a distributed system in 3 hours(YouTube トーク)サービスレベル目標(SLO)の重要性と、それがシステムの信頼性の定義にどのように影響するかについて学べます。上記の分散イメージ サーバー ワークショップと同じ写真処理システムを使用して、ストレージ、サムネイル、ダウンロード サービスを製品全体の一部として考える方法を確認します。最後に、キャッシュとスケーラビリティを詳しく調べて、パフォーマンスと全体的な設計を改善する方法を学びます。上記の内容がたった 60 分のトークにまとめられています。
Implementing Service Level Objectives(O'Reilly の書籍)ポルトガル ウォーター ドッグが表紙の O'Reilly の本には、多くのインサイトが詰まっていますが、すべてを読む時間がない場合は、システム設計が SLO をサポートする方法についての章(第 10 章 - 信頼性の設計)を確認してください。この章では、信頼性の原則を取り入れ、エラー バジェットでリスクを管理し、継続的な改善のためのフィードバック ループを確立しながら、SLO を設計ツールとして使用することの価値が説明されています。また、信頼性の指標を測定、改善、伝達するためのその他のツールや、実装とステークホルダー管理のヒントについても学習します。
Making "Push On Green" a Reality(研究論文)自動化と一貫性は、より高速で信頼性の高いリリースにつながります。また、「早く、頻繁にリリースする」の考え方は、開発者と信頼性エンジニアの両方にとって健全です。この迅速なリリース プロセスは、さまざまな方法で実行でき、手動制御、自動化、構成の程度もさまざまです。信頼性を維持するために、常に、ロールアウト プロセスのテスト、モニタリング、変更に注意してください。
Canary Analysis Service(調査報告)この論文は、本番環境に加える変更を完全にロールアウトする前に、安全性を評価するために Google が使用している自動化システムについて説明しています。このシステムは、変更を受ける小規模なテスト グループ(カナリア)と、変更を受けない大規模なグループ(コントロール)の 2 つのグループ間で主要な指標を比較します。カナリア グループのパフォーマンスが低下した場合、変更は安全ではないと判断し、ロールバックしてさらに反復します。カナリア分析は、SLO や信頼性の高いロールアウト プロセスと非常に相性が良くなっています。
上記のうち特に役立ちそうなものはどれでしたでしょうか。またこれらをどのように適用するようお考えでしょうか。こういった意見をシェアしていただけますと幸いです。さらに知りたい場合は、Google の SRE グループが開発したワークショップ シリーズである SRE Classroom をご覧ください。