マルチサービスアーキテクチャでは、各サービスが独自のデータベースを担当することがよくあります。データスキーマのマイグレーションを管理するためには、専門的なマイグレーションツール(Liquibase、Flyway、Alembic)を使用し、それをCI/CDパイプラインを通じて自動化し、結果の予測可能性を高める必要があります。
良い慣行は、各マイグレーションをバージョン管理されたマイグレーションスクリプトとして準備し、冪等性(同じ変更の再実行がエラーや不整合を引き起こさないこと)を持たせることです。
Python Alembicでのマイグレーションの例:
from alembic import op import sqlalchemy as sa def upgrade(): op.add_column('user', sa.Column('status', sa.String(8))) def downgrade(): op.drop_column('user', 'status')
主な特徴:
マイグレーションなしで本番環境で手動でDBスキーマを変更することは可能ですか(手動DDL)?
これは絶対に推奨されません:スキーマの状態に対する制御が失われ、変更のロールバック/追跡が困難になります。
マイクロサービスアーキテクチャでは、すべてのサービスに対してマイグレーションが中央集権的に実行されるべきなのですか?
いいえ、各チーム/サービスは自分のスキーマとそのマイグレーションパイプラインの責任があります。中央集権化はサービスの独立性の原則に反します。
マイグレーションのロールバックは完全に安全ですか?
いいえ:特にデータの構造や形式が変更された場合(例えば、フィールドが削除されデータが失われた場合)には、変更をロールバックできないことが常にあります。ロールバックを考慮に入れたマイグレーションの設計が望ましいです。