アーキテクチャ (IT)システムアーキテクト

グローバルに分散された、低レイテンシの認可決定エンジンを考案し、数十億のオブジェクトと被管理者に対する関係ベースのアクセス制御(ReBAC)ポリシーを評価し、分散キャッシングを通じて99パーセンタイルでサブ10msの評価レイテンシを維持し、カスケード権限取り消し中の因果関係の整合性を保証し、キャッシュ無効化ストーム時のサンダリングハードスタンピードを防ぎ、中央集権的な調整ボトルネックを導入しない方法は?

Hintsage AIアシスタントで面接を突破

質問への回答

アーキテクチャは、3つの層から構成される分散型Zanzibar-インスパイアの認可サービスを中心に構築されています。これには、ステートレスなチェックエンジン評価ノード、グローバルに分散されたグラフストレージスナップショットデータベース、およびキャッシュ無効化のためのイベント駆動型ウォッチパイプラインが含まれます。この設計により、リード重視の認可チェックと書き込み重視の権限更新が分離され、評価能力の独立したスケーリングが可能になり、関係の変異に対する強力な整合性保証を維持します。このシステムは、Googleのズーキー方式を利用して、エッジキャッシングのパフォーマンスを犠牲にすることなく、古さを制限します。

エッジロケーションに展開されたチェックエンジンノードは、ローカルのメモリキャッシュとコンパクトな権限ビットマップを使用して認可クエリを評価します。これらのノードは、レプリケートされたetcdクラスタから名前空間構成をロードし、地理的に分割されたCockroachDBまたはSpannerインスタンスから関係タプルを解決します。このインスタンスは、TrueTimeまたはハイブリッド論理クロックを介して外部の整合性を提供します。各ノードはBloomフィルタを維持し、明らかに存在しない関係によるキャッシュミスがデータベースにヒットしないようにします。

「新しい敵問題」を処理するために、システムはズーキー・トークン(スナップショット整合性をエンコードする不透明なタイムスタンプ)を実装し、設定可能な不確実性ウィンドウ内でセンシティブな操作に対してキャッシュミスを強制します。クライアントは最初のチェック時にこれらのトークンを受け取り、高価なリソースにアクセスする際には再生しなければならず、最近取り消された権限がグローバルなキャッシュ無効化を要求することなく即座に可視化されることを保証します。このメカニズムは、低レイテンシの必要性と、即時権限取り消しの可視性というセキュリティ要件のバランスを取ります。

キャッシュ無効化は、すべてのエッジチェックエンジンにタプルの変更を伝播させるために一貫性ハッシングを使用するApache Kafkaに基づくウォッチパイプラインを活用します。これにより、取り消しの嵐が同調したデータベースの爆撃を引き起こさず、ずらしたキャッシュリフレッシュをトリガーします。このパイプラインは、広く共有されるオブジェクトで権限変更が発生する場合に、サンダリングハードを防ぐためにジッターされた指数バックオフを適用します。このアーキテクチャにより、システムはキャッシュヒットのサブ10msレイテンシを維持し、地理的に分散したノード間で権限更新の因果整合性を保証します。

実生活の状況

5000万人の企業ユーザーにサービスを提供するグローバルな文書コラボレーションプラットフォームは、ピーク時に複雑な共有階層を評価する際に壊滅的なレイテンシスパイクを経験しました。各文書アクセスには、ネストされたグループメンバーシップと単一のPostgreSQLクラスターに保存された継承された権限を走査する必要があり、500ms以上のクエリ時間と、従業員が部門やプロジェクトを変更した際の一括権限更新中の頻繁なタイムアウトが発生しました。エンジニアリングチームは、ネストされたフォルダー構造全体でのカスケード権限取り消し中に厳格なセキュリティ保証を維持しながらサブ10msレイテンシを達成できるソリューションを必要としていました。

最初のアプローチは、攻撃的なRedisマテリアライズドビューキャッシング権限パスを持つ集中型PostgreSQLクラスターの維持を評価しました。プロには、権限の取り消しの即時可視性を保証する強力なACID保証と、複雑なマルチテーブル更新のための簡単なトランザクションセマンティクスが含まれました。デメリットには、一括権限変更中の深刻な書き込みボトルネック、人気の文書が更新される際のキャッシュスタンピードのリスク、およびセキュリティに重要な決定に対して受け入れられないレプリケーション遅延を導入する複雑な読み取りレプリカなしで地理的に読み取りスループットをスケールさせる根本的な不可能性が含まれます。

2つ目のアプローチは、アプリケーション側の権限解決とTTLベースのキャッシュの有効期限を持つ完全に非正規化されたApache Cassandraの展開を提案しました。プロは、関係の変異に対する優れた書き込みスループットと、単一障害点なしでの地域的な可用性を含みました。デメリットは、権限の取り消しがゴシッププロトコルの遅延により数分間表示され続け、原子性のないカスケーディング削除が作成するセキュリティホールもあり、ユーザーが親グループから削除された後もリソースへのアクセスを保持するという最小権限の原則違反が示されました。

チームは最終的に、関係タプルストレージにCockroachDBを使用し、ポリシー強制ポイントとしてEnvoyサイドカーを採用し、Bloomフィルタの前面にされた地元評価キャッシュを持つ水平スケーリングされたチェックエンジンノードを利用するZanzibarスタイルのアーキテクチャを選択しました。この選択は、ローカル評価キャッシュとApache Kafka駆動の無効化ストリームを通じて、シリアル可能なデフォルトの隔離によって強力な整合性を保持しながら、権限の書き込みにおける強力な整合性の必要性をバランスさせました。その結果、p99認可レイテンシは500msから4msに削減され、グローバルで毎秒1500万のチェックをサポートし、すべてのエッジノードに150ミリ秒内で権限の取り消しが伝播され、99.99%の可用性を維持しました。

候補者がよく見落とす点

権限取り消し後にスタレな「許可」決定がすぐに返されるのをどのように防ぎますか?分散キャッシュのパフォーマンスの利点を損なうことなく。

候補者はしばしばズーキーパターンやバージョンベクターを見落とし、代わりにすべてのチェックについてのグローバルなキャッシュ無効化やデータベース読み取りを提案します。解決策では、認可サービスは、決定に使用されたデータのスナップショットタイムスタンプをエンコードした整合性トークンを返す必要があります。センシティブな操作や最近の取り消しイベントの後、クライアントはこのトークンを提示しなければならず、チェックエンジンがローカルキャッシュがトークンのタイムスタンプより前であるかどうかを中央ストアに対して検証する必要があります。これにより、グローバルなキャッシュ無効化を要求することなく因果整合性が保証され、大多数のリクエストに対する読み取りパフォーマンスが損なわれることはありません。

広く共有されるオブジェクトの権限が変更された場合、数百万の同時キャッシュリフレッシュを引き起こす可能性がある場合、キャッシュ無効化メカニズムはどのように設計しますか?

重要な技術は、キャッシュキーの一貫性ハッシングとエッジノードでのジッターされた指数バックオフおよびリクエストの結合を組み合わせることです。ウォッチパイプラインがタプル変更をブロードキャストすると、エッジノードは直ちに無効化せず、オブジェクトIDのハッシュを使用して無効化のスケジュールを設定し、リフレッシュを時間ウィンドウに分散させます。さらに、各チェックエンジンは進行中のチェックのためのフライトグループを維持し、同じオブジェクトに対する同時リクエストが単一のバックエンドクエリ結果を共有し、人気のあるオブジェクトの更新中にデータベースのオーバーロードを防ぎます。

単純な有向グラフトラバースを使用することがReBACポリシーのモデル化に十分ではないのはなぜであり、分散評価環境での交差と排除の制約をどのように処理しますか?

単純なグラフトラバースは、「ユーザーがグループAにいる場合のみ許可し、グループBにはいない場合」というような洗練されたポリシーのために必要なセット操作をキャプチャすることができません。解決策は、名前空間構成が決定ツリーにコンパイルされるリライトシステムを実装し、正と負の関係タプルを明示的に保存します。交差制約に対して、システムは両方のセットをクエリし、チェックエンジンで交差を計算します。一方、排除には短絡評価が使用され、早期終了が行われます。このアプローチにより、複雑なブールロジックが効率的に評価され、データベースへの複数の往復を必要としません。