大規模なサイトでは、どのようにWebアプリケーションをスケーラブルに構築しているのか。GREEのアプローチを、グリー取締役CTOにして、PHPフレームワークEthna(えすな)の開発者でもある藤本真樹氏が解説する。Webアプリケーション開発者必見だ。
Webサイト構築で面白いのは、つい先日までどう見ても小規模なユーザーベースで動作していたサイトが、瞬く間に数万人、数十万人のユーザーを抱えることになったりする*ことです。また、最初は小規模だったアプリケーションが、少しずつ改善していくうちに、大規模なアプリケーション*になることがあります。本稿では、徐々に大きくなるWebアプリケーションをスケーラブルに構築する方法を説明します。
Webアプリケーションの開発に携わっている方は特に実感されていることと思いますが、ここ数年Webかいわいの動きは非常に速く、また面白いです。わたしの肌感覚としては、そうした動きは以前に比べれば落ち着いてきているようにも思いますが、だからこそこれからは「本物」であることが大事になってくるなー、と感じる今日このごろです。
そうした動きの中では技術のコモディティ化も非常に速く、もはや「取りあえずWebサーバの負荷分散をさせたいけど、どうすればいいの?」とか、「データベースのパフォーマンスが落ちてきている。どうやって対策しよう」というレベルで悩むことはほとんどなくなっているように思います。
例えば、オープンソースソフトウェア(OSS)でWebサーバの負荷分散を行う方法(mod_proxyやmod_proxy_balancer*、Pound*やLVS*など)についても、少し検索するだけでたくさん読むことができますし、データベースの負荷対策についても同様です。
とはいえ、まじめに大規模Webアプリケーションを構築、運用する上では、上述のような「よく見る」トピック以外にも実に多くの問題にぶつかりますし、単純なWebサーバの負荷分散にしても、1台だったものを3台にするのと、10台だったものを200台にするのとでは少し話が違ってきます(コラム1)。
それだけの規模のサイトになれば、ロードバランサ自体の二重化は当然必要になってきますし、「ロードバランサはmod_proxy_balancerでいいのか、商用のものを導入した方がいいのか、スイッチはどうしよう? そもそもサーバ200台以上をどうやって管理していこうか? 従来はPCサーバを並列化させてきたが、ハイエンドなサーバを導入して台数を減らした方がいいのか?」などなど、いろいろと考える必要が出てきます。
エンジニアとしては、この手の問題についてさまざまな要因を考慮した上で、適切な選択をしていかなければならないわけです。技術はコモディティ化している一方で、実際に手を動かす上で必要な、信頼できる情報はまだまだ少ないな、と感じています。そこで本稿では、大規模なWebアプリケーションを構築/運用する際に発生する問題とそれに対するGREEでのアプローチをご紹介します*。
本文では、特に何の前提もなく「大規模サイト」と記述していますが、一口に大規模といっても、その意味はさまざまです。ソースコードの量が大規模なのかもしれませんし、プロジェクトとしての規模が大規模なのかもしれません。ユーザー数が大規模かもしれませんし、「そもそもどこからを大規模というのか……」などと考え始めるとキリがありません。
正直、規模については「自分が大規模と思ったら大規模と考えるしかない」と思いますので、ここではあえて「どこからが大規模」とは定義しません。ただ、それではイメージがつかみにくいので、何となく10万人くらいはユーザーがいて、1日100万ページビューくらいはありそうなWebサイトを思い浮かべていただければ、と思います。
GREEはまさにこの典型例だが、ソーシャルな(社会性の強い)ネットワークサービスはこうした傾向があるようだ。
ここでの「大規模」は、ソースコードの分量や設計、機能などの面で大きくなることを指している。
ロードバランス機能を実現するモジュールで、Apache 2.2で導入された。
リバースプロキシ専用に開発されたプロキシサーバで、ロードバランス機能も備える。
Linux Virtual Serverの略で、Linuxでの負荷分散を実現するソフトウェア。
GREEがどこまで「大規模」かはさておき(笑)。
Copyright © ITmedia, Inc. All Rights Reserved.