Azure CosmosDBがサーバーレスになります

AzureのCosmosDBは、プラットフォームの基盤の1つであり、主要なサービスの多くを強化しています。分散データベースとしてゼロから設計されており、さまざまな整合性モデルのセットを実装しているため、アプリケーションのパフォーマンスとレイテンシーの間でトレードオフを行うことができます。次に、使い慣れたNoSQLおよびSQL APIから、Mongo DBのAPIのサポート、Gremlinグラフデータベースクエリエンジンまで、データを操作するためのさまざまなモデルがあります。

Cosmos DBには、最も一般的なクラウド開発シナリオをサポートするのに十分なものがあり、グローバル規模でデータを共有できる一貫したデータプラットフォームを提供します。マイクロソフトは、これを「惑星規模のデータベース」と表現することがよくあります。

プロビジョニングされたスループットのサーバーレス代替

すべてのメリットについて、CosmosDBにはいくつかのデメリットがあります。特にそのコスト。無料のオプションは比較的限られていますが、大規模に実行するとコストがかかる可能性があるため、その周りにアプリケーションを構築する際には、それを考慮する必要があります。 Cosmos DBリクエストユニットの予算編成は複雑なプロセスであり、特に手動または自動でスケーリングを考慮する場合、最初から正しく行うのは困難です。

Microsoftは、コアSQL APIに基づいて、CosmosDBのサーバーレスオプションのプレビューをしばらく実行しています。これは、従来プロビジョニングされていたオプションの興味深い代替手段です。リクエストを実行したときにのみ課金され、何も起こらなかったときにインスタンスを一時停止します。インスタンスが一時停止されたときに起動する必要があるため、データベース操作に追加のレイテンシが発生します。もちろん、ストレージには料金がかかりますが、それは他のAzureデータベースでも同じです。最初のトライアルは現在、すべてのCosmos DB APIに拡張されており、一般提供はそれほど遠くない将来になります。

Cosmos DBにサーバーレスオプションを追加することは、リクエストを少数およびバッチで受け取る多くのタイプのワークロードにとって非常に理にかなっています。不規則な操作パターンを持つ小さなワークロードの場合、消費ベースの価格設定モデルは非常に理にかなっています。また、プロビジョニングされたスループットへのコミットメントがないため、長期的にかなりの金額を節約できます。

コストが低い:請求サイクルで100万RUものサーバーレスリクエストユニットあたり0.282ドルを支払います。より信頼性の高いサーバーが必要な場合は、アベイラビリティーゾーンを設定できますが、これによりコストが1.25倍になります。それはまだ合理的な取引であり、予測可能性で失うものは、より低いコストで得られます。ストレージコストは、手動と自動の両方のプロビジョニングされたスループットで同じままです。

サーバーレスCosmosDBの使用を開始する

飛び込むのは簡単です。標準のCosmosDBアカウントと同様に、サブスクリプションにプロビジョニングし、サーバーレスインスタンスをリソースグループに追加する必要があります。次に、クエリに使用する予定のAPIを選択し、容量モードを選択するように求められたら、プロビジョニングされたスループットではなくサーバーレスを選択します。最後に、それをリージョンにリンクします。サーバーレスは単一のAzureリージョンでのみ使用できることに注意してください。地理的冗長性のオプションはありません。無料利用枠でもご利用いただけません。

サーバーレスインスタンスが実行されると、そのAPIを使用してデータをロードし、クエリを実行できます。Cosmos DBの標準インスタンスと同様に、データベース内で実行されるJavaScript関数とトリガーを構築したり、さまざまなAPIを使用してクエリを管理したりできます。

サーバーレスCosmosDBは間もなくプレビューから外れる予定であり、最近のCassandra APIを含め、すべてのAPIのサポートが追加されています。パブリックプレビューであるため、Azureポータルから直接セットアップして操作を調べることができます。プレビュー中は、コード展開ツールとしてARMまたはその他のインフラストラクチャはサポートされていませんが、サービスが一般に利用可能になったらサポートされるはずです。構成とデプロイメントを自動化することはできません。デプロイメントは手動で行う必要があるため、現時点ではCI / CD(継続的インテグレーション/継続的デリバリー)パイプラインの一部として使用することはできません。

サーバーレスCosmosDBを使用したコードの構築

サーバーレスCosmosDBから多くの価値を得る必要がある1つの場所は、AzureFunctionsと並行しています。 2つのサーバーレス環境は連携して機能し、バースト性のある少量のイベント駆動型アプリケーションに最適です。サーバーレスCosmosDBは、1秒あたり0から5,000リクエストユニットまですばやく増加する可能性があるため、関数を使用してエラー状態やその他のアラートを追跡するコードを記述している場合は、データをすばやく収集して保存するためのオプションです。

マイクロソフトは、本格的なアプリケーションが必要とする要求に関するデータをキャプチャする開発環境の一部として使用することをお勧めします。リクエストユニットのプロビジョニングはブラックアートのようなものであるため、すべてのデータベース内コードで実行されるサーバーレス実装は便利な開発ツールです。運用環境をセットアップし、テストを実行し、使用された要求の数をキャプチャしてから、そのデータを使用して本番デプロイメントのスループットをプロビジョニングできます。

サーバーレスの制限を理解する

サーバーレスCosmosDBアカウントの使用には制限があります。おそらく最も重要なのは、サーバーレスアカウントは単一のリージョンでしか実行されないため、マルチリージョン展開にアクセスできないことです。これは理にかなっている制限です。マルチリージョンのCosmosDB実装では、リージョン間のレプリケーションと一貫性のために、複数のインスタンスを同時に実行する必要があります。サーバーレスインスタンスがリクエストの処理中にのみ実行される場合、レプリケーションを処理するために別のリージョンがオンラインになる保証はありません。その結果、サーバーレスインスタンスのCosmos DBサービスレベル目標が変更され、書き込みは30ミリ秒以下、読み取りは10ミリ秒以下になると予想されます。

もう1つの重要な制限は、1秒あたり最大5,000リクエストユニットです。繰り返しになりますが、ほとんどの単純な実装または開発実装ではこれで十分ですが、アプリケーションを監視し、定期的に制限を超えた場合は、プロビジョニングされたCosmosDBインスタンスに切り替える準備ができている必要があります。同時に、各サーバーレスコンテナは50GBのデータとインデックスしか保存できません。Microsoftは、Azure Portalと、AzureMonitorで操作の監視に役立つツールを提供しています。

Cosmos DBにサーバーレスオプションを追加すると、コストに関する多くの質問に答えることができます。グローバルカバレッジを必要としない使用率の低いシナリオでは、これを最初に選択する必要があります。アプリケーションのリクエストパターンを理解でき、それに応じて予算を組むことができる場合にのみ、プロビジョニングされたスループットインスタンスの使用に移行します。