Google Cloud 上で実行される Django アプリは、Google サービスにも採用されている同じインフラストラクチャで実行され、一般的にスケーラビリティが改善します。
ホスティング プラットフォーム
Google Cloud で Django をデプロイするオプションには以下のものがあります。
Django のデプロイ オプション | 使用に適したケース | 使用に適さないケース | 開始方法 |
---|---|---|---|
App Engine スタンダード環境 |
|
|
App Engine スタンダード環境での Django の実行 |
App Engine フレキシブル環境 |
|
|
App Engine フレキシブル環境での Django の実行 |
Cloud Run(フルマネージド) |
|
|
Cloud Run(フルマネージド)での Django の実行
Cloud Run での Django の実行(Cloud Code for VS Code を使用) Cloud Run での Django の実行(Cloud Code for IntelliJ を使用) |
Google Kubernetes Engine(GKE) |
|
|
Google Kubernetes Engine での Django の実行 |
Compute Engine |
|
|
Google Cloud Marketplace での Django の実行 |
データベース
Django オブジェクト リレーショナル マッパー(ORM)は、SQL リレーショナル データベースで最適に動作します。新しいプロジェクトを開始する場合は、Cloud SQL を選択することをおすすめします。数回のクリックで、Google により管理およびスケールされる MySQL または PostgreSQL データベースを作成できます。
Compute Engine または別のサービス上のデータベースをご自身で管理する場合は、他の SQL データベースを使用することもできます。
データモデルに対するスケーラビリティや適合性など、NoSQL データベースを使用せざるをえない場合もあります。Django ORM は NoSQL データベースでも使用できますが、ある程度の制限があります。たとえば、Django で表現できるさまざまなデータベース結合は Datastore や MongoDB などの他の NoSQL データベースでサポートされていません。
この打開策として、SQL と NoSQL を組み合わせて、データタイプに応じて異なるデータベースを使用することなどが考えられます。
極めてスケーラブルなマネージド NoSQL ソリューションについては、SQL ソリューションよりスケーラビリティが高い非リレーショナル データベースである Datastore を検討してください。
MongoDB を使用する場合は、Cloud Marketplace を使ってデプロイして独自の管理を行うか、mLab 提供のマネージド MongoDB ホスティング サービスを使用します。
何年もの間、Django ORM を NoSQL ソリューションで動作させる最も一般的な方法は Django non-rel でしたが、このプロジェクトはメンテナンスされていません。Djangae と呼ばれる他のプロジェクトは、Django をフォークすることなく Datastore 向けの Django ORM バックエンドを提供しますが、App Engine でサポートされていません。
キャッシュ
App Engine には組み込みの Memcache サービスが付属します。Memcache システムを Compute Engine にインストールするには、Cloud Marketplace を使用します。Compute Engine または GKE に Memcache システムをインストールするには、Memcached Docker イメージを使用します。同様に、Cloud Marketplace または Redis Docker イメージを使用して Redis をインストールすることもできます。
タスクのキューイング
App Engine には、長時間実行するバックグラウンド ジョブのために組み込みのタスクキュー機能が付属しています。App Engine の外部では、Pub/Sub を使用して Python 用 Pub/Sub タスクキュー(psq)でタスクをキューイングできます。
Cloud Marketplace で使用できるその他の一般的なタスク キューイング オプションとして、RabbitMQ や Kafka などがあります。RabbitMQ および Kafka 用の Docker イメージもあります。