「Wikipedia における大規模システムの運用」の講演まとめ
世界のトップサイト、Google MS Yahoo! facaebook の次は Wikimedia 上位4位とは規模が違う。エンジニアは6人で運用している #kof2010
2010-11-05 16:06:52運用の連絡:公開できる情報は IRC と wikitech.wikimedia.org で共有セキュリティ情報などは非公開MLなどで #kof2010
2010-11-05 16:12:23#kof2010 WikimediaのLAMP構成について:最も重要なものがWikiエンジン=MediaWiki:PHPのオープンソースであり300名ほどの開発者が世界中にいる
2010-11-05 16:15:54#kof2010 MediaWikiの最適化:バカなことをしないようにという方針で最適化。キモはキャッシュを用意する。原則としてキャッシュを利用する。もうひとつは負荷の高いところをプロファイリングすること
2010-11-05 16:17:14#kof2010 MediaWikiのキャッシュ:キャッシュしたほうがよいものはすべてキャッシュ。PHPのAPCを使っている。Memcachaedでレンダリング済みのHTMLをキャッシュしたりも
2010-11-05 16:21:49#kof2010 プロファイリング noc.wikimedia.org/cgi-bin/report.py によってキャッシュをさらにどこに適用すればよいかも調べる
2010-11-05 16:23:55#kof2010 DBは一般的なLAMP構成と同じMySQLで、たくさんのスレーブにリプリケーションを利用。Wikiごとに個別のDBにしている(マシンを分けるというわけではない)。巨大なWikiと小さいWikiを分離(sharding)
2010-11-05 16:25:46#kof2010 キャッシュについて:Squid(リバースHTTPプロキシ)でキャッシュレイヤーを構成。ユーザーが3億以上いるが、編集するユーザーは20万人しかいない。ほとんどが読み出しなので最適化しやすい
2010-11-05 16:27:53#kof2010 テキスト、メディアファイル、それ以外(JSなど)の3つに分割して、キャッシュを使い分ける。CARPによって、テキストのヒット率85%、メディアで98%を実現
2010-11-05 16:29:43#kof2010 編集されたデータについてキャッシュの無効化:編集者が書き込んだ時点でキャッシュを無効化しないといけないので、有効期限を使う手段はNG。マルチキャストUDPベースのHTCPを利用してリアルタイムでキャッシュを無効化する
2010-11-05 16:34:57#kof2010 bits(JSやCSSなどの静的)コンテンツの配信にはVarnishキャッシングを利用。Squidより2~3倍の効率がよい。将来的にはSquidをすべて置き換えたい
2010-11-05 16:37:51#kof2010 メディアストレージは歴史的な経緯もあり、まだFOSSプロフダクトを利用していない唯一の部分。中身はソラリス。残念ながらまったくスケールしない。100req/sを処理できるが、それでも限界を越えている。プロプライエタリで改善する余地がないので、OSSを探している
2010-11-05 16:40:55#kof2010 サムネイル処理のハック:全リクエストにstat()するのは重い。そこで存在するという前提で扱う。キャッシュがあれば返す。無くて404が返るときには、サムネイル生成のハンドラを挟んで、生成したものを返す
2010-11-05 16:42:57#kof2010 アプリケーションのロードバランス:LVS-DR:効率がよくP4のサーバーでも十分に性能を発揮する。実サーバーはすべて同じIPアドレスを共有。L3で分散しているので効率がよい。下りはバランサを中継せず実サーバがクライアントに直接届ける
2010-11-05 16:45:34