2017-03-21 5 views
-1

データベースへの読み書きにアクセスするステートレスサービスのインスタンスが2つあります。これらのサービスはどちらも別々のアップグレードドメインにあります。スキーマを変更し、起動時に1つのインスタンスがデータベーススキーマをアップグレードする場合、アップグレードされていない中間の期間に2番目のインスタンスがデータを破損しないようにするにはどうすればよいですか。Azureサービスファブリック - スキーマとデータベースを壊さずにステートレスサービスをアップグレードする

紺色のサービスファブリックが提供するソリューションはありますか?

+0

どのデータベースを使用していますか? – cassandrad

+0

Sql Azureを使用しています – user1542794

+0

データベーススキーマを変更していて、テーブルが劇的に変更されたため、古いクエリまたはまだ更新されていない別のUDのDML命令が失敗すると、データが破損する心配はありません。何かを壊す可能性のあるコマンドは機能しません。ストアドプロシージャでビジネスロジックを変更した場合を除きます。ストアドプロシージャを変更するか、それともテーブルスキーマのみですか? – cassandrad

答えて

0

いいえ、Service Fabricには、このシナリオの既成の解決策はありません。ステートフルサービスのステートスキーマ(すなわち、ステートに使用されるクラス)をアップグレードするシナリオと比較すると、一般的な解決策は、スキーマに対する付加のみの、後方互換性のある変更を行うことである。それ以上の複雑な変更や古いスキーマから新しいステートスキーマへの移行を処理するカスタムメカニズムを記述する必要があります。

ステートレスサービスを使用している場合、データベーススキーマの変更を追加する(デフォルト値などの列を追加する)ことができれば、それを実行します。それ以外の場合は、おそらくデータベースにバージョン・トラッキングの何らかの形式を実装する必要があります。その後、サービスインスタンスはdbバージョンをチェックし、自身のデプロイされたバージョンよりも高い場合は、そのオペレーションからバックオフしてアップグレードを待ちます。

+0

私は同じ行に沿って考えていましたが、スキーマのバージョンをチェックして他のインスタンスをブロックしました。しかしそれはダウンタイムを招く。私はまだもっと洗練されたソリューションを探しています。 – user1542794

関連する問題