エンタープライズ・ユースのサイボーズのガルーン2のセミナーです。
ガルーン2はすべての操作をWEB画面から行えます。
システムはMySQL、PHP、テンプレートエンジンSmartyなどで動作しています。エンタープライズ製品とは直接のつながりのないわたしにとって、興味深い内容となりました。
管理者に愛されなければならない。
管理者の負担を軽減する。
一般のユーザーが使用する画面の使い勝手の向上に加えてこの二点が開発のコンセプトだったようです。
事前検証
HP製のロードランナーを使用。
ユーザーがアクセスをしているような負荷をサーバにかけて検証をします。
サイボーズの4秒ルール。ユーザーがアクセスしてから4秒以内に表示されなければならないルールが有るそうです。
アクセスの種類の予想。参照系70%、書き込み系14%、更新系10%、その他操作系7%に分類できるそうです。
検証グラフ、時間を経過すると表示時間が遅くなるグラフです。このグラフはマシンスペックなどの情報の提供に使用しているそうです。
DB検証
DB単体の性能を測ってもあまり意味がないそうです。
WEBサーバを多数立てて計測して、DBがボトルネックとならないようにしています。
ユーザー数の増加。単体のDBから分割構成へ変更。ロードバランサーを使用。DBのテーブルを分割してあげなければならないので、面倒となります。
そこでテーブルを分割するPHPスクリプトがあります。設定ファイル、ホスト情報、どのアプリケーションをどのホストに割り振るのかを行う、コマンドラインから一発で行えるそうです。
定期的な運用
メールの自動受信、受信時間を管理者が指定することが可能なので、サーバに過負荷をかけにくくすることができます。例えば社員のアクセスのほとんど無い深夜や早朝に作動させると言った具合です。
不要となったデータの削除
ファイルを管理するアプリケーションがありゴミ箱機能があるので空にしたい、持ち主のいなくなったデータを消したい、などの需要が有ります。
Linuxならcronで行えますが、Windowsでも行わせなければなりませんので、C++で実装しました。WebからPHPで処理するイベントの制御を行えるようになりました。
イベントを登録すると、後は指定した時間にイベントの処理が行われます。この点は「定期的な運用」と同じです。
長年使うとグループウエアはデータが蓄積して行くものです。データが溜まるとポータル画面の表示が遅くなります。なぜ遅くなるかというと、ポータル画面に表示する情報が多くなるからです。
また、ユーザー削除ができなくなるなどの不具合も発生します。
ログイン直後に表示されるポータル画面が遅いと社員にストレスを与えてしまいます。
原因を探ると、「社内メール、掲示板の更新、など」大量の通知が来ている場合に遅くなることがわかりました。
これまでは
最新の通知を取得したかったので、通事画面を表示したときに通知していました。
対応後
データ更新時に相手に通知を生成。通知の再生処理が走らなくなったので、処理が早くなりました。掲示板の処理が遅くなるなどが発生しましたが、一番多く見られるポータル画面の表示を早くするために、他で少しずつ負荷を分散してもらっています。
ユーザーが削除できない。
タイムアウトとなるからです。データ量が多くなると紐が付いているデータをすべて削除するためには膨大な時間がかかるのでタイムアウトしてしまいます。計測の結果、勤続が6年間の社員のユーザー登録を削除する場合、約1時間処理がかかりました。1時間かかる処理をブラウザから行うのが問題がある訳です。
対策
削除処理の非同期化を行いました。
ブラウザから削除を実行したときにはフラグを立てるだけで、DBデータを削除はしません。実際の削除はCron(的)にスケジューリングをして作業を行わせます。処理は使用者が少ない夜間などに行わせます。
自分の構築したシステムに直接役立つ話でした。コロンブスの卵と同じで、話を聞けばなるほどと言うことです。
今年の目標の一つに既存のシステムの再構築が有りますので、早速今回の話をシステムに取り入れて、サーバへの過負荷の防止や、ユーザー画面の表示速度の高速化を図りたいと思います。
Developers Summit 2009の備忘録として、出席をしたセミナーを記録にとどめておきます。セミナーの写真撮影が禁止でしたので文字だけの備忘録となっています。
mizunuma 2月 14th, 2009
Posted In: Developers Summit 2009