グローバルWebサービス構築におけるインフラ設計のポイント

この記事について

本記事は、2023年8月に社内で実施した勉強会の内容を基に、社外向けに再編集したものです。
記載の内容は執筆当時の情報であり、現在の仕様やベストプラクティスと異なる可能性があります。
実装にあたっては、必ず最新の公式ドキュメントをご確認いただくようお願いいたします。

前提

今回はユーザー個別に情報を返却するようなサービスを想定しています。
中国はグレートファイアウォールや ICP 登録、独立した AWS アカウント管理など、他地域とは異なる特殊な事情があるため、「中国」と「それ以外」で分けて考慮します。

目次

中国以外の構成

1.いくつの地域に分散してサーバーを設置するか

単一リージョンにサーバーを設置した場合、遠方からのアクセスで遅延が発生するため、地域ごとにサーバーを分散設置すべきかを検討します。

検証

同一地点から各リージョンサーバーへのアクセス時間を計測しました。

参考ツール:
Global Accelerator Speed Test
https://speedtest.globalaccelerator.aws/#/

スクロールできます
リージョンアクセス時間
東京226ms
バージニア(米国東部)1,328ms
フランクフルト(ドイツ)2,118ms
シンガポール622ms
シドニー850ms

アジア、ヨーロッパ、アメリカの3拠点程度に分散配置するのが現実的かもしれません。

※以下複数リージョンにサーバー設置の前提

2.どのような条件をもとにリージョンの振り分けを行うか

同一ドメインで運用する場合の一例として、AWS Route 53 を用いたルーティングポリシーがあります。

参考:
DevelopersIO , Guri / Hajime Oguri , 【新機能】Amazon Route 53 でアクセス元 IP をベースとしたルーティングがサポートされました(2023年8月閲覧)
https://dev.classmethod.jp/articles/amazon-route-53-now-supports-routing-based-on-source-ip/

サービスの特性によっては、リージョンごとにサブドメインを分けて運用する構成でも問題ないケースもあります。

3.DBの構成をどのようにするか

一般的な構成として「書き込みは1つのリージョンのDBで受け付け、各リージョンにはリードレプリカを設置する」方法があります。

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true

  connects_to database: { writing: :primary, reading: :primary_replica }
end

config/database.yml
production:
  primary:
    database: my_primary_database
    username: root
    password: <%= ENV['ROOT_PASSWORD'] %>
    adapter: mysql2
  primary_replica:
    database: my_primary_database
    username: root_readonly
    password: <%= ENV['ROOT_READONLY_PASSWORD'] %>
    adapter: mysql2
    replica: true

参考:
Railsドキュメント, Active Record の複数データベース対応(2023年8月閲覧)
https://railsguides.jp/active_record_multiple_databases.html

  • 実運用上の注意
    一部環境(例:fb2)では、上記設定でもリードレプリカへのアクセスが期待通りに振り分けられないケースがありました。
    その場合、Aurora の書き込み転送(Write Forwarding)機能を利用することで解決できる可能性があります。
    参考:
    DevelopersIO , いわさ, [アップデート] Amazon Aurora MySQL でリードレプリカの書き込み転送機能がサポートされたので使ってみた(2023年8月閲覧)
    https://dev.classmethod.jp/articles/aurora-local-write-forwarding

中国の構成

1.中国にはグレートファイヤーウォールがあるため、中国国内向けにサーバーを設置する必要がある

「グレートファイアーウォール」とは、中国国内で運用されているインターネット検閲およびアクセス制御システムのことを指します。

グレート・ファイアウォールの仕組みについて

  1. DNSによるアクセス制御
  2. 接続フェーズの監視
  3. 特定キーワードに対するブロック
  4. 接続対象サイトに対するスキャン

そのため、中国から国外サイトへのアクセスは非常に遅延しやすい傾向があります。

参考:
サイバーセキュリティ.com, グレートファイアウォール(金盾)とは?世界最高峰のセキュリティを誇る中国の壁(2023年8月閲覧)
https://cybersecurity-jp.com/security-measures/6729

2.中国向けwebサイトを展開する場合、ICPライセンス(決済が必要な場合は、商用ICPライセンス)の取得が必要

どのようなWebサイトであっても、中国国内でウェブサイトを開設するときはICP登録が必要になります。 https://www.softbank.jp/biz/blog/business/articles/201907/what-is-icp/

引用:ソフトバンク公式 ビジネスブログ, 吉村 真輝,【徹底解説】中国向けWebサイトの基礎知識①ICPライセンスって何?(2023年8月閲覧)
https://www.softbank.jp/business/content/blog/201907/what-is-icp

実際には外資系企業は商用ICPライセンスを取ることがほぼできないため、中国国内で何かのオンラインビジネスをしたいと思っても不可能です。では、どのようにするのかというと、中国内資の企業が前面に立つ、あるいは内資の企業と合併して事業を行わなくてはならないというルールがあり、単独でオンラインビジネスを手掛けることはできません。

引用:ソフトバンク公式 ビジネスブログ, 吉村 真輝,【徹底解説】中国向けWebサイトの基礎知識①ICPライセンスって何?(2023年8月閲覧)
https://www.softbank.jp/business/content/blog/201907/what-is-icp

3.AWSの中国リージョンは存在するが、AWS中国専用のAWSアカウントが必要

参考:
TOKAIコミュニケーションズ, AWS中国リージョンの特徴を実際にログインして検証してみた(2023年8月閲覧)https://www.cloudsolution.tokai-com.co.jp/white-paper/2022/0408-297.html

引用:TOKAIコミュニケーションズ, AWS中国リージョンの特徴を実際にログインして検証してみた(2023年8月閲覧)
https://www.cloudsolution.tokai-com.co.jp/white-paper/2022/0408-297.html

この図から確認できるように、AWS 北京・寧夏リージョンは他グローバルリージョンとネットワークから分離されています。

そのため日本で利用している既存AWSアカウントから、他グローバルリージョンを利用するのと同じ感覚でAWS 北京・寧夏リージョンを利用することはできません。

引用:TOKAIコミュニケーションズ, AWS中国リージョンの特徴を実際にログインして検証してみた(2023年8月閲覧)
https://www.cloudsolution.tokai-com.co.jp/white-paper/2022/0408-297.html

他のリージョンのように、Route53によるルーティングやクロスリージョンリードレプリカを用いたデータベース連携は利用できない可能性があります。
そのため、中国向け環境については別ドメインでの運用とする構成が現実的と考えられます。

役に立ったらシェアしていただけると嬉しいです
  • URLをコピーしました!
  • URLをコピーしました!
目次