[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

39
田中 裕一 サイボウズ株式会社 開発本部開発部 ガルーン開発グループ 12-B-6 PHP/MySQL を用いた大規模向け パッケージソフトウェア開発

TAGS:

description

デブサミ2009 12_B_6の発表資料

Transcript of [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

Page 1: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

田中 裕一サイボウズ株式会社

開発本部開発部

ガルーン開発グループ

12-B-6

PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

Page 2: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

自己紹介

田中裕一

2007年4月入社

ガルーン開発グループ所属

これまで係わった製品

ガルーン2.5.0

ガルーン2.5.1

ガルーン2.5.2

現在:次世代ガルーン開発

Page 3: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

目次

ガルーン2とは

サービスとパッケージの違い

パッケージ製品独自の開発ノウハウ

今後の課題

Page 4: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

ガルーン2とは

Webグループウェアパッケージ

ターゲット

300~10000人規模の企業

コンセプト

おてがる

ひろがる

つながる

顧客満足度調査8年連続No.1

Page 5: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

ポータル画面 各アプリケーションをアイコンで分かりやすく説明。ワンクリックで目的の情報の場所に移動できます。

自分に関係があるすべての情報の新着や更新がトップページに集ります。好みにあわせて、情報の表示位置を変え、仕事のしやすい環境を作れます。

Page 6: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

アーキテクチャ

MySQLPHPSmarty

フレームワークCyDE2

ユーザー管理SSO

ポートレットアプリ管理など共通設定

スケジュール 掲示板 ファイル管理 …

ベースシステム

アプリケーション

Page 7: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

ガルーン2とWebサービス

Webサービスと似ているところ

ブラウザから操作

PHP/MySQL

Webサービスと異なるところ

ユーザーがインストールする

ユーザーが管理する

ユーザーがリソース追加する

Page 8: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

パッケージ製品は

管理者にも愛されなければ負け

Page 9: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

トピック

導入時

システム構成

インストール

運用時

システム構成の変更

定期的な処理の実行

大容量データ対策

Page 10: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

トピック

導入時

システム構成

インストール

運用時

システム構成の変更

定期的な処理の実行

大容量データ対策

Page 11: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

柔軟なシステム構成

対応環境

Linux

Windows

サーバー構成

単体構成

Web多重構成

DB分割構成

Page 12: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

単体構成

1台のサーバで

DB

Web

PHP

Linuxで1000ユーザーまで利用可能(※)

※ CPU :QuadCore Xeon 5460 3.16GHz × 2メモリ:4GBメールアプリケーションは未使用

Webサーバー

アプリケーションサーバー

DBサーバー

Page 13: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

Web多重構成

Webサーバー × 複数

DBサーバー × 1

ロードバランサー

DBサーバー

Webサーバー

アプリケーションサーバー

Webサーバー

アプリケーションサーバー

ロードバランサー

Page 14: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

DB分割構成

Webサーバー × 複数

DBサーバー × 複数

ロードバランサー

DBサーバー

Webサーバー

アプリケーションサーバー

Webサーバー

アプリケーションサーバー

ロードバランサー

DBサーバー

Page 15: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

DB分割構成

アプリケーション単位でテーブルを分割

共通テーブルはレプリケーション

共通テーブルの更新はマスタDBへ

スケジュールDB

社内メールDB

マスタDB

ユーザーテーブル

組織テーブル

ユーザーテーブル

組織テーブル

スケジュールテーブル

ユーザーテーブル

組織テーブル

社内メールテーブル

レプリケーション

共通テーブルへの更新

Page 16: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

DB分割構成

サイボウズの検証で1万人まで対応

Webサーバー × 15 CPU:Dual Core Xeon 5160 3GHz (L2キャッシュ4MB) × 2

メモリ:4GB

DBサーバー × 7 CPU:Dual Core Xeon 5160 3GHz (L2キャッシュ4MB) × 2

メモリ:4GB(2台は8GB)

Page 17: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

どの構成を取ったらよいのか?

サイジング情報

検証データを元に作成

Page 18: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

検証方法

LoadRunnerを使用

ユーザーアクセスをシミュレート

時間が経つにつれてアクセスユーザーを増やしていく

4秒ルール

4秒以内にページが表示されればOK

バリエーション

サーバー構成

ユーザー数

使用するアプリケーション

Page 19: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

アクセスの種類

参照系 :閲覧のみを行う

書込系 :掲示板や予定の登録を行う

更新系 :掲示板などにコメントを書き込む

他操作系:マイナーなアプリケーションの操作

Page 20: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

検証結果グラフ

経過時間

レスポンスタイム

Page 21: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

トピック

導入時

システム構成

インストール

運用時

システム構成の変更

定期的な処理の実行

大容量データ対策

Page 22: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

インストール

設定不要

Webサーバー

DBサーバー

Page 23: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

Webサーバーの設定が不要

cbgrn (インストールディレクトリ)

code (PHPスクリプト置き場)

grn.cgi (PHP処理系 + 独自パッチ)

cgi-bin

http://localhost/cgi-bin/cbgrn/grn.cgi/schedule/index

codeディレクトリ以下を見に行く(ように処理系にパッチ)

CGIとしてPHP処理系を直接実行

インストールディレクトリ内で完結

Page 24: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

DBサーバーの設定も不要

my.ini(MySQLの設定ファイル)

検証により最適値を割り出し

サーバーのメモリ搭載量で値を切り替える

規定値 0GB –1GB

1GB –2GB

2GB –3GB

3GB –4GB

4GB-

sort_buffer_size 512K 512K 512K 512K 512K 1M

join_buffer_size 2M 2M 2M 3M 3M 3M

read_buffer_size 512K 512K 512K 512K 512K 1M

thread_cache_size 8 8 8 16 16 16

max_connections 30 30 30 50 50 50

innodb_buffer_pool_size 314M 314M 428M 856M 1150M 1500M

Page 25: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

DB検証

DB単体の性能を測ってもあまり意味なし

実運用時の性能を測っているわけではないので

Webサーバーを多数立てて計測

DB以外の箇所がボトルネックにならないように

DBサーバー

Webサーバー

アプリケーションサーバー

Webサーバー

アプリケーションサーバー

ロードバランサー

・・・

Page 26: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

トピック

導入時

システム構成

インストール

運用時

システム構成の変更

定期的な処理の実行

大容量データ対策

Page 27: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

システム構成の変更

ユーザー数の増加

単体構成からDB分割構成へ構成を変更

構成の変更

DBサーバー

Webサーバー

アプリサーバー

Webサーバー

アプリサーバー

ロードバランサー

DBサーバー

Webサーバー

アプリケーションサーバー

DBサーバー

Page 28: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

DB分配ツール

テーブルを複数のDBサーバーに分配するPHPスクリプト

設定ファイル

ホスト情報

どのアプリケーションをどのホストに割り振るか

コマンドラインから一発実行

Page 29: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

トピック

導入時

システム構成

インストール

運用時

システム構成の変更

定期的な処理の実行

大容量データ対策

Page 30: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

定期的な処理

メールの自動受信

受信時間を管理者が指定可能

不要となったデータの削除

ゴミ箱内の保存期間を過ぎたファイル

持ち主のいなくなったメモ

掲示期間の過ぎた掲示板

など

Page 31: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

スケジューリングサービス

C++で実装

登録したPHPスクリプトを定期的に実行

Windowsでも動くcron

PHPから制御できるcron

つまりブラウザからイベントを登録できる

Page 32: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

トピック

導入時

システム構成

インストール

運用時

システム構成の変更

定期的な処理の実行

大容量データ対策

Page 33: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

大容量データ

これまで起こった問題

ポータル画面が遅い

ユーザーを削除できない

など

Page 34: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

ポータル画面が遅い

ログイン直後の画面

原因

大量の通知

Page 35: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

対策

対応前

通知画面を表示した時に通知

最新の通知のみを取得するため

対応後

データ更新時に通知を生成

Page 36: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

ユーザーが削除できない

現象

ブラウザ上からユーザーを削除するとタイムアウト

原因

ユーザーに紐付いたデータをその場で削除・変更していた

サイボウズ社内(6年運用)の古株社員だと削除に1時間ほど メール 約一万件

通知 約千件

ワークフロー 約千件

参加している予定 数千件

Page 37: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

対策

削除処理の非同期化

ブラウザから削除したときは削除フラグを立てるだけ

DB上からの削除はスケジューリングサービスで、空いている時間に実行

処理時間帯は管理者が指定可能

Page 38: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

まとめ

一般ユーザーの使い勝手は重要

ただし、パッケージ製品では、

導入の容易さ

運用の容易さ

も超重要!!

大量データを扱う処理は非同期化

Page 39: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発

今後の検討課題

他の重い処理の非同期化

通知処理

データのアーカイブ化

より明確なサイジング情報

性能検証の効率化も