クラウドネイティブは、その要素技術としてコンテナやマイクロサービスなどを含んでおり、近年の開発において一般的となりつつある。では、データベースにもそうした技術要素は取り込まれていくのだろうか。本連載では、クラウドネイティブ時代のデータベース設計で考慮すべきポイントを検討する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
クラウドネイティブとは、「スケーラブルなアプリケーションを構築および実行する能力を組織にもたらす」考え方として定義される(参考記事:「クラウドネイティブ」はどう誤解されているか)。そして、そこに含まれる技術要素として、コンテナ、サービスメッシュ、イミュータブルインフラストラクチャ、宣言型API、マイクロサービスアーキテクチャ(以後、MSA)があり、その採用はシステム構成に大きな変化をもたらす。
MSAでは分割されたサービスがメッセージをやりとりしながら協調的に動作する。開発はサービス単位で進み、継続的インテグレーション/継続的デリバリー(CI/CD)と組み合わせることでアプリケーションを高頻度でリリースすることが可能になる。こうしたサービス単位の管理性とアジリティの向上がMSAの目的だ。また、障害発生時はサービス内に影響を閉じ込め、ボトルネックを個別に拡張できるなど、理想的に設計されたMSAは可用性と拡張性を備えている。
では、本連載のテーマであるデータベース(DB)の観点で見ると、MSA採用で検討すべきポイントは何だろうか。
それは「Database per Service」といわれる原則である。マイクロサービス1つに1つのDBを備える構成を指し、複数のサービスが単一DBを共用する形はアンチパターンになる。企業システムで使われてきたリレーショナルデータベース(RDB)はクラスタ機能により高い可用性や拡張性を実現してきたが、単一の巨大なDBのみで構成すると、アプリケーションの依存関係がDBに波及し、マイクロサービスの管理性、アジリティを損なってしまう。
一方で、分割されたDBをサービスのリリース頻度にあわせて構築、改修して障害時に復旧できるように運用、管理することや、負荷に応じて拡張させるのは簡単なことではない。こうした問題認識を踏まえて、クラウドネイティブな時代に求められるDBの要件整理を試みる。
アプリケーションはクラウドネイティブへの対応を進め、開発のアジリティを向上できるサービス単位に分割できたと仮定しよう。さらにアプリケーションはコンテナ化され、CI/CDでさまざまな環境に安全にデプロイされる。
Copyright © ITmedia, Inc. All Rights Reserved.