2

本番データベースの構造を定期的に変更する必要があります。多くの場合、これらの変更は、新しい変更を参照するコードベースの変更に対応しています。

通常、新しい変更をプルして新しい SQL クエリを実行している間、失敗したクジラのページを 1 分間表示することになりますが、SQL クエリをオンザフライで実行するためのコンポーネントまたは何かを作成して、ダウンタイムが発生しないようにすることに興味があります。が必要になります。

まだ試していませんが、私の計画は次のとおりです。

  1. 特定のクエリを実行するためのコンポーネントまたは何かを記述します。クエリにはおそらく次のようなチェックがあるIF EXISTSため、一度だけ実行されます。モデル/永続キャッシュもクリアする必要があると思います。
  2. 上記のコンポーネント/クエリを AppController の 内から呼び出しますbeforeFilter
  3. 変更をライブにプルします (上記のコードを配置します)。
  4. アプリが (別のユーザーまたは私たちによって) 1 回実行されるまで数秒待ちます。
  5. SQL クエリの実行をトリガーした beforeFilter コードを削除します。

これはクレイジーなアイデアですか?ここに私の質問があります: A. このようなものは機能しますか? B.私が見逃しているこれを行うためのより良い方法はありますか? C. エラーをスローしないようにするために、モデル キャッシュについて知っておく必要があることは何ですか。おそらく、デバッグ レベルは 0 に設定されます (サイトが本番環境にあるため)。

ところで、私たちは負荷分散システムを使用していないことに言及することは適切なようです。私たちは単一の専用サーバー上にいます。

4

2 に答える 2

3

このようなものは機能しますか?

並べ替え。おそらくまだダウンタイムが発生するでしょう。クエリの実行が終了するまでの短い時間であっても。また、展開中にサイトのトラフィックが多い場合、同時実行の問題が発生する可能性があります。

私が見逃しているこれを行うためのより良い方法はありますか?

負荷分散システムを使用すると、すべてのシステムが更新されるまでトラフィックを別のシステムに迂回させながら、一度に 1 つのシステムを更新できます。

コードに機能フラグを付けることができます。この機能が有効になるまで、コードは実行されません。コードを起動し、データベースの更新が完了したら、機能を有効にします。

エラーをスローしないようにするために、モデル キャッシュについて知っておく必要があることは何ですか。

私はキャッシュについて十分に理解していませんが、キャッシュによって、サイトが利用可能であるかのように錯覚する可能性があります。ただし、動的リクエスト (フォーム送信) は依然としてエラーになる可能性があります。

余談ですが、スキーマの移行をまだご覧になっていない場合はご覧ください。

于 2013-11-05T16:36:24.143 に答える
0

このようなものは機能しますか?

うまくいくと思いますが、十分に強く打てば、靴で釘を打つこともできます.

これを行うより良い方法はありますか?

Jason McCreary は、コードがそれ自体を展開してはならない方法と、(少なくとも) カスタム スクリプト、移行、または私の会社のツールBuildMasterのようなカスタム ツールであっても、展開プロセスを使用する必要があることに言及したコメントで完全に正しいです。これは、データベースの展開を第一級の概念として扱います。

このようなツールを使用してプロセスを具体化すると、完全に自動化されたシステムを簡単に段階的に構築できるようになります。そのようにして、負荷分散 (またはその他の追加のインフラストラクチャ) を追加したとしても、全体を費やす必要はありません。展開プロセスを至る所で更新するのに多くの時間がかかります。また、ロールバック、高度な展開シナリオ、および展開コードをアプリケーション コード内に配置するだけでは達成できないその他のクールなことを計画することもできます。

具体的には、データベースの展開の場合、BuildMaster はスクリプトを管理でき、適切な展開アクションが使用されると、それらを同じ順序で自動的に展開します。これにより、手動で実行しようとすると発生する可能性のあるダウンタイムが最小限に抑えられます。サーバー側のキャッシュをクリアするアプリケーションの停止/開始アクションを入れることもできます。ただし、ViewState またはその他のクライアント側の永続性の問題は常に存在しますが、それはまったく別の問題です。

于 2013-11-05T22:46:34.063 に答える