何百万人ものユーザーのためのシステム設計 (パート2)
何百万人ものユーザーをサポートするシステムを設計することは小さな課題ではなく、継続的かつ継続的な改善が必要です。 何百万人ものユーザーのためのシステム設計(パート1)に続き、数百万人のユーザーに拡大するシステムを構築する方法を調べ続けます。
2022年04月01日
何百万人ものユーザーをサポートするシステムを設計することは小さな課題ではなく、継続的かつ継続的な改善が必要です。 何百万人ものユーザーのためのシステム設計(パート1)に続き、数百万人のユーザーに拡大するシステムを構築する方法を調べ続けます。
何百万人ものユーザーをサポートするシステムを設計することは小さな課題ではなく、継続的かつ継続的な改善が必要です。 何百万人ものユーザーのためのシステム設計(パート1)に続き、数百万人のユーザーに拡大するシステムを構築する方法を調べ続けます。
1. CDN
CDNは、静的コンテンツの配信に使用されるサーバーの地理的に分散したネットワークです。 静的コンテンツには、画像、ビデオ、CSSファイル、JSファイルなどがあります。
動的コンテンツキャッシングは新しい概念であり、この記事の範囲を超えています。 リクエストパス、クエリ文字列、Cookie、リクエストヘッダーに基づいてHTMLページをキャッシュできます。

CDNのワークフロー

・ユーザーが画像のURLを使用してimage.pngを取得した場合。 CDNによって提供されるURLのドメイン名。 最後の2つの画像URLは、AmazonサイトとAkamaiCDNでの画像URLの状態を示すために使用されます。
https://mysite.cloudfront.net/logo.jpg
https://mysite.akamai.com/image-manager/img/logo.jpg
・CDNサーバーのキャッシュにimage.pngがない場合、ネイティブWebサーバーまたはAmazonS3などのオンラインストレージからファイルを要求します。
・オリジンは、キャッシュされた画像の保存期間を説明するHTTPヘッダーTime-to-Liveを含むimage.pngをCDNサーバーに返します。
・CDNは画像をキャッシュしてユーザーAに返します。TTLが期限切れになるまで画像はキャッシュに残ります。
・ユーザーBが同じ写真にリクエストを送信します。
・TTLが満了していない場合、画像はキャッシュから返されます。
2. Stateless web tier
web tierをスケールアウトするには、Web層の状態を変換する必要があります。 これは、SQLやNoSQLなどの長期的なメモリ内セッションデータにとっての課題です。 クラスタ内の各Webサーバーは、データベースの状態データにアクセスできます。 これはstateless web tierと呼ばれます。
3. Stateful architecture
ステートフルサーバーとステートレスサーバーのいくつかの違いは、ステートフルサーバーは、ある要求から次の要求までクライアントのデータ(状態)を記憶することです。 ステートレスサーバーはその状態を記憶する必要はありません。
ユーザーAのセッションデータとユーザーイメージもサーバー1に保存されます。ユーザーAを認証するには、HTTPリクエストをサーバー1に送信する必要があります。リクエストがサーバー2などの別のサーバーに送信されると、リクエストはエラーを受け取ります。Aのセッションはそうではないためです。同様に、ユーザーBを認証するためのHTTP要求は、サーバー2に送信され、ユーザーCはサーバー3に送信される必要があります。
4. Stateless architecture
ステートレスアーキテクチャでは、ユーザーからのHTTPリクエストは、共有ストレージから状態データをロードする任意のWebサーバーに送信できます。 状態データは、Webサーバーの外部にあるデータ共有に保存されます。 ステートレスシステムは、よりシンプルで、より強力で、より拡張性があります。

セッションデータをWeb層から移動し、永続ストレージに保存します。 データ共有者は、RDBMS、Redis、NoSQLなどです。NoSQLは拡張性のための最も簡単な選択です。 Auto-scalingとは、トラフィックに基づいてWebサーバーを自動的に追加または削除するプロセスを意味します。 状態データがWebサーバーからクリアされた後、自動スケーリングが機能します。
ウェブサイトを徐々に拡大し、多くの海外ユーザーを魅了します。 可用性を向上させ、すべての地域でより良いエクスペリエンスを提供するには、複数のデータセンターをサポートすることが不可欠です。
5. データセンター
次の図は、2つのデータセンターの例です。

通常の操作では、ユーザーは地理的にルーティングされ、英語でgeoDNSルーティングされます。geoDNSは、ドメイン名をユーザーの場所に基づいてIPアドレスに解決できるようにするDNSサービスです。データセンターがダウンした場合、すべてのトラフィックを稼働中のデータセンターに転送します。
マルチデータセンターを設置する際に取り組むべき技術的課題
・交通ナビゲーション
適切なデータセンターへのトラフィックを促進するには、効果的なツールが必要です。 GeoDNSを使用すると、ユーザーの場所に基づいてトラフィックを最寄りのデータセンターに転送できます。
・データ同期
異なるドメインのユーザーは、異なるローカルキャッシュまたはデータベースを使用できます。フェイルオーバーが発生した場合、トラフィックはデータが利用できないデータセンターに転送される可能性があります。一般的な戦略は、複数のデータセンター間でデータを複製することです。
・テストと展開
マルチデータセンターのセットアップでは、さまざまな場所でWebサイト/アプリをテストすることが重要です。自動展開ツールは、すべてのデータセンターでサービスの一貫性を維持するために重要です。
6. Message Queue
メッセージキューは、非同期通信をサポートする永続的なメモリ内コンポーネントです。 バッファとして機能し、リクエストを非同期で配信します。 メッセージキューの基本的なアーキテクチャは非常に単純です。 パブリッシャーまたはプロデューサーと呼ばれる入力サービスは、メッセージを作成し、メッセージキューに公開します。 サブスクライバーまたはコンシューマーと呼ばれる他のサービスまたはサーバーがキューに接続し、メッセージで定義されたアクションを実行します。

デカップリングにより、メッセージキューは、拡張性と信頼性の高いアプリケーションを構築するための優れたアーキテクチャになります。 メッセージキューを使用すると、パブリッシャーはキューにメッセージを作成して、現在存在しないサブスクライバーが後でメッセージを処理できるようにすることができます。 サブスクライバーは、パブリッシャーがいない場合でもメッセージを読むことができます。
以下の画像では、Webサーバーが画像処理をメッセージキューにアップロードしています。 画像処理ワーカーは、メッセージキューから作業を受け取り、画像のカスタマイズタスクを非同期で実行します。 パブリッシャーとサブスクライバーは独立してスケーリングできます。 キューのサイズが大きくなると、処理時間を短縮するためにワーカーが追加されます。 ただし、ほとんどの場合キューが空の場合、ワーカーの数が減少する可能性があります。
数百万人以上のユーザー
システム拡張は無限ループです。 反復するたび、新しいことを学びます。 数百万人のユーザーに拡張するための新しい戦略では、より多くの調整が必要です。 たとえば、システムを最適化し、より均一なサブサービスに分割する必要がある場合があります。 このレッスンで学んだすべてのテクニックは、新しい問題を解決するための優れた基盤を提供します。 記事の最後に、調べたことの要約があります。
・ステートレスWebアーキテクチャ
・どこにでもバックアップを作成する
・可能な限りキャッシュする
・マルチデータセンターのサポート
・・CDNに静的リソースを保存する
・シャーディングを使用したデータのスケーリング
・複数のデバイスに階層を分割する
・システムを監視し、自動化ツールを使用する
オフショア開発でシステムをご検討されている方々はぜひ一度ご相談ください。
※以下通り弊社の連絡先
アカウントマネージャー: クアン(日本語・英語対応可)
電話番号: (+84)2462 900 388
メール:konnichiwa@hachinet.com
お電話でのご相談/お申し込み等、お気軽にご連絡くださいませ。
- オフショア開発
- エンジニア人材派遣
- ラボ開発
- ソフトウェアテスト
電話番号: (+84)2462 900 388
メール: contact@hachinet.com
お電話でのご相談/お申し込み等、お気軽にご連絡くださいませ。
無料見積もりはこちらから
Tags
ご質問がある場合、またはハチネットに協力する場合
こちらに情報を残してください。折り返しご連絡いたします。
関連記事
コードを書く仕事は終わったのか|AI時代におけるWeb開発の実務と生き残る技術者の条件
Web開発とは何かと聞かれ、「HTMLやJavaScriptを書く仕事」と答えるなら、その定義はすでに古いものになっています。生成AIによってコードを書く行為そのものが高速化・自動化された今、Web開発の価値は作業量では測れなくなりました。本記事では、AI時代のWeb開発を抽象論ではなく、実際の開発工程と判断単位まで落とし込み、どこで人間の価値が残るのかを明確にします。
Web開発とは何か──SEOで本当に成果を出すための技術的最適化と思考法
Web開発とは、Webサイトを作ることではなく、情報を整理し、ユーザーと検索エンジンの双方に正しく伝えるための構造を設計する行為です。SEOはコンテンツだけで決まるものではなく、その価値を支える技術的な土台があって初めて機能します。本記事では、Web開発とは何かを起点に、SEOで成果を出すための技術的最適化の考え方を整理します。
開発とは何か?UX/UIデザインが集客と売上を左右する理由|成果につながる体験設計の基本
「開発とは何か」という問いは技術的に見えがちですが、実際にはビジネス成果に直結する重要なテーマです。Webサイトやシステム、アプリを作っても集客や売上につながらない多くの原因は、技術不足ではなく、UX/UIデザイン、つまりユーザー体験をどう設計するかという視点が開発の中心に置かれていない点にあります。特にBtoBでは、ユーザーが理解し、納得し、行動に至るまでのプロセスが長いため、開発段階から体験全体を設計する考え方が欠かせません。本記事では、「開発とは何か」を起点に、UX/UIデザインが集客と売上に与える影響を実務視点で解説します。
Web開発とは何か:変化し続ける時代におけるWebエンジニアの役割と、AI時代に向けた進化の本質
Web開発は、Webサイトやアプリケーションを設計・構築し、ユーザーに価値ある体験を届けるための総合的な技術領域です。かつては実装が中心の仕事でしたが、サービスが高度化した現代では、設計力、ユーザー理解、データ活用など幅広い視点が求められるようになりました。さらにAIの進化によって、エンジニアの役割は「コードを書く」から「課題を見極め、最適な解決策を設計する」方向へと変化しています。AIはエンジニアを代替するのではなく、価値創出を加速するパートナーであり、これからのWebエンジニアには“AIを使いこなす力”が大きな武器となります。
Visual Basicから .NET へ:Microsoft が業界を変えた歴史的転換点
1990年代から2000年代初頭にかけて、Microsoft Visual Basicは「誰でもアプリが作れる時代」を象徴する存在でした。特に Visual Basic 6 は、教育現場から企業システムまで幅広く使われ、開発を身近なものにした歴史的なツールです。しかしインターネットの普及、セキュリティ要件の高度化、オブジェクト指向の定着といった環境変化の中で、従来の COM ベース構造では限界が明確になっていきました。そこでMicrosoftは根本からプラットフォームを見直し、.NET Frameworkを中心にしたまったく新しいアーキテクチャへと舵を切ることを決断します。Visual Basicから .NET への移行は、単なるバージョンアップではなく、開発の思想・基盤・未来を全面刷新する歴史的転換点でした。
