Orivel Orivel
メニューを開く

グローバルな読み取りトラフィック向けのURL短縮サービスを設計する

このシステム設計ベンチマークに対する各AIの回答と比較結果を確認できます。

いいね・お気に入り機能を使うにはログインまたは新規登録が必要です。 新規登録

X f L

目次

お題概要

比較ジャンル

システム設計

お題作成モデル

回答モデル

採点モデル

お題本文

Bitlyに類似した本番環境向けのURL短縮サービスを設計してください。システムはユーザーが長いURLへリダイレクトする短縮リンクを作成できること、オプションのカスタム別名(エイリアス)をサポートすること、リンクごとの基本的なクリック解析を提供することを満たす必要があります。 以下の要件と制約を仮定します: - 月間で1億2千万件(120 million)の新しい短縮リンクが作成される。 - 月間で15億件(1.5 billion)のリダイレクトが発生する。 - ニュースイベントやマーケティングキャンペーン時に読み取りトラフィックが非常にバーストしやすい。 -...

さらに表示

Bitlyに類似した本番環境向けのURL短縮サービスを設計してください。システムはユーザーが長いURLへリダイレクトする短縮リンクを作成できること、オプションのカスタム別名(エイリアス)をサポートすること、リンクごとの基本的なクリック解析を提供することを満たす必要があります。 以下の要件と制約を仮定します: - 月間で1億2千万件(120 million)の新しい短縮リンクが作成される。 - 月間で15億件(1.5 billion)のリダイレクトが発生する。 - ニュースイベントやマーケティングキャンペーン時に読み取りトラフィックが非常にバーストしやすい。 - リダイレクトのレイテンシは、北米およびヨーロッパのユーザーに対して95パーセンタイルで80ms未満であること。 - データセンターが1箇所ダウンしても短縮リンクは引き続き機能すること。 - 解析は完全にリアルタイムである必要はないが、通常は5分以内に表示されること。 - ユーザーは作成から10分以内のみ宛先URLを更新できる。 - リンクはユーザー定義の任意の時刻で有効期限を設定できる。 - 悪用防止は重要:明らかなスパムや悪意のあるリダイレクトを減らす必要があるが、深いセキュリティ実装の詳細までは求められない。 回答には以下を含めてください: - 高レベルのアーキテクチャと主要コンポーネント。 - コアデータモデルとストレージの選択。 - リンク作成、リンク解決(リダイレクト)、解析を読むためのAPI設計。 - トラフィック成長とバースト処理のためのスケーリング戦略。 - 信頼性およびディザスタリカバリのアプローチ。 - ID生成、データベース選択、キャッシュ、一貫性、解析パイプライン設計を含む主要なトレードオフ。 - システムを監視し障害を検出する方法についての簡単なメモ。

補足情報

適切な管理下のロードバランサ、オブジェクトストレージ、キューまたはストリーム、分散キャッシュ、リレーショナルまたはNoSQLデータベースが利用可能な合理的なクラウド環境を想定してください。追加の仮定を行う場合は、それらを明確に記載できます。

採点方針

優れた回答は、ワークロードとレイテンシ目標に一致する一貫したエンドツーエンドのアーキテクチャを提示し、書き込みパス、リダイレクト(読み取り)パス、解析パスの間で適切に分離されているべきです。ストレージとキャッシュの選択理由を正当化し、グローバルまたはマルチリージョンでの可用性、バーストや障害、古いデータおよび最終的整合性の扱い方について説明する必要があります。良い回答は、技術名を挙げるだけでなく実用的なトレードオフについて議論するべきです。APIの形状、データモデリング、スケーラビリティ、信頼性、および監視について、内部的に一貫して実装可能な方法でカバーしてください。

回答

## URL短縮サービス設計 ### 1. 高レベルアーキテクチャと主要コンポーネント システムは、高可用性と低遅延を実現するために、複数のアベイラビリティゾーンとリージョンにデプロイされた複数のマイクロサービスで構成されます。 * **APIゲートウェイ:** 受信リクエスト、認証、レート制限を処理し、リクエストを適切なサービスにルーティングします。 * **リンク作成サービス:** 短縮URLの生成、保存、カスタムエイリアスの処理を担当します。ID生成サービスおよびメタデータデータベースと連携します。 * **リンク解決サービス:** リダイレクトリクエストの処理を担当します。キャッシュまたはデータベースからロングURLを取得し、リダイレクトを実行しま...

全文を表示

## URL短縮サービス設計 ### 1. 高レベルアーキテクチャと主要コンポーネント システムは、高可用性と低遅延を実現するために、複数のアベイラビリティゾーンとリージョンにデプロイされた複数のマイクロサービスで構成されます。 * **APIゲートウェイ:** 受信リクエスト、認証、レート制限を処理し、リクエストを適切なサービスにルーティングします。 * **リンク作成サービス:** 短縮URLの生成、保存、カスタムエイリアスの処理を担当します。ID生成サービスおよびメタデータデータベースと連携します。 * **リンク解決サービス:** リダイレクトリクエストの処理を担当します。キャッシュまたはデータベースからロングURLを取得し、リダイレクトを実行します。クリックイベントも記録します。 * **分析サービス:** クリックログを処理し、データを集計して分析レポートを提供します。 * **ID生成サービス:** URLの一意な短縮IDを生成します。これは、独立した高可用性サービスにすることができます。 * **クリックログ記録サービス:** 生のクリックイベントを取り込むための高スループットサービスです。 * **Web UI/管理パネル:** ユーザーがリンクを作成、管理し、分析を表示するためのインターフェースです。 **アーキテクチャ図(概念):** ``` +-----------------+ +-----------------+ +-----------------------+ | ロードバランサ |----->| APIゲートウェイ |----->| リンク作成サービス | +-----------------+ | | (リダイレクト) v +-----------------+ +-----------------+ +-----------------------+ | ロードバランサ |----->| リンク解決サービス | +-----------------+ | | (クリックイベント) v +-----------------------+ | クリックログ記録サービス | +-----------------------+ | | (生ログ) v +-----------------------+ | メッセージキュー | +-----------------------+ | | (処理済みデータ) v +-----------------------+ | 分析サービス | +-----------------------+ | | (分析データ) v +-----------------------+ | 分析データベース | +-----------------------+ **データベース:** * **メタデータデータベース:** 短縮URLとロングURLのマッピング、カスタムエイリアス、作成タイムスタンプ、有効期限、ユーザー情報を格納します。 * **分析データベース:** リンクごとのクリックデータを集計して格納します。 * **ID生成データベース/サービス:** 一意なIDを生成するために使用します。 **キャッシュ:** * **読み取りキャッシュ:** よくアクセスされる短縮URLをキャッシュし、リダイレクトを高速化します。 **メッセージキュー/ストリーム:** * クリックログ記録とリダイレクトパスを分離し、分析のための非同期処理を可能にします。

判定

2位

勝利票

0 / 3

平均スコア

73
採点モデル OpenAI GPT-5.4

総合点

69

総評

回答Aは、アーキテクチャ、データモデル、API、スケーリング、信頼性、トレードオフ、モニタリングなど、ほとんどの必須領域を網羅しており、一貫性があります。その強みは、広範なカバレッジと、リダイレクト、作成、分析の懸念事項を適切に分離している点です。しかし、かなり一般的であり、キャパシティプランニングを定量化しておらず、グローバルな読み取りパスの最適化については弱く、マルチリージョンの一貫性動作、カスタムエイリアスの強制戦略、バースト的なグローバルトラフィック下でレイテンシターゲットを満たす方法など、いくつかの重要な実装詳細が不明確なままです。また、CassandraまたはシャーディングされたPostgreSQLのいずれかを提案するなど、一部の選択肢は内部的に曖昧であり、明確に1つの設計にコミットしていません。

採点詳細を表示

設計の質

重み 30%
68

アーキテクチャには主要なコンポーネントと関心の分離が適切に含まれていますが、依然としてハイレベルで一般的です。リージョン展開とキャッシュの使用を超えて、ホットなリダイレクトパスをグローバルレイテンシに対して強力に最適化しておらず、マルチリージョントポロジーは完全に検討されていません。

完全性

重み 20%
71

API、データモデル、スケーリング、信頼性、トレードオフ、モニタリングなど、要求されたほぼすべてのセクションをカバーしています。しかし、要件固有の詳細、特に10分間の更新ルールの強制、グローバルフェイルオーバー動作、および不正利用防止の深さについては、一部軽いです。

トレードオフの説明力

重み 20%
69

いくつかのトレードオフと代替テクノロジーがリストアップされていますが、その理由は、このシステムの正確なワークロードと制約に密接に関連しているというよりは、広範であることが多いです。一部の決定は、明確に選択された設計に着地するのではなく、曖昧なままです。

拡張性・信頼性

重み 20%
67

ステートレスサービス、シャーディング、キャッシング、キュー、マルチリージョン展開を正しく提案していますが、具体的なスループットの考慮と特定の障害モードの処理が不足しています。災害復旧は、明確に定義されたアクティブアクティブまたはフェイルオーバーストラテジーなしに、一般的な用語で説明されています。

分かりやすさ

重み 10%
76

構造は理解しやすく、明確なセクションに分かれています。しかし、一部は一般的なテンプレートのように読め、一部のテクノロジーオプションと繰り返されるパターンが精度を低下させています。

総合点

66

総評

回答Aは、必要なセクションをすべて網羅した、堅実でよく構成された設計を示しています。適切なコンポーネント(APIゲートウェイ、リンク作成、リダイレクト、分析パイプライン、キャッシング、メッセージキュー)を特定し、トレードオフについて合理的に議論しています。しかし、定量的な根拠が不足しています。RPSの概算計算がなく、80ミリ秒未満のレイテンシ目標に対するCDN/エッジキャッシングに関する具体的な議論がなく、マルチリージョン戦略は曖昧です(GeoDNSは言及されていますが、詳細は説明されていません)。302と301のリダイレクトのトレードオフについては議論されていません。10分間の更新ウィンドウのキャッシュ無効化については言及されていますが、深く分析されていません。ID生成セクションではオプションがリストアップされていますが、Snowflakeの選択はエンコーディングの観点から十分に説明されていません。全体として、有能ではありますが、やや表層的な回答です。

採点詳細を表示

設計の質

重み 30%
65

Aは適切なコンポーネントを特定し、書き込み、リダイレクト、分析パスを正しく分離しています。しかし、80ミリ秒未満のP95レイテンシ目標に不可欠なCDN/エッジレイヤーが欠けており、マルチリージョン戦略は曖昧です。不正利用防止コンポーネントは、専用の作成時チェックとしてではなく、リダイレクトパスでわずかに言及されているだけです。

完全性

重み 20%
68

Aは必要なセクション(アーキテクチャ、データモデル、API、スケーリング、信頼性、トレードオフ、監視)をすべてカバーしていますが、302対301の議論、容量計算の欠如、CDNレイヤーや更新ウィンドウの特定のキャッシュTTL戦略への対応が欠けています。

トレードオフの説明力

重み 20%
62

AはID生成、データベース選択、キャッシング、一貫性、分析パイプラインのトレードオフをリストアップしていますが、その理由はしばしば一般的です(例:「Cassandraは高い書き込みスループットに適している」)が、特定のシステム要件には結びついていません。10分間の更新ウィンドウのキャッシュ無効化のトレードオフは、十分に探求されていません。

拡張性・信頼性

重み 20%
65

AはマルチAZ、マルチリージョン、GeoDNS、リードレプリカ、シャーディング、分析の分離のためのKafkaに言及しています。しかし、設計を検証するための数値がなく、DynamoDBのオンデマンドとプロビジョニングの議論がなく、フェイルオーバーメカニズムは曖昧です。正常な劣化については言及されていますが、詳細はありません。

分かりやすさ

重み 10%
70

Aは明確な見出しと箇条書きでよく整理されています。ASCII図は良いタッチですが、不完全です(右側が切り取られています)。文章は明確ですが、時には強い結論なしにオプションをリストアップしています。

採点モデル Google Gemini 2.5 Pro

総合点

86

総評

回答Aは、URL短縮サービスに対して非常に堅牢で包括的な設計を提供しています。主要なコンポーネントを正しく特定し、読み取り、書き込み、分析パスを分離し、CassandraやKafkaのような妥当な技術選択を提案しています。設計は、スケーラビリティ、信頼性、監視を含む、プロンプトで要求されたすべての側面をカバーしています。主な弱点は、例えば「アクティブ-アクティブ」実装の詳細を述べずに「マルチリージョンデプロイメント」に言及するなど、ハイレベル戦略がやや一般的であることです。トレードオフ分析は良好ですが、最良の設計に見られるような深みとニュアンスが欠けています。

採点詳細を表示

設計の質

重み 30%
85

アーキテクチャは、マイクロサービスへの関心の明確な分離により、よく構造化されています。分析パスを分離するためにメッセージキューの必要性を正しく特定しています。しかし、マルチリージョンの戦略は、特定のアクティブ-アクティブまたはアクティブ-パッシブ実装を詳細に説明するのではなく、「フェイルオーバーのためのGeoDNS」として一般的に記述されています。

完全性

重み 20%
90

回答は非常に完全であり、アーキテクチャやデータモデルから監視やトレードオフまで、プロンプトで要求されたすべてのセクションに対応しています。すべての主要な要件がカバーされています。

トレードオフの説明力

重み 20%
80

ID生成、データベース選択、キャッシングなどの主要な決定をカバーするトレードオフ分析は堅実です。推論は論理的かつ正確です。しかし、問題のより微妙で実践的なニュアンスのいくつかを十分に探求していません。

拡張性・信頼性

重み 20%
85

スケーラビリティと信頼性に関する計画は強力であり、水平スケーリング、キャッシング、データベースシャーディング、マルチAZ/マルチリージョンデプロイメントに言及しています。概念はすべて正しく、よく説明されています。

分かりやすさ

重み 10%
90

回答は非常にうまく書かれており、明確に構造化されています。見出し、箇条書き、概念図の使用により、設計は容易に追跡および理解できます。

ハイレベルアーキテクチャと主要コンポーネント システムは、グローバルanycast DNSまたはAWS Global AcceleratorやCloudflareのようなグローバルロードバランサーの後ろで、少なくとも2つの地理的リージョン(US-EastおよびEU-West)にデプロイされたいくつかのレイヤーに編成されています。 1. エッジおよびCDNレイヤー:グローバルロードバランサーがユーザーを最も近いリージョナルクラスターにルーティングします。CDNまたはエッジキャッシュ(Cloudflare Workers、CloudFront)は、エッジで一般的なリダイレクトマッピングをキャッシュし、80ms未満のP95レイテンシを実現します。 2. APIゲートウェイおよびレートリミッター:各リージョンは、認証、レート制...

全文を表示

ハイレベルアーキテクチャと主要コンポーネント システムは、グローバルanycast DNSまたはAWS Global AcceleratorやCloudflareのようなグローバルロードバランサーの後ろで、少なくとも2つの地理的リージョン(US-EastおよびEU-West)にデプロイされたいくつかのレイヤーに編成されています。 1. エッジおよびCDNレイヤー:グローバルロードバランサーがユーザーを最も近いリージョナルクラスターにルーティングします。CDNまたはエッジキャッシュ(Cloudflare Workers、CloudFront)は、エッジで一般的なリダイレクトマッピングをキャッシュし、80ms未満のP95レイテンシを実現します。 2. APIゲートウェイおよびレートリミッター:各リージョンは、認証、レート制限、リクエストルーティングを処理するAPIゲートウェイを実行します。レート制限は、Redisをバックエンドとするスライディングウィンドウカウンターを使用し、悪意のある作成パターンをスロットルします。 3. リンク作成サービス:APIゲートウェイの後ろにあるステートレスサービス。長いURL、オプションのカスタムエイリアス、オプションの有効期限を受け入れ、短いコードを返します。プライマリデータベースに書き込み、キャッシュを無効化またはウォームアップします。 4. リダイレクトサービス:最もトラフィックの多いパス。短いコードに対するGETリクエストを受け取り、宛先URL(まずキャッシュ、次にデータベース)を検索し、HTTP 301または302リダイレクトを発行し、クリックイベントを分析パイプラインに発行します。サービスが常に分析のためにリクエストを確認できるように302リダイレクトを使用しますが、ブラウザとCDNエッジがキャッシュできるように短いTTL(例:60秒)のCache-Controlヘッダーを返します。 5. 分析パイプライン:クリックイベントは分散ストリーム(KafkaまたはAWS Kinesis)に発行されます。ストリームプロセッサ(FlinkまたはKafka Streams)は、1分間のタンブリングウィンドウでリンクごとのクリックを集計し、ロールアップを分析ストアに書き込みます。シンプルなAPIが集計された分析を提供します。 6. 悪用防止サービス:リンク作成時に、宛先URLがGoogle Safe Browsing APIおよび内部ブロックリストに対してチェックされます。軽量なMLスコアラーが悪意のあるパターン(一括作成、既知のスパムドメイン)をフラグ付けします。フラグ付けされたリンクはレビューのために保持されるか、拒否されます。 7. 有効期限とクリーンアップワーカー:定期的なジョブ(cronまたはスケジュールされたLambda)が有効期限切れのリンクをスキャンし、ソフト削除してキャッシュから削除します。 コアデータモデルとストレージの選択 プライマリリンクストア:Amazon DynamoDBまたはApache Cassandraのような分散NoSQLデータベース。テーブルはshort_code(パーティションキー)でキー付けされます。スキーマフィールド:short_code(文字列、主キー)、long_url(文字列)、user_id(文字列)、created_at(タイムスタンプ)、expires_at(タイムスタンプ、NULL可能)、custom_alias(ブール値)、updated_at(タイムスタンプ)。DynamoDBは、シングルミリ秒単位の読み取り、グローバルテーブルによる自動マルチリージョンレプリケーション、および管理されたスケーリングのために選択されています。Cassandraは、ベンダーロックインを避けたいチームの代替手段です。 キャッシュレイヤー:各リージョンのRedis Cluster(またはElastiCache)。キャッシュエントリ:short_code -> long_url、リンクの有効期限に一致するTTLまたはデフォルトの24時間。キャッシュアサイドパターン:リダイレクトサービスはまずRedisをチェックします。ミスの場合、DynamoDBから読み取り、Redisに投入します。 分析ストア:時系列または列指向ストア。ClickHouseまたはAmazon Timestreamは、ディメンション(short_code、timestamp_bucket、country、referrer、device_type)を持つリンクごとのクリック集計を格納します。1分、1時間、1日の粒度での事前集計されたロールアップ。 ユーザーおよびアカウントストア:リレーショナルデータベース(RDS経由のPostgreSQL)は、ユーザーアカウント、APIキー、請求情報、リンク所有権メタデータを格納します。これはトラフィックが少なく、強い一貫性とリレーショナルクエリの恩恵を受けます。 API設計 ショートリンクの作成:POST /api/v1/links。リクエストボディ:long_url(必須)、custom_alias(オプション)、expires_at(オプション)。レスポンス:201 Created、short_code、short_url、created_at、expires_at付き。エラー:カスタムエイリアスが使用されている場合は409 Conflict、URLが無効な場合は400、悪用が検出された場合は403。 宛先URLの更新:PATCH /api/v1/links/{short_code}。リクエストボディ:long_url。created_atから10分以内のみ許可されます。レスポンス:200 OK、更新されたレコード付き。エラー:10分経過後または所有者でない場合は403。 解決(リダイレクト):GET /{short_code}。レスポンス:302 Found、Locationヘッダーがlong_urlに設定されています。期限切れまたは見つからない場合:404。リダイレクトサービスはキャッシュ制御用のレスポンスヘッダーも設定します。 分析の読み取り:GET /api/v1/links/{short_code}/analytics?start=...&end=...&granularity=hour。レスポンス:200 OK、時間バケットごとのクリック数、上位国、上位リファラーの配列付き。 リンクの削除:DELETE /api/v1/links/{short_code}。リンクをソフト削除し、キャッシュを無効化します。 ID生成戦略 短いコードは、base-62アルファベット(a-z、A-Z、0-9)からの7文字で、約3.5兆の可能なコードとなり、長年にわたる予想リンクボリュームをはるかに超えます。生成アプローチ:各サービスインスタンスには、一意のワーカーID(コーディネーションサービスまたは構成から)が割り当てられます。SnowflakeライクなIDジェネレーターは、タイムスタンプコンポーネント、ワーカーID、シーケンス番号を組み合わせた64ビットの一意の整数を生成します。次に、整数はbase-62エンコードされ、7文字に切り捨てまたはパディングされます。これにより、すべての書き込みでのコーディネーションが回避され、一意性が保証されます。カスタムエイリアスの場合は、サービスが一意性制約を伴う挿入を試みます。競合が発生すると409が返されます。 トラフィック増加とバースト処理のためのスケーリング戦略 定常状態の計算:月間15億リダイレクトは約平均580 RPSであり、ニュースイベント中のピークは最大10〜50倍になる可能性があるため、リダイレクトパスはリージョンあたり少なくとも30,000 RPSを処理する必要があります。月間1億2000万のリンク作成は約平均46 RPSです。 リダイレクトパスのスケーリング:リダイレクトサービスはステートレスであり、オートスケーリンググループの後ろで水平にスケーリング可能です。Redisは読み取りの大部分を処理し、DynamoDBのオンデマンドキャパシティはキャッシュミスを処理します。CDNエッジキャッシュは、バイラルリンクの繰り返しリクエストの大部分を吸収し、オリジン負荷を軽減します。 バースト処理:CPUとリクエスト数に基づくオートスケーリングポリシーで、積極的なスケールアウト(60秒で50%の容量を追加)。Redisクラスターはリードレプリカで事前にスケーリングできます。DynamoDBのオンデマンドモードは、事前プロビジョニングなしでバースト書き込みと読み取りを吸収します。CDNは、ホットリンクのバースト読み取りトラフィックを自然に吸収します。 作成パスのスケーリング:バースト性は低いですが、それでもオートスケールされます。書き込みはリージョナルDynamoDBグローバルテーブルに送信され、他のリージョンに非同期でレプリケートされます。 分析パイプラインのスケーリング:Kafkaパーティションは並列処理のためにshort_codeでキー付けされます。Flinkコンシューマーグループは水平にスケーリングされます。ClickHouseクラスターは、クエリのスループットを向上させるためにシャードを追加できます。 信頼性と災害復旧 マルチリージョンアクティブアクティブ:DynamoDBグローバルテーブルは、US-EastとEU-West間でデータをレプリケートし、ラストライターウィン(last-writer-wins)の競合解決を行います。両方のリージョンが読み取りと書き込みを処理します。一方のリージョンが失敗した場合、DNSヘルスチェック(Route 53または同等)により、数秒以内にすべてのトラフィックが生存しているリージョンにルーティングされます。 Redisレプリケーション:各リージョンには、ローカルDynamoDBレプリカから投入される独自のRedisクラスターがあります。Redisが失敗した場合、リダイレクトサービスはわずかに高いレイテンシでDynamoDB読み取りにフォールバックします。 Kafkaの耐久性:Kafkaトピックはレプリケーションファクター3、min.insync.replicas=2です。分析パイプラインが遅延した場合、クリックイベントは再再生のために少なくとも72時間Kafkaに保持されます。 バックアップ:DynamoDBのポイントインタイムリカバリが有効になっています。PostgreSQLは、クロスリージョンレプリケーションを備えた自動日次スナップショットを持っています。ClickHouseデータは毎日S3にバックアップされます。 段階的な機能低下:悪意のあるチェックサービスが遅い場合、作成リクエストはブロックするのではなく、非同期レビュー用のフラグを付けて続行されます。分析パイプラインがダウンしている場合、リダイレクトは影響を受けずに続行されます。クリックイベントはKafkaにキューイングされます。 主なトレードオフ ID生成:SnowflakeライクなIDは、中央集権的なカウンターのボトルネックを回避しますが、ワーカーIDのコーディネーションが必要です。64ビットIDのBase-62エンコーディングは、短くURLセーフなコードを生成します。トレードオフ:衝突を回避し、将来の成長を可能にするために、必要以上にわずかに長いコード(7文字)。 データベース選択:DynamoDBは、管理されたスケーリング、低レイテンシの読み取り、および組み込みのグローバルレプリケーションのために選択されました。トレードオフ:リージョン間の結果整合性(リンク作成はリージョン間でレイテンシが重要ではなく、同じリージョン内のリダイレクトは一貫しているため許容範囲)。Cassandraは、より多くの運用負荷を伴いますが、ベンダーロックインのない同様のプロパティを提供します。 キャッシング:Redisを使用したキャッシュアサイドは、ホットリンクに対してミリ秒未満の読み取りを提供します。トレードオフ:10分以内のURL更新時のキャッシュ無効化は、リージョン間で明示的な無効化が必要であり、一時的な古いデータのウィンドウ(最近作成されたリンクの短いキャッシュTTL、例:10分未満のリンクの場合は30秒で軽減)を導入します。 一貫性:システムは可用性とパーティション耐性(CAPのAP)を優先します。リダイレクトの読み取りは結果整合性がありますが、これは許容範囲です。10分間の更新ウィンドウはアプリケーションレイヤーで強制されます。まれなスプリットブレインシナリオでは、一時的に古いリダイレクトが発生する可能性があります。 分析パイプライン:KafkaとFlinkとClickHouseは、5分間のSLA内でほぼリアルタイムの分析を提供します。トレードオフ:運用上の複雑さが増します。よりシンプルな代替手段は、クリックログをS3に書き込み、Athenaでクエリすることですが、5分間の鮮度要件を満たせません。 302 vs 301リダイレクト:302(一時的)は、サービスが分析のためにすべてのクリックを確認できるように使用されます。トレードオフ:リピート訪問者にとって301よりもわずかにレイテンシが高くなりますが、60秒のTTLを持つCDNエッジキャッシュはこれを軽減しつつ、ほとんどのクリックをキャプチャします。 監視と障害検出 メトリクス:すべてのサービスは、時系列監視システム(PrometheusとGrafana、またはCloudWatch)にメトリクスを発行します。主要なメトリクスには、リダイレクトのP50、P95、P99レイテンシ、キャッシュヒット率(ターゲット95%以上)、DynamoDBの読み取りおよび書き込み消費キャパシティ、Kafkaコンシューマーラグ、エンドポイントごとのエラー率、リンク作成率が含まれます。 アラート:リダイレクトP95レイテンシが80msを超える場合、キャッシュヒット率が90%を下回る場合、Kafkaコンシューマーラグが5分を超える場合(分析SLA)、いずれかのエンドポイントでエラー率が1%を超える場合、およびリージョンヘルスチェックの失敗時にPagerDutyアラートが発報されます。 分散トレーシング:リダイレクトパス(エッジからキャッシュ、データベース、レスポンスまで)全体でOpenTelemetryトレースを実行し、レイテンシの回帰を診断します。 合成監視:複数の地理的場所からのカナリアリクエストが継続的にショートリンクを作成および解決し、エンドツーエンドのレイテンシまたは正確性が低下した場合にアラートを発報します。 ログ集約:構造化ログは、デバッグおよび監査証跡のために中央集権的なシステム(ELKまたはCloudWatch Logs)に出荷されます。 ヘルスチェック:各サービスはヘルスエンドポイントを公開します。ロードバランサーは正常でないインスタンスを削除します。クロスリージョンヘルスチェックはDNSフェイルオーバーをトリガーします。 追加の前提条件:ユーザーは、リンク作成および分析のためにAPIキーを介して認証されます。匿名リンク作成はIPによってレート制限されます。システムはAWS上で実行されますが、設計はポータブルです。短いコードはケースセンシティブです。サービスは、近い将来、数十億の同時アクティブリンクをサポートする必要はありませんが、7文字のコードスペースは数兆までの成長を可能にします。

判定

1位 | 勝者

勝利票

3 / 3

平均スコア

88
採点モデル OpenAI GPT-5.4

総合点

86

総評

回答Bは、ワークロードとレイテンシの要件に強く、具体的で、よく整合しています。エッジキャッシュ、リージョナルクラスター、ステートレスリダイレクトパス、非同期分析、明示的な不正利用制御を備えた実用的なグローバルアーキテクチャを提示しています。有用なスケール計算、明確なAPI形状、詳細なストレージ選択、そして302対301、キャッシュ無効化、結果整合性、マルチリージョンレプリケーションに関する思慮深いトレードオフを示しています。主な弱点は、エンコードされたSnowflake IDを7文字に切り捨てるかパディングするという、文字通りに解釈すると一意性を損なう可能性のある疑問な記述であり、また、いくつかの選択肢はややベンダー固有です。全体として、より実装可能で、指定された制約により適合しています。

採点詳細を表示

設計の質

重み 30%
86

アーキテクチャは、エッジまたはCDN、リージョナルAPIおよびリダイレクトサービス、キャッシュ、プライマリストア、非同期分析といったクリティカルパスを中心に、よく構造化されています。エッジキャッシュとアクティブ/アクティブなリージョナルサービス配置により、レイテンシとバーストの要件に直接対応しています。

完全性

重み 20%
87

作成、解決、分析API、更新ウィンドウ処理、有効期限、不正利用防止、監視、DRを含む、要求されたすべての領域を良好なカバレッジで扱っています。また、有用な追加の仮定と削除APIも含まれており、管理性の向上に役立っています。

トレードオフの説明力

重み 20%
85

トレードオフは具体的に議論され、要件に結び付けられています。例えば、分析のための302対301、DynamoDB対Cassandra、更新ウィンドウ中のキャッシュの鮮度低下、ストリーム処理対バッチ分析などです。その理由は実践的であり、運用の結果に対する認識を示しています。

拡張性・信頼性

重み 20%
88

これは回答Bの強力な分野です。平均およびピークトラフィックを推定し、CDN、Redis、オンデマンドスケーリングを使用してバースト吸収を設計し、マルチリージョンアクティブ/アクティブの動作、キューの耐久性、キャッシュフォールバック、および段階的な低下を具体的に説明しています。

分かりやすさ

重み 10%
84

回答は整理されており、直接的で、具体的です。要件から設計上の選択までをたどりやすく、文章は広範なオプションのカタログ化ではなく、実装可能な決定に焦点を当てています。

総合点

83

総評

回答Bは、ほぼすべての側面で顕著に優れています。まず、具体的なキャパシティ計算(平均580 RPS、ピーク30,000 RPS)から始まり、これが後続のすべての設計上の決定の根拠となっています。CDN/エッジキャッシュによりサブ80msのP95レイテンシ要件に明確に対応し、分析への影響とともに302と301のトレードオフを説明しています。DynamoDBグローバルテーブルを使用したマルチリージョンアクティブアクティブ戦略は、具体的で実行可能です。最近作成されたリンクのキャッシュTTLの差別化(10分未満のリンクは30秒)は、更新ウィンドウの一貫性問題をエレガントに処理します。不正利用防止、有効期限切れワーカー、分析パイプラインはすべて、より具体的に指定されています。監視しきい値は、述べられたSLAに結び付けられています。この回答は内部的に一貫しており、実装可能です。

採点詳細を表示

設計の質

重み 30%
85

Bは、エッジ/CDN、APIゲートウェイ、作成サービス、リダイレクトサービス、分析パイプライン、不正利用防止、有効期限切れワーカーがすべて明確に分離された、優れたレイヤ化アーキテクチャを備えています。CDNエッジキャッシュは、レイテンシSLAに明示的に結び付けられています。DynamoDBグローバルテーブルを使用したアクティブアクティブマルチリージョン設計は、具体的で一貫性があります。

完全性

重み 20%
82

Bは、すべての必須セクションをカバーし、重要な詳細を追加しています:キャパシティ計算、302対301のトレードオフ、CDNエッジキャッシュ、最近作成されたリンクに対するキャッシュTTLの差別化、有効期限切れワーカー、作成時の不正利用防止、および再実行のためのKafka保持期間。追加の前提条件セクションも役立ちます。

トレードオフの説明力

重み 20%
83

Bは、トレードオフを具体的に検討しています:302対301の選択は分析要件に結び付けられ、CDN TTLによって緩和されます。最近作成されたリンクに対するキャッシュTTLの差別化は、更新ウィンドウに直接対処します。DynamoDB対Cassandraのトレードオフには、ベンダーロックインが含まれます。分析パイプラインの複雑さとS3/Athenaの単純さの比較は、5分間のSLAと比較して明示的に行われています。

拡張性・信頼性

重み 20%
84

Bは、キャパシティ計算(平均580 RPS、ピーク30,000 RPS)を提供し、自動スケーリングポリシー(60秒で50%の容量)を指定し、バースト吸収のためにDynamoDBオンデマンドを使用し、特定のタイミングでのDNSヘルスチェックベースのフェイルオーバーを説明しています。障害発生時のRedisからDynamoDBへのフォールバックと、再実行のためのKafka 72時間保持は、具体的な信頼性メカニズムです。

分かりやすさ

重み 10%
78

Bは、優れた構造を持つ流暢な文章で明確に書かれています。Aよりもわずかに密度が高いですが、すべての段落が実質的な内容を含んでいます。図がないことは些細な弱点ですが、文章による説明はそれを補うのに十分正確です。

採点モデル Google Gemini 2.5 Pro

総合点

95

総評

回答Bは、深い専門知識を示す、傑出した、本番環境対応の設計を提供しています。レイテンシのためのCDNエッジレイヤー、マネージドアクティブ-アクティブマルチリージョンセットアップのためのDynamoDBグローバルトリブル、およびSnowflakeのようなIDジェネレーターの使用など、非常に具体的で十分に正当化された実装の詳細を提供することで優れています。トレードオフの理由は特に強力で、特に301対302リダイレクトと最近更新されたリンクのキャッシュ無効化戦略に関する微妙な議論は際立っています。トラフィックの概算計算を含めることで、設計が現実に根ざしたものになっています。この回答は単に正しいだけでなく、実践的で洞察に富んでいます。

採点詳細を表示

設計の質

重み 30%
95

アーキテクチャは傑出しています。レイテンシ目標の達成に不可欠なグローバルエッジ/CDNレイヤーから始まります。DynamoDBグローバルトリブルを使用したマネージドアクティブ-アクティブマルチリージョンセットアップの選択は、具体的で最新であり、要件に完全に適合しています。ユーザー/アカウントストアをリレーショナルDBに分離することも、実用的で思慮深い詳細です。

完全性

重み 20%
95

この回答は非常に包括的です。すべてのプロンプト要件を詳細にカバーしており、さらに「不正行為防止サービス」と「有効期限切れおよびクリーンアップワーカー」を個別のコンポーネントとして明示的に定義し、「追加の仮定」セクションを追加することで、さらに一歩進んでいます。

トレードオフの説明力

重み 20%
98

トレードオフの理由は卓越しており、重要な差別化要因となっています。分析目的での302対301リダイレクトの議論、10分間の更新ウィンドウにおける特定のキャッシュ無効化の課題、および可用性(CAPのAP)を優先するという明確な説明はすべて、深い実践的専門知識の兆候です。

拡張性・信頼性

重み 20%
95

スケーラビリティと信頼性の計画は、より具体的で説得力があります。まず、必要な規模を定量化するための概算計算から始まります。次に、DynamoDBのオンデマンドキャパシティ(バースト用)、積極的な自動スケーリングポリシー、グローバルトリブルを使用した明確なアクティブ-アクティブ災害復旧戦略など、具体的で堅牢なソリューションを提案します。

分かりやすさ

重み 10%
90

回答は非常に明確で、よく整理されています。高レベルのアーキテクチャから具体的なトレードオフまでの論理的な流れは、理解しやすいです。文章は簡潔かつ正確です。

比較結果サマリー

最終順位は、採点者ごとの順位集約(平均順位 + ボルダ方式の同点処理)で決定します。平均点は参考表示です。

採点者数: 3

勝利票

3 / 3

平均点

88
この回答を見る

採点結果

採点モデル Google Gemini 2.5 Pro

勝者理由

回答B胜出,因为它提供了更具体、更实用、更深入的理由设计。虽然回答A非常好并且涵盖了所有要求,但回答B的设计选择更加具体和现代化(例如,DynamoDB Global Tables用于主动-主动多区域)。其权衡分析明显更加细致,特别是关于301与302重定向和缓存策略的讨论,这些对于这个特定问题至关重要。B还包含了性能计算和清晰的边缘缓存策略,这使其满足严格延迟要求的方案更具说服力。

勝者理由

回答B在所有标准上都更加严谨和全面,因此获胜。它提供了量化的容量估算来证明设计选择的合理性,明确地通过CDN边缘缓存解决了延迟SLA问题,提出了更具体、可操作的多区域可靠性策略,用具体的解决方案处理了10分钟更新窗口的缓存失效问题,并将监控警报与已声明的SLA联系起来。回答A涵盖了相同的主题,但层面较浅,缺乏量化依据或细致的权衡分析,这使得B明显更胜一筹。

採点モデル OpenAI GPT-5.4

勝者理由

回答Bは、このタスクの最も重要な次元である低レイテンシのグローバルリダイレクト、バースト処理、マルチリージョン可用性、ニアリアルタイム分析、および実践的なトレードオフの議論において、より具体的で運用上信頼性が高いため、勝利します。エッジキャッシング、アクティブ/アクティブなリージョン展開、容量推定、ストリームベースの分析、およびプロンプトに密接に対応する障害の動作に具体的に対処しています。回答Aは堅実ですが、より一般的であり、設計が特定のレイテンシ、バースト、および災害復旧の制約をどのように満たすかについての精度が低いです。

X f L