こんにちは。デジタルステージ開発リーダーの四家です。
この間まで猛暑だと思ったら、少し秋の気配もして、夏らしい夏が過ぎ去ってしまった寂しさがある今日この頃ですね。
「ガツンとみかん」は、まだ美味しく感じるので、充分暑いですが(笑)
今日は、普段あんまり話す機会が無いBiNDupのパフォーマンス・チューニングの取り組みについてお話ししたいと思います。
Webアプリケーションのパフォーマンスとは?
BiNDupは、PCにインストールして使うデスクトップアプリのほかWebアプリケーションがあります。
Webアプリケーション(以下、Webアプリ)とは、昔、BBSと言われた掲示板なんかがありましたが、乱暴に言うと、アレと同じ仕組みを使って構築されています。
スレの表示と投稿ができれば良いわけですね。
ただ、BiNDupのような複雑なWebアプリの場合、さらに、HTML、画像などを書き出す工程などもあり、ここまで単純ではありません。
同時に何人ものお客さまが使えるように、複数台のサーバーを連動させており、裏ではファイル共有の仕組みや、情報を保存するデータベースが動作しています。
ハードウェアの故障やインターネット回線の不具合に備えて、全ての経路、サーバーを複重化しています。
サイトシアターを1ページ表示させるだけでも、裏ではゴゴゴゴと色んなシステムが応答しているわけですね。
Webアプリのパフォーマンスと言えば、何よりその反応スピードを指すわけですが、古くはAmazonさんが「0.1秒遅くなれば売上が1%落ちる」と言っていたり、最近ではnoteのCXO深津さんが「サービスにおいて速さこそが神である」と言っていますが、全くその通りで、お客さまにストレス無く使って頂くのが満足度に直結しており、最優先課題と考えています。
先ほどのゴゴゴゴと動くサーバー側の仕組みの調整の他、ブラウザとサーバーの間には携帯回線、WiFi、光回線など様々なインターネット回線があり、ここの通信量をいかに減らすかも重要になってきます。
BiNDupに施す、速度改善策
施策1.錯覚的に体感速度を改善する方法
Webアプリに限らず、デスクトップアプリでも良く使われる手法ですが、読み込みに時間がかかる所はバックグラウンドで処理を行い、お客さまには先にUIを触れるように開放する手法があります。
特にWebアプリの場合、インターネット回線の状態に左右される事が多いので、この手法が効きます。
BiNDupでも積極的に入れており、今後も改善して行こうと思っている部分です。
また、ブラウザのキャッシュを上手く活用して、そもそものサーバーへのアクセスを減らすという手法もかなり効きます。
施策2.Webアプリ高速化の本丸
ただ、データベースを使うシステムの場合、応答に要する時間の大半はデータベースへのアクセスによるものと言われています。
実際に、BiNDupでも処理時間を計測すると、データベースの参照や更新が大半を占めています。
ここの時間を減らすことがパフォーマンスを上げる上では重要になってきます。
仮説と途中経過
アクセス回数を減らしデータベースを細分化する
データベースの処理を速くするには、古くから色々な手法がありますが、結局の所、1番効くのはアクセス回数を減らす事です。
1度でデータを持ってきて、1度でデータを書き込めれば、それが1番パフォーマンスが良いことになります。
ただ実際には、複数人で同時に編集される事も考慮に入れると、あまり大きな範囲を1度に取り扱うわけにはいきません。
また、もうひとつ、データベースは集合をいかに小さく扱えるかが高速化のポイントになります。
要するに、1度に扱う集合が小さければ小さいほど、速くなります。
サーバーの高速化とデータの分割
BiNDupの場合、問題点として、画像パーツ、SHiFTパーツなどのパーツを管理するテーブルが、とても肥大化していました。
集合として、かなり大きくなっていたわけです。
今回、そのテーブルを分割して並列化すれば速くなるはずという仮説の元、テーブルを分割して高速化を試みる事にしました。
サービスリリース当初から使われているサーバーも一新して、全体的にサーバーのスペックも上げて超高速化を目指しました。
かなり大きなデータベースの移行だったため、データのコピー時間、テーブル分割の処理時間など、慎重に計測しました。
テスト環境では、充分なスピードが出るのを確認でき、期待を胸にリリース当日を迎えました。
秋からの速度改善に備え、第一歩を8月に実施
8/20〜21にかけてのメンテナンスがまさにこれだったわけですが、当日はリハーサルよりもかなり時間がかかり、少し焦りました。
何とか時間内に検証が終わる時刻には準備が出来て、私自身もブラウザで新環境に入り触ってみたのですが・・
あれ?テスト環境と違い、これまでと体感速度が変わらない…。うう。残念。。
一筋縄ではいかないと考えていたものの、テスト環境と本番環境の壁を目の当たりにし、夢破れました。
が!まずは本格的に速度改善をしていくための環境が整ったことに違いありません。
それにしても・・
みなさんが新しいBiNDupを手にする頃には、少しずつ速度改善が体感できるよう改善処理をあの手この手で加えていきますのでご期待ください。
今後の予定
コンピューターの世界では「局所性」という言葉が良く言われていて、要するに1度使った処理や情報は、もう1度使われる可能性が高いという性質があります。
つまり、1度使った情報をメモリーなどに一時的に取っておけると、データベースにアクセスする事無く高速に処理が進められる可能性が上がります。
また、今回、新環境を構築したわけですが、今後は定期的に新しい環境を増やしていき、お客さまがアクセスする環境自体を分けて、より快適にお使い頂けるようにして行きたいと思っています。
目標は、デスクトップアプリ並みのスピードをWebアプリで出すこと!!
BiNDupは、我々開発スタッフも大好きな製品です。
今後も様々な試行錯誤を繰り返して改善して行きますので、どうぞよろしくお願いします。
この秋、登場!新BiNDupの記事を読む
次回は、対応が急務な常時SSL化を改めて解説。常時SSL化を丸ごとおまかせできる優待販売のオプションについても説明します。
※新BiNDupは開発中のため、内容は変更となる可能性があります。
POINT
- パフォーマンス向上にはデータベースへのアクセス時間を減らすことが重要
- スペックを上げてサーバーを一新。データの分割&並列化で高速に
- 新環境を増やしてお客さまがアクセスする環境自体を分け、より快適に