ゼロダウンタイムの展開に関心がある場合は、これに取り組む方法がたくさんあります。これを達成するためのさまざまな戦略の概要を説明したこのブログ投稿を見つけました。
基本的な要点は、メインアプリケーションに対して別の時間にデータベースのアップグレードを実行し、データベースにnull許容列があり、列が不思議に表示または非表示になるようにコードを調整できるようにすることです。
著者は、さまざまなテクノロジーに対してこれを行うためのいくつかの戦略を示していますが、休止状態でこれを行うのは少し面倒だと認めています。
Hibernate –特に列が削除されている場合、動作させるのに少しバグがある可能性があります。通常、実装クラスの複数のバージョンを使用して、永続クラスの共通インターフェースを作成することになります。SessionFactoryを初期化する前に、スキーマまたは結果セットのメタデータを使用して、Hibernateに接続するクラスのセットを決定できます。Javaの他の永続化テクノロジー、特に起動時にクラスのバイトコードをインストルメント化することを好む多くの種類のJPAには、さらに悪い問題が存在します。
それは素晴らしくて興味深い記事であり、私はそれをすべて読むことをお勧めします。
(FacebookとYahooはHibernateを使用しません!)
ユーザーの観点からダウンタイムがゼロのように見えるようにするには、通常、ロードバランサーで保護されたアプリケーションクラスターを使用する必要があります。そのため、再起動中にユーザーがアクセスしようとせずに、各アプリをポリシーから外してアップグレードできます。セッションの粘着性、データソースの一貫性、その他のあらゆる種類のことを考慮する必要がありますが、主なことはそれが魔法ではないということです。