2013-03-31 4 views
9

私のウェブサイト上の1つ以上のファイルをダウンさせずに更新するにはベストプラクティスが必要です。ウェブサイトをダウンさせずに更新するにはどうすればよいですか?

例:Model.phpファイルを更新すると、アップロードがサーバーのファイルを置き換える前に1〜2秒かかるような数秒かかる場合がありますが、その間にmodel.phpというエラーが表示されます見つからない、または完了していない場合でも、エラーを抑制しても、ウェブサイトは最終的に死ぬでしょう。

そのためのベストプラクティスは何ですか?

+0

データベースを使用します。 – jeremy

+1

メンテナンスモード – ElefantPhace

+0

は、すべてのトラフィックを一時ページにリダイレクトする可能性がありますか? – Songo

答えて

10

一つの練習は -

  • サイトのウェブを作る、ライブサーバー上でSVNやGitの

  • などのバージョン管理システム(VCS)を使用しますrootリビジョン番号のウェブサイトの最新リビジョンを含むディレクトリへのシンボリックリンク(例:/www/domain.com/r555)。変更が起動したとき、VCS

  • に変更して555

  • チェックリビジョン名(たとえば、/www/domain.com/r556

  • を運んで、新しいディレクトリに最新のリビジョンをチェックアウトするスクリプトを持っています

    チェックアウトが完了したら、シンボリックリンクを変更して、/www/domain.com/r556を指すようにします。

ありますが、ファイルのアップロード、あなたがVCSで持つことができないようなのような動的なデータを持っている場合、いくつかの思わぬ障害がありますが、それらはすべて、ダウンタイムなしで対応することができます。

データベースの変更のようなものは、まだ何らかのメンテナンスモードが必要な場合があります。

+0

おそらく幾分脱退しています... PHPスキーマの更新をphpコードと調整するのはどうですか? – Tucker

+1

標準的な手順は、スキーマの変更が行われている間、サイトをメンテナンスモードにすることです。いくつかのデータベースデザインでは、["青緑"デプロイメント](http://martinfowler.com/bliki/BlueGreenDeployment.html)のようなファンシーパンツが許可されています。実際にはアプリケーションとデータベースの完全なインスタンスが2つあります。更新プロセスの一環としてそれらの間を切り取ることができます。 – Charles

+0

ありがとう@ペッカ。 – Emad

1

1.1という名前のフォルダを作成し、そこに新しいアプリケーションを置いてください(手動でもVCSでも)、公開されているhtmlディレクトリをシンボリックリンクしてください。スイッチは瞬間的になります。

これはメリットの1つとして、コードに問題がある場合、すぐに1.0フォルダにシンボリックリンクをシンボリックリンクすることができるという珍しいアプローチではありません。

もう1つの良い点は、VCSタグをフォルダと同じ名前にして、使用しているバージョンを簡単に追跡できるようにすることです。私は、多くの場合、実際に使用されると見てきた

0

キャッシングサーバー/アプリケーションを使用して、キャッシュされたコピーをユーザーが利用できるようにします。 Varnishは例です。設定した時間内にコンテンツをキャッシュするようにワニスを設定し、実際のWebサイトのサーバーにアクセスできない場合は代替の時間を設定できます(Model.php not foundエラーなど)。

この場合、本番システムを更新すると、ワニスはバックエンドが起動して正常に動作するまで(2秒または2時間)ウェブサイトのキャッシュされたコピーを提供し続けることができます。ユーザーのために何か(UI、コンテンツなど)が変更された場合、更新後にワニスキャッシュを消去することを忘れないでください。

すべてのWebサーバーにはいくつかのキャッシング機能がありますが、ワニスなどはキャッシング用にです。

もう1つの方法は、HAProxyのようなロードバランサの背後にある同じWebサイトのインスタンスを2つ以上実行することです。一度に1つずつ更新すると、HAProxyは現在更新していないトラフィックにトラフィックをリダイレクトできます。

サーバーレベルのキャッシュまたは負荷分散の詳細については、Server Faultにお問い合わせください。

関連する問題