インフラについての知識が浅く、新規サービスを立ち上げる際のインフラアーキテクチャをどう構築すれば良いのかわからなかったので、書籍を読んでまとめてみました。
*参考
*Web3層アーキテクチャ
Webフロントサーバ・Webアプリケーションサーバ・データベースサーバの3つに分ける設計思想のことで、代表的なインフラアーキテクチャの1つです。- Webフロントサーバ(Webサーバ)
クライアントのWebブラウザから送信されたHTTPリクエストを受け付けて、HTTPレスポンスを返すサーバ機能を持ちます。
リクエストがメインの処理になるので、高負荷になる場合はスケールアウトで処理台数を増やしてロードバランサなどの機器で負荷分散を行う必要があります。
- Webアプリケーションサーバ
業務処理を実行するサーバです。リクエストの内容に応じて業務アプリケーション本体の実行を行います。
- データベースサーバ
永続化データの管理を行うためのサーバです。永続データへのアクセスには、高い可用性が求められるので、クラスタリングなどの技術で冗長化を行う。万が一の障害に備えて、データのバックアップなどの対策も必要。適切なパフォーマンスチューニングも必要。
*独自のDB要件がある場合
Compute Engine の仮想マシンインスタンスにWebアプリケーションサーバとDBサーバを入れる構成にします。OSレベルでミドルウェアをチューニングできるので設定の自由度は増しますが、オンプレミスのサーバと同じ手順で構築・運用することになるので管理が大変になります。
*DBサーバの負荷を減らしたい場合
Compute Engine + Cloud SQL を使う構成にします。MySQLのフルマネージドサービスであるCloud SQLを使うことで、運用に必要な作業の手間を減らすことができます。
*データを効率よく管理したい場合
Compute Engine + Cloud SQL + Cloud Storage を使う構成にします。Cloud Storage は高い可用性と耐久性を持つオブジェクトストレージで、大きなデータの配信に適しています。
*高い拡張性を実現したい場合
Container Engine + Cloud Datastore を使う構成にします。アクセスの急増が想定されるシステムでは、システム規模に応じて柔軟にスケールアップ、スケールダウンして効率よく運用する必要があるのでコンテナの利用が適しています。
Container Engine はDockerコンテナを稼働させるためのフルマネージドサービスで、WebアプリをDockerコンテナ上で動作させることができます。
*短期間で新規システムを構築し、運用コストをかけたくない場合
App Engine + Cloud Datastore を使います。App Engine はPaaSサービスなのでWebアプリ開発に必要な機能があらかじめ用意されています。インフラの構築や管理が不要になるため、効率的な開発を実現することができます。(内部的にコンテナを利用しています。)
ただし、他の環境にアプリケーションを移行するのが難しくなる場合があります。
外部のデータストアに永続データを保存する際に、App Engine で標準的に使われるのが Cloud Datastore です。Cloud Datastore は大量データの保存に対応したNoSQLデータベースのフルマネージドサービスで、エンティティという単位でデータを保存します。(無制限)
複数のサーバにデータを分散して保持するのですが、結果がすぐに反映されるといったメリットがあります。また、リレーショナルデータベースと異なり、テーブルの構造を後から容易に拡張することができたり、分散環境でのデータ保持やレプリケーションの自動実行や、エンティティグループによるトランザクション機能が提供されています。
Cloud Datastore を使う際、App Engine 環境ではORマッピングとしてNDBクライアントライブラリの使用が推奨されています。
NDBはMemcache(GAEの分散メモリーキャッシュ機能)を用いてCloud Datastoreへのアクセスに対するキャッシュ処理を自動的に行います。
App Engine にはその他cronジョブ、タスクキュー、セキュリティスキャンといった機能があります。
-
cronジョブ
定期的に指定のジョブを実行します。
-
タスクキュー
時間のかかる処理を非同期に実行します。
-
セキュリティスキャン
外部からのアクセスをエミュレーションしてセキュリティ上の問題をチェックします。(手動実行と自動実行があります)
*所感
参考にした書籍は、GCPを使い始めた時期に1度読んだことがあるのですが、アーキテクチャについての考え方を覚えていなかったため、改めて見直して理解が深まりました。まだ新規サービスを立ち上げたりインフラアーキテクチャを1から構築した経験はありませんが、そういった機会に適したアーキテクチャの選定ができるようにしたいと思います。
Sign up here with your email
ConversionConversion EmoticonEmoticon