2016-12-20 12 views
0

私は数千のSQL Serverデータベース(各クライアントに1つ)を持っています。プロダクションを続けることに決めたとき、データベース、Web API、Webアプリケーションのほとんどの時間が変更されました。データベース、API、Webアプリケーションを更新する際のバージョン管理の問題

問題はすべて、特にデータベースを展開するのにかかる時間です。私たちは、コード・ファースト・マイグレーションとMVC .NETとSQL Serverをすべて最新のバージョンで使用しています。それはSaaSです。そして、コードの最初の移行プロセスは、データベースを1つずつ更新することができます。

APIとWebアプリケーションは、数秒で非常に迅速に導入されます。ただし、データベースはすべて約30分以内に更新されます。その間、一部のユーザーにエラーが発生し、APIが更新されていないデータベースをターゲットにするため、ソフトウェアを使用できなくなります。さらに悪いことに、データベースの更新中に何かが失敗して停止した場合、更新されていないユーザーは問題を修正して残りのデータベースを更新するまで立ち往生します。

どのようにこの問題を解決し、クライアントを幸せにする考えですか?

PS:Webアプリケーションはデータベースにアクセスするのではなく、APIにのみアクセスします。

+1

データベースが1,000の場合は、実際にはあまりできません。これらのデータベースをすべて更新するには時間がかかるでしょう。あなたが行うことができる唯一のことは、アップデートプロセス中にアプリケーションをオフラインにすることです。とにかく起こっているはずです。システムのアップグレードを行うことができ、クライアントがそのウィンドウを理解できるようにする時間枠を見つけます。その期間に更新を行い、誰も問題を起こさないようにしてください。 –

+0

私はまた、一度にすべてを更新するのではなく、各クライアントデータベースを1つずつ更新することを検討したいと思います。 –

答えて

1

この質問は多少意見に基づいています。メンテナンスウィンドウのアプローチが最も簡単です。あなたはライブ更新を行いたい場合は、別の方法は次のようになります。

  1. は、Web APIのサイド・バイ・サイド
  2. の複数のバージョンがどのバージョンのを選択して実行する許可データベースにバージョン番号をキープ
  3. Web APIの公開インタフェースが安定しているかどうかを判断します。そうでない場合は、複数のWebサイトを横に並べて実行し、データベースのバージョンに基づいてどちらを選択するかを見つけることもできます。

これを達成する最も維持可能な方法は、おそらく少なくとも3つのサーバ:

  1. 古いバージョン
  2. 新バージョン
  3. 現在のバージョンに基づいて適切なバックエンドサーバへのルートユーザーをフロントエンドサーバーをホストする一つのバックエンドサーバをホストする一つのバックエンドサーバ。

ルーティングはログイン時にのみ行われるか、アップグレードが検出されたときにログインしているユーザーをリダイレクトするなど、もっと面白いことができます。明らかに、このクライアントのデータベースの実際のアップグレード中に特定のクライアントに何が起こるかについては、これのどれも扱っていません。それでも個別に対処する必要があります。

+0

それはかなり良いです。しかし、フロントエンドにも多くの変更が加えられているため、バージョン管理が必要であり、特定のAPIバージョンが必要です。しかし、サブドメインを使用してクライアントを選択しているため、その場合はログイン・ステージで使用するバージョンを選択しています。だから、ちょうど正しいWebサーバーにリダイレクトするために、ある種の「ログイン」Webサイトが必要になると思います。しかし、どうすれば "ログイン"ウェブサイトを透過的に正しいフロントエンドサーバーにルーティングできますか?したがって、ドメインは同じままです(ワイルドカードSSLを使用しています)。 – Dan

+0

なぜドメインは同じままですか?なぜ各サーバにサブドメインがないのでしょうか?たとえば、私の会社が使用するSaaS製品の1つに、 'www.company.com'ログインページと' ww3.company.com'フロントエンドサーバがあります。私は彼らがどこかに 'ww1'と' ww2'サーバを持っていると仮定します –

関連する問題