😮‍💨

【システムのスケールアップ戦略の基礎】LB / データベースのスケーリング / CDN

2023/05/01に公開

システムのスケールアップ戦略: パフォーマンスと耐久性の向上

はじめに

システムのスケールアップは、成長するオンラインサービスやアプリケーションにとって不可欠です。一度スケールアップの方法について整理したかったので記事にまとめてみることにしました。この記事では、システムのスケールアップに焦点を当て、以下のトピックについて解説します。

  • ロードバランサ
  • データベースレプリケーション
  • CDN

ロードバランサ

ロードバランサは、複数のサーバー間でトラフィックを均等に分散する役割を果たします。これにより、アプリケーションの可用性が向上し、単一のサーバーへの過負荷を防ぎます。ロードバランサは、ハードウェアベースのものとソフトウェアベースのものがあります。

ロードバランサの主な機能は以下のとおりです。

  1. 負荷分散: クライアントからのリクエストを複数のサーバーに分散させることで、サーバーの負荷を軽減し、アプリケーションのパフォーマンスを向上させます。
  2. 冗長性: サーバーの障害が発生した場合でも、ロードバランサは他のサーバーにリクエストをリダイレクトし、システムのダウンタイムを防ぎます。
  3. 可用性: システムの可用性を向上させるために、ロードバランサはサーバーの稼働状況を監視し、ダウンしているサーバーからのトラフィックを自動的にリダイレクトします。

図で表現するとロードバランサは以下のようになります。
ロードバランサがリクエストを受け取り、異なるprivate IPをもったサーバーに対して、リクエストを割り振っています。

ロードバランサが処理を振り分ける方法には、いくつかのアルゴリズムがあります。

  1. Round Robin (ラウンドロビン)
    ロードバランサはリクエストをバックエンドのサーバーに順番に割り当てます。
    すべてのサーバーが均等にリクエストを受け取ることが保証されますが、サーバー間で処理能力に差がある場合には、効率的でない場合があります。

  2. Least Connections (最少接続数)
    ロードバランサは現在接続数が最も少ないサーバーにリクエストを割り当てます。これにより、処理能力の異なるサーバー間でも、負荷が適切に分散される可能性が高くなります。

  3. IP Hash (IPハッシュ)
    IPハッシュアルゴリズムでは、クライアントのIPアドレスに基づいてリクエストをサーバーに割り当てます。同じクライアントからのリクエストは、常に同じサーバーにルーティングされます。これにより、セッションの永続性が必要な場合でも、特定のサーバーにリクエストをルーティングすることができます。

  4. URL Hash (URLハッシュ)
    URLハッシュアルゴリズムでは、リクエストのURLに基づいてリクエストをサーバーに割り当てます。これにより、特定のURLに対するリクエストが同じサーバーにルーティングされるため、キャッシュ効率が向上します。

  5. Least Response Time (最短応答時間)
    ロードバランサは現在の応答時間が最も短いサーバーにリクエストを割り当てます。これにより、パフォーマンスが最適化され、サーバーの負荷が適切に分散されます。

データベースのスケーリング

データベースのスケーリングには主に2つのアプローチがあります

  • 垂直スケーリング(スケールアップ)
    • データベースサーバーのリソース(CPU、メモリ、ストレージなど)を増強することにより、パフォーマンスを向上させるアプローチです。
    • サーバーのハードウェアをアップグレードするか、より高性能なサーバーに移行することで実現
  • 水平スケーリング(スケールアウト)
    • 複数のデータベースサーバーにデータや負荷を分散することでパフォーマンスを向上させるアプローチ
      • シャーディング
        • データベースを複数の小さなデータベース(シャード)に分割し、それぞれのシャードを異なるサーバーでホストします。これにより、データの一部のみを検索・更新するクエリのパフォーマンスが向上します。ただし、シャーディングはアプリケーションの複雑さが増すため、実装や管理が難しくなることがあります。
      • レプリケーション
        • データベースのコピーを複数のサーバーに分散させることで、読み取りパフォーマンスを向上させる方法

主なレプリケーションのタイプは、マスター/スレーブレプリケーションとマスター/マスターレプリケーションです。

  • マスター/スレーブレプリケーション
    • 1つのマスターデータベースが書き込み操作を処理し、複数のスレーブデータベースが読み取り操作を処理します。
    • スレーブデータベースは、マスターデータベースからデータを定期的に同期します。
  • マスター/マスターレプリケーション
    • すべてのデータベースが読み書き操作を処理できます。
    • 各データベースは、他のデータベースとデータを同期し、データの一貫性を維持します。

このように2つの方法がありますが、データの競合を回避し、一貫性を維持する観点からマスター/スレーブ形式を採用するケースが多いものと思います。

このように2つの方法がありますが、データの競合を回避し、一貫性を維持する観点からマスター/スレーブ形式を採用するケースが多いものと思います。


このような構成にすることで、クエリを並列処理できるためパフォーマンスの向上が見込める

キャッシュ

キャッシュは、データや計算結果を一時的に保存し、再利用することでシステムのパフォーマンスを向上させる技術です。キャッシュは、アプリケーション層やデータベース層で使用されます。一般的なキャッシュのタイプには、インメモリキャッシュと分散キャッシュがあります。

  • インメモリキャッシュ
    • データをサーバーのメモリに保存します。これにより、データへのアクセス速度が向上します。
    • RedisやMemcached
  • 分散キャッシュ
    • データを複数のサーバーに分散して保存します。これにより、システムのスケーラビリティと耐久性が向上します。
    • Amazon ElastiCacheやGoogle Cloud Memorystore

CDN(Content Delivery Network)

CDNは、静的コンテンツ(画像、CSS、JavaScriptなど)をキャッシュし、ユーザーに最も近いサーバーから配信することで、レイテンシを低減し、ウェブページの読み込み速度を向上させるサービスです。CDNは、世界中のデータセンターに分散されたサーバーを利用しており、トラフィックのピーク時にも対応できます。
CDNの主な利点は以下の通りです。

  • グローバルなリーチ: 世界中のユーザーに高速にコンテンツを配信できます。
  • スケーラビリティ: トラフィックの増加に対応し、サーバーへの負荷を軽減できます。
  • セキュリティ: DDoS攻撃の防止やTLS暗号化を提供します。

CDNは具体的には、以下の手順で動作します。

  1. ユーザーがウェブサイトにアクセスすると、DNSサーバーがCDNのエッジサーバーにリクエストをルーティングします。
  2. エッジサーバーは、コンテンツがキャッシュされているかどうかを確認します。
  3. キャッシュされている場合は、エッジサーバーがコンテンツを直接ユーザーに配信します。
  4. キャッシュされていない場合は、エッジサーバーがオリジンサーバー(コンテンツの元々のホスト)からコンテンツを取得し、ユーザーに配信します。同時に、エッジサーバーは取得したコンテンツをキャッシュします。

以下は、主要なCDNサービスプロバイダのいくつかです。

  1. Akamai: 1998年に設立されたAkamaiは、CDNの分野で最も有名なプロバイダの一つです。世界中に広範なエッジサーバーネットワークを持ち、リアルタイムのトラフィック管理や高度なセキュリティ機能を提供しています。
  2. Cloudflare: Cloudflareは、CDNサービスのほか、DDoS攻撃対策やウェブアプリケーションファイアウォールなどのセキュリティ機能、DNSサービスなども提供しています。独自のAnycastネットワークを利用して、高速で安定したコンテンツ配信を実現しています。
  3. Amazon CloudFront: Amazon Web Services(AWS)が提供するCDNサービスで、AWSの他のサービスとの統合が容易です。AWSの広範なデータセンターインフラを活用し、高速なコンテンツ配信やキャッシュの最適化を行っています。
  4. Fastly: Fastlyは、リアルタイムのキャッシュ設定変更や低レイテンシを特徴とするCDNサービスです。APIによる制御が容易で、高度なカスタマイズが可能です。また、ウェブアプリケーションのパフォーマンス向上やセキュリティ対策も提供しています。
  5. Microsoft Azure CDN: Microsoft AzureのCDNサービスは、Azureのクラウドサービスと統合されており、Azure上で構築されたウェブアプリケーションやAPIのパフォーマンス向上に役立ちます。Azureのデータセンターインフラを活用し、高速で安定したコンテンツ配信が可能です。

Discussion