2009-08-13 17 views
1

私は、確立されたWebアプリケーションの新しいバージョンを展開する最適な方法を決定しようとしています。過去に私はいくつかの方法を変えましたが、今度は少し違うやり方をしたいと思っています。制限されたユーザー数へのWebアプリケーションの展開

私たちは開発/ステージング/プロダクションサーバを使用しています。開発が完了し、基本的な機能がテストされたら、ステージングサーバー上のアップグレードされた運用データベースを使用して開発コードを実行します。ステージング環境で内部QAが問題を見つけられない場合は、その変更を有効にします。

  1. は必ず アップグレードを行うために、テストの ビットを行う、使用率が低い時のコードとデータベース スキーマをアップグレードします。最後のステップは、以下の2つの方法で行われてきた

    その後、指が交差して と交差し、ユーザーがQAが逃した バグが見つからないことを願って、 はいつも火災を出すか、またはメジャーの場合は の前のバージョンに戻る。 失敗。

  2. アプリケーションの新しいバージョンを別のURLに作成します。 運用データベースを新しい バージョンにコピーして空にしてから、選択したユーザーのデータを にコピーし、 に新しいURLを使用させます。つまり、 は www.example.comの代わりに www2.example.comからアプリケーションにアクセスします。徐々に ユーザーを新しいバージョンに移動してから、 のURLを元に戻してください。

今回は、2つの方法の組み合わせのようなことをしています。基本的には、同じURLを維持しながら少数のユーザーを新しいサービスに移動させることを考えています。

ここで私は仮想ホストでやっていると考えています。新しいユーザーが移動されると、Map.txtが生成/更新されます。 (私はPRGの書き換えマップを使用して見たが、スクリプトを待っているapacheのぶら下がりの怖いです。)

<VirtualHost *:80> 
ServerAdmin [email protected] 
DocumentRoot /web/www.example.com 
ServerName www.example.com 

RewriteEngine on 

RewriteMap deploymentmap txt:/web/map.txt 

RewriteRule ^/id/([0-9]+)/(.*)$ ${deploymentmap:$1}/id/$1/$2 

</VirtualHost> 

map.txt: 

10001 /web/www2.example.com/ 
10002 /web/www2.example.com/ 
10003 /web/www2.example.com/ 
10004 /web/www2.example.com/ 
10005 /web/www2.example.com/ 

この展開戦略で明らかな欠陥がありますか?私はいくつかのシンプルで効果的な、苦痛の少ない、アップグレード方法が欠けていますか?

ありがとうございました。

-Paul

答えて

0

私は後世のために自分自身に答えます。 :-)

このメソッドは、古いコードベースに新しいコードベースを段階的にデプロイする場合に非常に効果的です。私たちの特別な状況では、上記と同様の方法でロールアウトを行いました。最初はすべてのユーザーが古いシステムで起動し、書き換えマップファイルのサイズは約800Kでした。新しいリライトディレクティブのために、サーバーは100K以上のページを処理し、速度に顕著な差はありませんでした。

ファイルからエントリを削除するために変更を加えた後にApacheを再起動する必要がないことに驚いていました(このファイルは、起動時にこのファイルが読み込まれることを意味します)。Apacheはすぐにマップの変更を受け取りましたので、リクエストごとにそれを調べる必要がありました。タイムスタンプ/チェックサムをチェックして、それが違うかどうかをチェックする可能性が高くなりました。

デプロイメントだけでなく、特にデータ構造が変化していない状況でのA/Bテストでも同様の手法を使用できます。

関連する問題