[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
-
Upload
yuichielectric -
Category
Technology
-
view
9.363 -
download
6
description
Transcript of [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
![Page 1: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/1.jpg)
田中 裕一サイボウズ株式会社
開発本部開発部
ガルーン開発グループ
12-B-6
PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
![Page 2: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/2.jpg)
自己紹介
田中裕一
2007年4月入社
ガルーン開発グループ所属
これまで係わった製品
ガルーン2.5.0
ガルーン2.5.1
ガルーン2.5.2
現在:次世代ガルーン開発
![Page 3: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/3.jpg)
目次
ガルーン2とは
サービスとパッケージの違い
パッケージ製品独自の開発ノウハウ
今後の課題
![Page 4: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/4.jpg)
ガルーン2とは
Webグループウェアパッケージ
ターゲット
300~10000人規模の企業
コンセプト
おてがる
ひろがる
つながる
顧客満足度調査8年連続No.1
![Page 5: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/5.jpg)
ポータル画面 各アプリケーションをアイコンで分かりやすく説明。ワンクリックで目的の情報の場所に移動できます。
自分に関係があるすべての情報の新着や更新がトップページに集ります。好みにあわせて、情報の表示位置を変え、仕事のしやすい環境を作れます。
![Page 6: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/6.jpg)
アーキテクチャ
MySQLPHPSmarty
フレームワークCyDE2
ユーザー管理SSO
ポートレットアプリ管理など共通設定
スケジュール 掲示板 ファイル管理 …
ベースシステム
アプリケーション
![Page 7: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/7.jpg)
ガルーン2とWebサービス
Webサービスと似ているところ
ブラウザから操作
PHP/MySQL
Webサービスと異なるところ
ユーザーがインストールする
ユーザーが管理する
ユーザーがリソース追加する
![Page 8: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/8.jpg)
パッケージ製品は
管理者にも愛されなければ負け
![Page 9: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/9.jpg)
トピック
導入時
システム構成
インストール
運用時
システム構成の変更
定期的な処理の実行
大容量データ対策
![Page 10: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/10.jpg)
トピック
導入時
システム構成
インストール
運用時
システム構成の変更
定期的な処理の実行
大容量データ対策
![Page 11: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/11.jpg)
柔軟なシステム構成
対応環境
Linux
Windows
サーバー構成
単体構成
Web多重構成
DB分割構成
![Page 12: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/12.jpg)
単体構成
1台のサーバで
DB
Web
PHP
Linuxで1000ユーザーまで利用可能(※)
※ CPU :QuadCore Xeon 5460 3.16GHz × 2メモリ:4GBメールアプリケーションは未使用
Webサーバー
アプリケーションサーバー
DBサーバー
![Page 13: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/13.jpg)
Web多重構成
Webサーバー × 複数
DBサーバー × 1
ロードバランサー
DBサーバー
Webサーバー
アプリケーションサーバー
Webサーバー
アプリケーションサーバー
ロードバランサー
![Page 14: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/14.jpg)
DB分割構成
Webサーバー × 複数
DBサーバー × 複数
ロードバランサー
DBサーバー
Webサーバー
アプリケーションサーバー
Webサーバー
アプリケーションサーバー
ロードバランサー
DBサーバー
![Page 15: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/15.jpg)
DB分割構成
アプリケーション単位でテーブルを分割
共通テーブルはレプリケーション
共通テーブルの更新はマスタDBへ
スケジュールDB
社内メールDB
マスタDB
ユーザーテーブル
組織テーブル
…
ユーザーテーブル
組織テーブル
スケジュールテーブル
…
ユーザーテーブル
組織テーブル
社内メールテーブル
…
レプリケーション
共通テーブルへの更新
![Page 16: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/16.jpg)
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 を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/17.jpg)
どの構成を取ったらよいのか?
サイジング情報
検証データを元に作成
![Page 18: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/18.jpg)
検証方法
LoadRunnerを使用
ユーザーアクセスをシミュレート
時間が経つにつれてアクセスユーザーを増やしていく
4秒ルール
4秒以内にページが表示されればOK
バリエーション
サーバー構成
ユーザー数
使用するアプリケーション
![Page 19: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/19.jpg)
アクセスの種類
参照系 :閲覧のみを行う
書込系 :掲示板や予定の登録を行う
更新系 :掲示板などにコメントを書き込む
他操作系:マイナーなアプリケーションの操作
![Page 20: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/20.jpg)
検証結果グラフ
経過時間
レスポンスタイム
![Page 21: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/21.jpg)
トピック
導入時
システム構成
インストール
運用時
システム構成の変更
定期的な処理の実行
大容量データ対策
![Page 22: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/22.jpg)
インストール
設定不要
Webサーバー
DBサーバー
![Page 23: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/23.jpg)
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 を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/24.jpg)
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 を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/25.jpg)
DB検証
DB単体の性能を測ってもあまり意味なし
実運用時の性能を測っているわけではないので
Webサーバーを多数立てて計測
DB以外の箇所がボトルネックにならないように
DBサーバー
Webサーバー
アプリケーションサーバー
Webサーバー
アプリケーションサーバー
ロードバランサー
・・・
![Page 26: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/26.jpg)
トピック
導入時
システム構成
インストール
運用時
システム構成の変更
定期的な処理の実行
大容量データ対策
![Page 27: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/27.jpg)
システム構成の変更
ユーザー数の増加
単体構成からDB分割構成へ構成を変更
構成の変更
DBサーバー
Webサーバー
アプリサーバー
Webサーバー
アプリサーバー
ロードバランサー
DBサーバー
Webサーバー
アプリケーションサーバー
DBサーバー
![Page 28: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/28.jpg)
DB分配ツール
テーブルを複数のDBサーバーに分配するPHPスクリプト
設定ファイル
ホスト情報
どのアプリケーションをどのホストに割り振るか
コマンドラインから一発実行
![Page 29: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/29.jpg)
トピック
導入時
システム構成
インストール
運用時
システム構成の変更
定期的な処理の実行
大容量データ対策
![Page 30: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/30.jpg)
定期的な処理
メールの自動受信
受信時間を管理者が指定可能
不要となったデータの削除
ゴミ箱内の保存期間を過ぎたファイル
持ち主のいなくなったメモ
掲示期間の過ぎた掲示板
など
![Page 31: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/31.jpg)
スケジューリングサービス
C++で実装
登録したPHPスクリプトを定期的に実行
Windowsでも動くcron
PHPから制御できるcron
つまりブラウザからイベントを登録できる
![Page 32: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/32.jpg)
トピック
導入時
システム構成
インストール
運用時
システム構成の変更
定期的な処理の実行
大容量データ対策
![Page 33: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/33.jpg)
大容量データ
これまで起こった問題
ポータル画面が遅い
ユーザーを削除できない
など
![Page 34: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/34.jpg)
ポータル画面が遅い
ログイン直後の画面
原因
大量の通知
![Page 35: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/35.jpg)
対策
対応前
通知画面を表示した時に通知
最新の通知のみを取得するため
対応後
データ更新時に通知を生成
![Page 36: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/36.jpg)
ユーザーが削除できない
現象
ブラウザ上からユーザーを削除するとタイムアウト
原因
ユーザーに紐付いたデータをその場で削除・変更していた
サイボウズ社内(6年運用)の古株社員だと削除に1時間ほど メール 約一万件
通知 約千件
ワークフロー 約千件
参加している予定 数千件
![Page 37: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/37.jpg)
対策
削除処理の非同期化
ブラウザから削除したときは削除フラグを立てるだけ
DB上からの削除はスケジューリングサービスで、空いている時間に実行
処理時間帯は管理者が指定可能
![Page 38: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/38.jpg)
まとめ
一般ユーザーの使い勝手は重要
ただし、パッケージ製品では、
導入の容易さ
運用の容易さ
も超重要!!
大量データを扱う処理は非同期化
![Page 39: [12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発](https://reader034.fdocument.pub/reader034/viewer/2022051513/5463cdbaaf795974338b4698/html5/thumbnails/39.jpg)
今後の検討課題
他の重い処理の非同期化
通知処理
データのアーカイブ化
より明確なサイジング情報
性能検証の効率化も