スケーラブルな分散プラットフォームを実行するには、顧客が必要なときに必要なものを確実に入手できるように、信頼性への取り組みが必要です。 特にRobloxと同じくらい大きなプラットフォームでは、依存関係はかなり複雑になる可能性があります。 信頼性の高いサービスを構築するということは、依存関係の複雑さや状態に関係なく、特定のサービスが中断されないことを意味します(つまり、 利用できます)、バグなしで動作します(つまり高い 品質)およびエラーなし(つまり フォールトトレランス).
信頼性が重要な理由
私たちが構築したコンプライアンスサービスはプラットフォームのコアコンポーネントであるため、アカウントIDチームはより高い信頼性の達成に取り組んでいます。 コンプライアンス違反は深刻な結果をもたらす可能性があります。 Robloxの自然な動作をブロックするコストは非常に高く、障害やユーザーエクスペリエンスの低下後に回復するために追加のリソースが必要になります。
信頼性への一般的なアプローチは、主に可用性に焦点を当てていますが、場合によっては、用語が混在して誤用されています。 可用性のほとんどの測定では、サービスが稼働しているかどうかを評価するだけですが、パーティションの許容範囲や一貫性などの側面は、忘れられたり誤解されたりすることがあります。
CAP定理によれば、分散システムはこれらXNUMXつの側面のうちXNUMXつしか保証できないため、コンプライアンスサービスは、高可用性とパーティション耐性を実現するために、ある程度の一貫性を犠牲にします。 それにもかかわらず、私たちのサービスはほとんど犠牲にせず、以下で説明する合理的なアーキテクチャの変更との良好な一貫性を実現するメカニズムを見つけました。
より高い信頼性に到達するためのプロセスは反復的であり、インシデントが発生する前に欠陥を防止、発見、検出、および修正するために、継続的な作業と一致する厳密な測定が行われます。 私たちのチームは、次のプラクティスで強い価値を特定しました。
- 正しい測定 – 品質がどのように顧客に提供されるか、また依存関係によってどのように品質が当社に提供されるかに関する完全な可観測性を構築します。
- 積極的な期待 – アーキテクチャのレビューや依存関係のリスク評価などのアクティビティを実行します。
- 修正を優先する – サービスおよびサービスにリンクされている依存関係のインシデント レポートの解決にさらに注意を払います。
より高い信頼性を構築するには、品質の文化が必要です。 私たちのチームはすでにパフォーマンス主導の開発に投資しており、プロセスの成功はその採用にかかっていることを知っています。 チームはこのプロセスを完全に採用し、標準として実践を適用しました。 次の図は、プロセスのコンポーネントを示しています。
正しい測定の力
メトリクスについて詳しく説明する前に、サービス レベルの測定について簡単に説明しておく必要があります。
- SLO (Service Level Objective) は、私たちのチームが目指す信頼性の目標 (つまり 99.999%) です。
- SLI (Service Level Indicator) は、一定の期間内で達成された信頼性 (つまり、昨年 99.975 月に XNUMX%) です。
- SLA (サービス レベル アグリーメント) は、特定の期間 (つまり 99.99 週間あたり XNUMX%) で提供することが合意され、消費者が期待する信頼性です。
SLIは、可用性(未処理または欠落した応答がない)、フォールトトレランス(サービスエラーがない)、および達成された品質(予期しないエラーがない)を反映する必要があります。 したがって、SLIを、サービスに送信されたリクエストの総数と比較した成功した応答の「成功率」として定義しました。 成功した応答とは、時間と形式でディスパッチされた要求です。 接続、サービス、または予期しないエラーが発生しました。
このSLIまたは成功率は、消費者(つまり、クライアント)の観点から収集されます。 目的は、消費者に提供される実際のエンドツーエンドのエクスペリエンスを測定して、SLAが満たされていると確信できるようにすることです。 そうしないと、クライアントと接続するためのすべてのインフラストラクチャの懸念を無視するという誤った信頼感が生まれます。 コンシューマーSLIと同様に、潜在的なリスクを追跡するために依存関係SLIを収集します。 実際には、すべての依存関係SLAはサービスSLAと整合している必要があり、それらとの直接的な依存関係があります。 XNUMXつの失敗は、すべての失敗を意味します。 また、サービス自体(つまり、サーバー)からのメトリックを追跡および報告しますが、これは高い信頼性の実用的なソースではありません。
SLIに加えて、すべてのビルドは、CIワークフローによって報告される品質メトリックを収集します。 この方法は、品質ゲート(つまり、コードカバレッジ)を強力に適用し、コーディング標準コンプライアンスや静的コード分析などの他の意味のあるメトリックを報告するのに役立ちます。 このトピックは以前に別の記事で取り上げられましたが、 パフォーマンスに基づくマイクロサービスの構築。 信頼性について語るとき、品質を熱心に遵守することが重要です。優れたスコアを達成するために投資すればするほど、悪条件下でもシステムが故障しないという確信が高まるからです。
私たちのチームにはXNUMXつのダッシュボードがあります。 XNUMXつは、コンシューマーSLIと依存関係SLIの両方にすべての可視性を提供します。 XNUMXつ目は、すべての品質メトリックを示しています。 私たちはすべてを単一のダッシュボードにマージすることに取り組んでいます。これにより、関心のあるすべての側面が統合され、任意の時間枠でレポートできるようになります。
失敗を予測する
実行 建築レビュー 信頼できることの基本的な部分です。 まず、冗長性が存在するかどうか、および依存関係がダウンしたときにサービスが存続する手段があるかどうかを判断します。 通常のレプリケーションのアイデアを超えて、ほとんどのサービスは、改善されたデュアルキャッシュハイドレーション技術、デュアルリカバリ戦略(フェイルオーバーローカルキューなど)、またはデータ損失戦略(トランザクションサポートなど)を適用しました。 これらのトピックは、別のブログエントリを保証するのに十分な広さですが、最終的には、災害シナリオを考慮したアイデアを実装し、パフォーマンスの低下を最小限に抑えることをお勧めします。
予測するもうXNUMXつの重要な側面は、接続性を向上させる可能性のあるものです。 つまり、クライアントの低遅延に積極的に取り組み、キャッシュ制御技術、サイドカー、タイムアウト、回路ブレーカー、再試行のパフォーマンスポリシーを使用して、非常に高いトラフィックに備えることを意味します。 これらのプラクティスは、HTTPおよびgRPCのキャッシュ、ストア、キュー、相互依存クライアントを含むすべてのクライアントに適用されます。 また、サービスからの健全なシグナルを改善し、ヘルスチェックがすべてのコンテナオーケストレーションで重要な役割を果たすことを理解することも意味します。 当社のサービスのほとんどは、ヘルスチェックフィードバックの一部として劣化の信号を改善し、正常な信号を送信する前にすべての重要なコンポーネントが機能していることを確認します。
サービスを重要な部分と重要でない部分に分割することは、最も重要な機能に焦点を当てるのに役立つことが証明されています。 以前は同じサービスに管理者専用のエンドポイントがあり、それらは頻繁には使用されませんでしたが、全体的なレイテンシメトリックに影響を与えていました。 それらを独自のサービスに移行することは、すべてのメトリックにプラスの方向に影響を与えました。
依存性リスク評価 依存関係に関する潜在的な問題を特定するための重要なツールです。 これは、SLIが低い依存関係を特定し、SLAアラインメントを要求することを意味します。 これらの依存関係は統合ステップ中に特別な注意を払う必要があるため、新しい依存関係が計画に対して十分に成熟しているかどうかをベンチマークおよびテストするために余分な時間を費やします。 良い例のXNUMXつは、RobloxStorage-as-a-Serviceを早期に採用したことです。 このサービスとの統合には、調査結果とフィードバックを伝達するために、バグチケットの提出と定期的な同期会議が必要でした。 この作業はすべて「信頼性」タグを使用しているため、そのソースと優先順位をすばやく特定できます。 新しい依存関係の準備ができていると確信するまで、特性評価は頻繁に行われました。 この余分な作業は、共通の目標のために一緒に行動することを提供することを期待する必要なレベルの信頼性に依存関係を引き出すのに役立ちました。
構造をカオスにもたらす
インシデントが発生することは決して望ましいことではありません。 しかし、それらが発生した場合、信頼性を高めるために収集して学習する意味のある情報があります。 私たちのチームには、通常の全社的なレポートを超えて作成されたチームインシデントレポートがあるため、影響の規模に関係なく、すべてのインシデントに焦点を当てています。 私たちは根本的な原因を指摘し、将来それを軽減するためにすべての作業に優先順位を付けます。 このレポートの一部として、他のチームに優先度の高い依存関係のインシデントを修正し、適切な解決策でフォローアップし、振り返って、私たちに適用される可能性のあるパターンを探すよう呼びかけます。
チームは サービスごとの月次信頼性レポート これには、ここで説明されているすべてのSLI、信頼性のために開いたチケット、およびサービスに関連する可能性のあるインシデントが含まれます。 私たちはこれらのレポートを生成することに慣れているので、次の自然なステップはそれらの抽出を自動化することです。 この定期的な活動を行うことは重要であり、信頼性は常に追跡され、開発において考慮されていることを思い出させてくれます。
当社のインストルメンテーションには、カスタムメトリックと改善されたアラートが含まれているため、既知の予想される問題が発生したときにできるだけ早くページングされます。 誤検知を含むすべてのアラートは、毎週確認されます。 この時点で、すべてのドキュメントを洗練することが重要です。これにより、消費者はアラートがトリガーされたときとエラーが発生したときに何を期待できるかを理解し、次に誰もが何をすべきかを知ることができます(たとえば、プレイブックと統合ガイドラインは頻繁に調整および更新されます)。
最終的には、 私たちの文化に品質を取り入れることは、より高い信頼性を達成する上で最も重要かつ決定的な要素です。 私たちの日常業務に適用されたこれらの慣行がすでにどのように成果を上げているかを観察することができます。 私たちのチームは信頼性に夢中になっており、それが私たちの最も重要な成果です。 私たちは、潜在的な欠陥がもたらす可能性のある影響と、それらがいつ導入される可能性があるかについての認識を高めました。 これらのプラクティスを実装したサービスは、一貫してSLOとSLAに到達しています。 私たちが行っているすべての作業を追跡するのに役立つ信頼性レポートは、私たちのチームが行った作業の証拠であり、他のチームに情報を提供し、影響を与えるための貴重な教訓として立っています。 これが、信頼性の文化がプラットフォームのすべてのコンポーネントに影響を与える方法です。
より高い信頼性への道は簡単ではありませんが、人々が集まる方法を再考した信頼できるプラットフォームを構築したい場合には、それが必要です。
Albertoは、RobloxのアカウントIDチームのプリンシパルソフトウェアエンジニアです。 彼は長い間ゲーム業界に携わっており、多くのAAAゲームタイトルやソーシャルメディアプラットフォームでクレジットを獲得しており、高度にスケーラブルなアーキテクチャに重点を置いています。 現在、彼は最良の開発手法を適用することにより、Robloxが成長と成熟に到達するのを支援しています。
ポスト 大規模なプラットフォームの信頼性を提供 最初に登場した Robloxブログ.
- "
- a
- 私たちについて
- 達成する
- 達成
- 活動
- アクティビティ
- 添加
- NEW
- 養子縁組
- 不利な
- 契約
- すべて
- 既に
- 分析
- 別の
- 予想する
- 適用された
- 申し込む
- 適用
- アプローチ
- 建築の
- 周りに
- 記事
- 関連する
- 注意
- 自動化する
- 賃貸条件の詳細・契約費用のお見積り等について
- 利用できます
- 認知度
- なぜなら
- さ
- 以下
- ベンチマーク
- BEST
- 越えて
- ブログ
- 持って来る
- バグ
- ビルド
- コール
- これ
- 例
- 原因となる
- 小切手
- クライアント
- コード
- コーディング
- 収集する
- 来ます
- コミット
- コミットメント
- コミットした
- コマンドと
- 伝える
- 比べ
- コンプライアンス
- コンポーネント
- 条件
- 信頼
- 確信して
- お問合せ
- 接続性
- 検討
- 絶えず
- consumer
- 消費者
- コンテナ
- 基本
- 可能性
- 作ります
- 作成した
- Applied Deposits
- 重大な
- 文化
- カスタム
- Customers
- ダッシュボード
- データ
- より深い
- 配信
- 配信する
- 提供します
- 需要
- 依存
- 決定する
- 開発
- 直接
- 災害
- 配布
- ダウン
- ドリブン
- 間に
- 早い
- 端から端まで
- エンジニア
- 特に
- 誰も
- すべてのもの
- 例
- 優れた
- 期待する
- 予想される
- 体験
- 広範囲
- 不良解析
- フィードバック
- 名
- 修正する
- フォーカス
- 焦点を当てて
- 焦点
- フォロー中
- フォーム
- 発見
- から
- フル
- 機能的な
- 機能性
- 基本的な
- 未来
- ゲーム
- ゲイツ
- 生成
- 目標
- 良い
- 成長性
- 保証
- ガイドライン
- 起こる
- が起こった
- 健康
- 助けます
- 助け
- ことができます
- こちら
- ハイ
- より高い
- ハイライト
- 非常に
- 認定条件
- HTTPS
- 考え
- 識別する
- アイデンティティ
- 影響
- 実装する
- 実装
- 重要
- 改善します
- 改善されました
- 改善
- その他の
- 含ま
- 含めて
- 増加した
- 産業を変えます
- 影響
- 情報
- インフラ関連事業
- 統合
- 意図
- 投資
- IT
- 自体
- 知っている
- 既知の
- LEARN
- レベル
- 少し
- ローカル
- 長い
- 見て
- make
- マッチング
- 事態
- 成熟した
- 満期
- 意味
- 意味のある
- 手段
- だけど
- メディア
- ミーティング
- メトリック
- 混合
- 他には?
- 最も
- 移動する
- ナチュラル
- 必要
- それにもかかわらず
- 操作する
- 操作
- 編成
- 注文
- その他
- 全体
- 自分の
- 部
- のワークプ
- パフォーマンス
- ピース
- プラン
- プラットフォーム
- プラットフォーム
- プレイ
- ポイント
- 視点
- ポリシー
- 正の
- 可能
- 潜在的な
- 電力
- 練習
- 現在
- 校長
- 優先順位
- 問題
- プロセス
- 品質
- クイック
- すぐに
- リーチ
- 合理的な
- 回復する
- 回復
- 反映する
- に対する
- 信頼性のある
- レポート
- レポート
- リクエスト
- の提出が必要です
- リソース
- レビュー
- リスク
- ロード
- ROBLOX
- 職種
- ルート
- ランニング
- 同じ
- ド電源のデ
- 規模
- センス
- サービス
- サービス
- 同様の
- から
- So
- 社会
- ソーシャルメディア
- ソーシャルメディアのプラットフォーム
- ソフトウェア
- ソフトウェアエンジニア
- 一部
- 特別
- スタンド
- 標準
- Status:
- 店舗
- 作戦
- 強い
- 成功
- 成功した
- サポート
- 会話
- チーム
- テクニック
- 条件
- test
- したがって、
- 三
- チケット
- 時間
- 時間枠
- 一緒に
- 公差
- ツール
- トピック
- トピック
- 追跡する
- トラフィック
- 理解する
- us
- 値
- 確認する
- 詳しく見る
- 視認性
- 週間
- この試験は
- かどうか
- while
- 無し
- 仕事
- ワーキング
- でしょう