Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ /
Atlas Architecture Center
/

Atlas のスケーラビリティに関するガイダンス

自動スケーリングにより、クラスターはリアルタイムの使用状況に応じて、階層、ストレージ キャパシティー、またはその両方を自動的に調整します。Atlas は CPU とメモリの使用率を分析し、クラスター階層をスケールアップまたはスケールダウンするタイミングと必要性を決定します。Atlas がクラスター ノードをスケールアップまたはスケールダウンする条件に関する詳細は、「クラスター階層のスケーリング」をご覧ください。また、クラスターの最低限のパフォーマンスを保証したり、コストを管理したりするために、クラスターが自動的にスケーリングできる最大および最小のクラスターサイズの範囲を指定することもできます。新しい階層が指定したサイズ範囲外であるか、メモリ使用量が新しい階層のキャパシティーを超える場合、Atlas はクラスターのスケーリングを行いません。自動スケーリングは、アプリケーションに影響を与えないように、クラスター階層のスケールアップまたはスケールダウンを遅延させて調整されます。したがって、データベースが使用量で圧倒されるような急上昇ではなく、安定して増減するアプリケーション負荷に最適です。ワークロードが頻繁に急増する場合、またはイベントやローンチによってトラフィックが大幅に増加することが予想される場合、MongoDB は、事前にプログラムでスケーリングすることを推奨します。

推奨される配置トポロジー」で参照されている Atlas の配置テンプレートには、水平および垂直方向のスケーリングオプションが用意されています。具体的には、シャーディングは多数のマシンにデータを分散させるものであり、1 台のサーバーではワークロードを処理できない場合に有用です。シャーディングはシェアードナッシングアーキテクチャに従います。これは、どのノードも互いにリソースを共有しない分散型コンピューティングアーキテクチャです。MongoDB がドキュメントをクラスター全体に均等に分散させながら、一般的なクエリパターンを促進できる理想的なシャードキーの選択については、「シャードキーの選択」をご覧ください。さらに、「Performance のベストプラクティス: シャーディング」を参照して、範囲ベースのシャーディング、ハッシュされたシャーディング、ゾーンシャーディングなどの主要なシャーディング戦略についてご確認ください。

Atlas クラスターを次に使用可能な Atlas 階層にアップグレードするには、Atlas コントロール プレーン GUI、 Atlas Administration API 、または Atlas Kubernetes Operator、 MongoDBおよび HashiCorp Terraform、Atlas CLI などの IaC ツールを使用します。詳細については、「 Atlas 自動インフラストラクチャのプロビジョニング 」のガイダンスを参照してください。 Atlas 階層の変更(アップスケーリングまたはダウンスケール)では、ダウンタイムはゼロになります。階層は順次変化します。これには、セカンダリ ノードを代わりとして選択し、このセカンダリ ノードを新しいプライマリに昇格させ、その後は失敗したノードを復元または置換して、クラスターが可能な限りすぐにターゲット構成に戻るようにします。 。水平スケーリング8.0 は、 管理者アクションに基づいて配置後に発生します。このアクションは、 プログラムスクリプトからトリガーできます。一部のクラスターテンプレートでは、シャーディングされたクラスターが必要です。 MongoDBバージョン 以降では、埋め込みコンフィギュレーションサーバーを使用して、小規模なシャーディングされたクラスターのコンフィギュレーションサーバーに関連するコストを削減できます。

Atlas の低 CPU オプションは、より多くのメモリを必要とする一方で、処理能力をそれほど必要としないアプリケーションに役立ちます。このオプションは、同じクラスターサイズの General 階層と比較して、インスタンスに半分の vCPU を提供するため、メモリ集約型であるものの CPU に依存しないワークロードのコストを削減します。

データ階層化とアーカイブにより、ライブ クラスター データと並行してクエリを有効にしながら、低コストのストレージにデータをアーカイブできます。これは、レコードの長期保持に特に有用です。このプロセスを最適化するために、 MongoDBシンプルで構成可能なルールでデータのアーカイブを自動化することをお勧めします。アーカイブ ルールで指定できる基準の詳細については、「 データのアーカイブ」を参照してください。データの保持が優先順位でない シナリオの場合、Atlas は日付基準に基づいて未使用のデータを自動的に削除するオプションを提供します。アクセス頻度の低いデータの場合、TTL インデックスは、指定期間の経過後または設定された時刻にコレクションからドキュメントを自動的に削除する特殊な単一フィールド インデックスです。これは、ログ、セッション情報、またはイベントデータなど、限られた時間だけ保持すれば良いデータに特に便利です。 TTLインデックスを作成するには、日付値を保持するフィールドにインデックスを定義し、有効期間を秒単位で指定します。

Atlas は、インデックスの追加または削除、またはクライアントのクエリ構造の変更により、非効率的なクエリを識別して最適化するための Performance Advisor などの自動ツールも提供します。 Performance Advisor の実行可能な推奨事項に従うことで、不要なコンピューティング時間とリソースの消費を削減し、クエリのパフォーマンスを向上させることができます。さらに、Atlas が提供するインテリジェントなインデックス推奨機能を活用して、データ検索効率をさらに向上させ、データベース操作に必要なリソースを最小限に抑えることができます。

単一のリージョンでの配置にのみ適用される推奨事項

単一リージョン配置の場合は、単一のクラウドリージョン内でパフォーマンスを最適化する垂直スケーリング戦略に焦点を当てます。

  • コンピュートとストレージの両方でオートスケーリングを有効にし、手動による介入なしで段階的なトラフィックの増加を処理します。

  • データセットが 1 つのリージョン内でも 1 つのサーバーのキャパシティーを超える場合は、シャーディングを使用して、複数のシャード間で負荷を分散します。

  • 高い処理能力を必要としないメモリ集中型のワークロードには、 低 CPUインスタンスオプションを検討してください。

  • 履歴データ用にデータ階層化とアーカイブを実装することで、クエリ機能を維持しつつストレージコストを削減します。

  • Performance Advisor でクエリのパフォーマンスをモニターし、リソース使用を最適化するために推奨する インデックス を実装します。

  • 負荷が急増した場合はオートスケーリングのみに依存するのではなく、トラフィックの急増が予想される前にクラスターをプレスケールします。

複数のリージョンまたは複数のクラウドプロバイダーにわたる配置にのみ適用される推奨事項

マルチリージョンおよびマルチクラウド配置の場合は、地理的分散とクラウド間の複雑さを考慮したスケーリング戦略を実装します。

  • ユーザーに最も近いリージョンに読み取りレプリカを設定してレイテンシを削減し、読み取りワークロードを地理的に分散します。

  • ゾーンシャーディングを使用して、地理的または論理的な境界に基づいてデータを分割し、データローカリティとコンプライアンス要件を確保します。

  • ローカルの読み取りと書込みを使用して グローバルクラスター を実装し、データの一貫性を維持しつつリージョン全体のパフォーマンスを最適化します。

  • リージョン間のネットワークレイテンシを監視し、レプリカの優先順位を調整して、最適なフェイルオーバー動作を確保します。

  • 複数のリージョンにわたってオートスケーリングを実装する場合は、リージョン間でのデータ転送コストの影響を考慮してください。

  • リージョン使用パターンとコスト最適化戦略に基づいて、異なるリージョンで異なるクラスター階層を使用する。

  • データのレジデンシー要件に準拠するために、リージョン固有のバックアップおよびアーカイブ戦略を実装します。

次の推奨事項は、すべての配置パラダイムに適用されます。

開発環境およびテスト環境では、オートスケーリングコンピュートとオートスケーリングストレージを有効にしないでください。これにより、非本番環境でのコストを削減できます。

ステージング環境および本番環境では、次のことが推奨されます。

  • アプリケーションが小規模から中規模へと有機的に成長するインスタンスに対して、計算能力およびストレージの自動スケーリングを有効にします。

    IaC ツールを使用する場合は、 設定を活用して、オートスケーリングによるリソースドリフトを無視します。例、Terraform では、disk_gb_enabled が true の場合、Atlas はディスク サイズを自動的に増やすアップまたはスケールダウンします。これにより、返される の値はdisk_size_gb Terraform 構成で指定されている値と異なる可能性があり、その後プランが適用されると、Terraform はクラスターのディスク サイズを元のdisk_size_gb 値に増やすします。これを防ぐには、ライフサイクルのカスタマイズを使用する必要があります。つまり、lifecycle { ignore_changes = [disk_size_gb] } です。

    同様に、Terraform では、compute_enabled が true の場合、Atlas は指定された最大値まで自動的にスケールアップし、指定された最小値まで自動的にスケールダウンします。これにより、返される provider_instance_size_name の値が Terraform config で指定された値と異なる可能性があり、この点に注意せずにプランを適用すると、Terraform はクラスターを元の instanceSizeName の値に戻します。これを防ぐには、ライフサイクルのカスタマイズを使用する必要があります。すなわち、lifecycle { ignore_changes = [provider_instance_size_name] } です。

Tip

すべてのピリオドにわたって推奨事項を強制する Terraform の例については、 Githubの次のいずれかの例を参照してください。

次の例では、Atlas のオートメーション ツールを使用して、オートスケーリング コンピューティングとストレージを有効にします。

これらの例では、次のようなその他の推奨される構成も適用されます。

  • 開発およびテスト環境用にクラスター階層が M10 に設定されました。クラスター サイズ ガイドを使用して、アプリケーションのサイズに合った推奨クラスター階層を確認してください。

  • 単一リージョン、3 ノード レプリカ セットまたはシャード配置トポロジー。

当社の例では、AWSAzure、および Google Cloud を互換的に使用します。これら 3 つのクラウド プロバイダーのいずれかを使用できますが、クラウド プロバイダーに一致するようにリージョン名を変更する必要があります。クラウドプロバイダーとそのリージョンに関する詳細は、「クラウドプロバイダー」をご覧ください。

  • 中規模アプリケーション用のクラスター階層が M30 に設定されました。クラスター サイズ ガイドを使用して、アプリケーションのサイズに合った推奨クラスター階層を確認してください。

  • 単一リージョン、3 ノード レプリカ セットまたはシャード配置トポロジー。

当社の例では、AWSAzure、および Google Cloud を互換的に使用します。これら 3 つのクラウド プロバイダーのいずれかを使用できますが、クラウド プロバイダーに一致するようにリージョン名を変更する必要があります。クラウドプロバイダーとそのリージョンに関する詳細は、「クラウドプロバイダー」をご覧ください。

注意

Atlas CLI を使用してリソースを作成する前に、次の手順を実行する必要があります。

開発およびテスト環境では、コストを節約するためにコンピューティングおよびストレージのオートスケーリングが無効になっています。

ステージング環境と本番環境において、各プロジェクトごとに次の cluster.json ファイルを作成します。ID と名前を変更して、自分の値を使用します。

{
"clusterType": "REPLICASET",
"links": [],
"name": "CustomerPortalProd",
"mongoDBMajorVersion": "8.0",
"replicationSpecs": [
{
"numShards": 1,
"regionConfigs": [
{
"electableSpecs": {
"instanceSize": "M30",
"nodeCount": 3
},
"priority": 7,
"providerName": "GCP",
"regionName": "EASTERN_US",
"analyticsSpecs": {
"nodeCount": 0,
"instanceSize": "M30"
},
"autoScaling": {
"compute": {
"enabled": true,
"scaleDownEnabled": true
},
"diskGB": {
"enabled": true
}
},
"readOnlySpecs": {
"nodeCount": 0,
"instanceSize": "M30"
}
}
],
"zoneName": "Zone 1"
}
]
}

cluster.json ファイルを作成した後、各プロジェクトで次のコマンドを実行します。このコマンドは、cluster.json ファイルを使用してクラスターを作成します。

atlas cluster create --projectId 5e2211c17a3e5a48f5497de3 --file cluster.json

その他の構成オプションとこの例に関する情報については「atlas clusters create」を参照してください。

注意

Terraform でリソースを作成する前に、次の手順を実行する必要があります。

  • 支払い組織を作成し、その支払い組織の API キーを作成します。ターミナルで次のコマンドを実行し、API キーを環境変数として保存します。

    export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>"
    export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"
  • Terraform のインストール

開発およびテスト環境では、コストを節約するためにコンピューティングおよびストレージのオートスケーリングが無効になっています。

ステージング環境と本番環境において、各アプリケーションと環境のペアごとに以下のファイルを作成します。各アプリケーションと環境のペアごとに、それぞれのディレクトリ内でファイルを配置します。ID、名前、ディスク サイズを変更して、自分の値を使用します。

# Create a Group to Assign to Project
resource "mongodbatlas_team" "project_group" {
org_id = var.atlas_org_id
name = var.atlas_group_name
usernames = [
"user1@example.com",
"user2@example.com"
]
}
# Create a Project
resource "mongodbatlas_project" "atlas-project" {
org_id = var.atlas_org_id
name = var.atlas_project_name
# Assign the Project the Group with Specific Roles
teams {
team_id = mongodbatlas_team.project_group.team_id
role_names = ["GROUP_READ_ONLY", "GROUP_CLUSTER_MANAGER"]
}
}
# Create an Atlas Advanced Cluster
resource "mongodbatlas_advanced_cluster" "atlas-cluster" {
project_id = mongodbatlas_project.atlas-project.id
name = "ClusterPortalProd"
cluster_type = "REPLICASET"
mongo_db_major_version = var.mongodb_version
replication_specs {
region_configs {
electable_specs {
instance_size = var.cluster_instance_size_name
node_count = 3
}
priority = 7
provider_name = var.cloud_provider
region_name = var.atlas_region
}
}
tags {
key = "BU"
value = "ConsumerProducts"
}
tags {
key = "TeamName"
value = "TeamA"
}
tags {
key = "AppName"
value = "ProductManagementApp"
}
tags {
key = "Env"
value = "Production"
}
tags {
key = "Version"
value = "8.0"
}
tags {
key = "Email"
value = "marissa@acme.com"
}
}
# Outputs to Display
output "atlas_cluster_connection_string" { value = mongodbatlas_advanced_cluster.atlas-cluster.connection_strings.0.standard_srv }
output "project_name" { value = mongodbatlas_project.atlas-project.name }

注意

マルチリージョンクラスターを作成するには、次の例に示すように、各リージョンを独自の region_configsオブジェクトで指定し、replication_specsオブジェクトにネストします。

replication_specs {
region_configs {
electable_specs {
instance_size = "M10"
node_count = 2
}
provider_name = "GCP"
priority = 7
region_name = "NORTH_AMERICA_NORTHEAST_1"
}
region_configs {
electable_specs {
instance_size = "M10"
node_count = 3
}
provider_name = "GCP"
priority = 6
region_name = "WESTERN_US"
}
}
# Atlas Organization ID
variable "atlas_org_id" {
type = string
description = "Atlas Organization ID"
}
# Atlas Project Name
variable "atlas_project_name" {
type = string
description = "Atlas Project Name"
}
# Atlas Project Environment
variable "environment" {
type = string
description = "The environment to be built"
}
# Cluster Instance Size Name
variable "cluster_instance_size_name" {
type = string
description = "Cluster instance size name"
}
# Cloud Provider to Host Atlas Cluster
variable "cloud_provider" {
type = string
description = "AWS or GCP or Azure"
}
# Atlas Region
variable "atlas_region" {
type = string
description = "Atlas region where resources will be created"
}
# MongoDB Version
variable "mongodb_version" {
type = string
description = "MongoDB Version"
}
# Storage Auto-scaling Enablement Flag
variable "auto_scaling_disk_gb" {
type = boolean
description = "Flag that specifies whether disk auto-scaling is enabled"
}
# Compute Auto-scaling Enablement Flag
variable "auto_scaling_compute" {
type = boolean
description = "Flag that specifies whether cluster tier auto-scaling is enabled"
}
# Disk Size in GB
variable "disk_size_gb" {
type = int
description = "Disk Size in GB"
}
atlas_org_id = "32b6e34b3d91647abb20e7b8"
atlas_project_name = "Customer Portal - Prod"
environment = "prod"
cluster_instance_size_name = "M30"
cloud_provider = "AWS"
atlas_region = "US_WEST_2"
mongodb_version = "8.0"
auto_scaling_disk_gb_enabled = "true"
auto_scaling_compute_enabled = "true"
disk_size_gb = "40000"
# Define the MongoDB Atlas Provider
terraform {
required_providers {
mongodbatlas = {
source = "mongodb/mongodbatlas"
}
}
required_version = ">= 0.13"
}

ファイルを作成した後、各アプリケーションと環境ペアのディレクトリに移動し、次のコマンドを実行して Terraform を初期化します。

terraform init

Terraform プランを表示するには、次のコマンドを実行します。

terraform plan

lifecycle ブロックを追加して disk_size_gbinstant_size を明示的に変更した後、lifecycle ブロックをコメントアウトして terraform apply を実行します。完了したら、誤って変更しないように、lifecycle ブロックのコメントを必ず外します。

次のコマンドを実行して、アプリケーションと環境のペアに対して 1 つのプロジェクトと 1 つのデプロイメントを作成します。コマンドは、ファイルと MongoDB & HashiCorp Terraform を使用して、プロジェクトとクラスターを作成します。

terraform apply

プロンプトが表示されたら、yes を入力し、Enter を押して設定を適用します。

この例に関するその他の設定オプションや情報については、「MongoDB & HashiCorp Terraform」およびMongoDB Terraform のブログ記事をご覧ください。

戻る

パフォーマンス

項目一覧