「Wikipedia における大規模システムの運用」の講演まとめ

KOF2010で行われた「Wikipedia における大規模システムの運用」(http://k-of.jp/2010/mediawiki.html)の講演を実況していらした方がおられたのでまとめ。
1
だいくしー @daiksy

wikipediaのサーバ数、350!? 少ない! #kof2010

2010-11-05 16:04:49
モーリ @mohri

世界のトップサイト、Google MS Yahoo! facaebook の次は Wikimedia 上位4位とは規模が違う。エンジニアは6人で運用している #kof2010

2010-11-05 16:06:52
モーリ @mohri

6人のエンジニアは世界中に散らばっているがアジアにはまだいない(募集はしている) #kof2010

2010-11-05 16:07:50
モーリ @mohri

運用の連絡:公開できる情報は IRC と wikitech.wikimedia.org で共有セキュリティ情報などは非公開MLなどで #kof2010

2010-11-05 16:12:23
モーリ @mohri

#kof2010 WikimediaのLAMP構成について:最も重要なものがWikiエンジン=MediaWiki:PHPのオープンソースであり300名ほどの開発者が世界中にいる

2010-11-05 16:15:54
だいくしー @daiksy

MediaWikiの最適化のポイント。「おかしなことをしない」ww #kof2010

2010-11-05 16:16:33
モーリ @mohri

#kof2010 MediaWikiの最適化:バカなことをしないようにという方針で最適化。キモはキャッシュを用意する。原則としてキャッシュを利用する。もうひとつは負荷の高いところをプロファイリングすること

2010-11-05 16:17:14
だいくしー @daiksy

機能が重すぎる場合、リリースを見送る。 #kof2010

2010-11-05 16:17:49
だいくしー @daiksy

キャッシュの多くはMemcachedを使ってる。 #kof2010

2010-11-05 16:21:01
モーリ @mohri

#kof2010 MediaWikiのキャッシュ:キャッシュしたほうがよいものはすべてキャッシュ。PHPのAPCを使っている。Memcachaedでレンダリング済みのHTMLをキャッシュしたりも

2010-11-05 16:21:49
モーリ @mohri

#kof2010 プロファイリング noc.wikimedia.org/cgi-bin/report.py によってキャッシュをさらにどこに適用すればよいかも調べる

2010-11-05 16:23:55
くまろく🐻@働かされ世代💉💉💉💉🐻‍❄️ @iczerone

関数ごと?にプロファイリング(評価システム)があって、つねにみているんだなぁ。 #kof2010

2010-11-05 16:24:13
モーリ @mohri

#kof2010 DBは一般的なLAMP構成と同じMySQLで、たくさんのスレーブにリプリケーションを利用。Wikiごとに個別のDBにしている(マシンを分けるというわけではない)。巨大なWikiと小さいWikiを分離(sharding)

2010-11-05 16:25:46
くまろく🐻@働かされ世代💉💉💉💉🐻‍❄️ @iczerone

人気?アクセス別でwikiをわける わけたごとにマスタースレーブをつくる #kof2010

2010-11-05 16:25:54
くまろく🐻@働かされ世代💉💉💉💉🐻‍❄️ @iczerone

みる3億ユーザーvs入力する20万ユーザー なwiki #kof2010

2010-11-05 16:27:38
モーリ @mohri

#kof2010 キャッシュについて:Squid(リバースHTTPプロキシ)でキャッシュレイヤーを構成。ユーザーが3億以上いるが、編集するユーザーは20万人しかいない。ほとんどが読み出しなので最適化しやすい

2010-11-05 16:27:53
くまろく🐻@働かされ世代💉💉💉💉🐻‍❄️ @iczerone

wiki のプロキシは squid !!! なんだってー。しらんかった。 #kof2010

2010-11-05 16:28:06
モーリ @mohri

#kof2010 テキスト、メディアファイル、それ以外(JSなど)の3つに分割して、キャッシュを使い分ける。CARPによって、テキストのヒット率85%、メディアで98%を実現

2010-11-05 16:29:43
モーリ @mohri

#kof2010 CARP:ハッシュ値によって担当しているサーバーを分ける。常に同じリクエストが同じサーバに行くようにしている

2010-11-05 16:32:13
モーリ @mohri

#kof2010 編集されたデータについてキャッシュの無効化:編集者が書き込んだ時点でキャッシュを無効化しないといけないので、有効期限を使う手段はNG。マルチキャストUDPベースのHTCPを利用してリアルタイムでキャッシュを無効化する

2010-11-05 16:34:57
モーリ @mohri

#kof2010 bits(JSやCSSなどの静的)コンテンツの配信にはVarnishキャッシングを利用。Squidより2~3倍の効率がよい。将来的にはSquidをすべて置き換えたい

2010-11-05 16:37:51
モーリ @mohri

#kof2010 メディアストレージは歴史的な経緯もあり、まだFOSSプロフダクトを利用していない唯一の部分。中身はソラリス。残念ながらまったくスケールしない。100req/sを処理できるが、それでも限界を越えている。プロプライエタリで改善する余地がないので、OSSを探している

2010-11-05 16:40:55
モーリ @mohri

#kof2010 サムネイル処理のハック:全リクエストにstat()するのは重い。そこで存在するという前提で扱う。キャッシュがあれば返す。無くて404が返るときには、サムネイル生成のハンドラを挟んで、生成したものを返す

2010-11-05 16:42:57
モーリ @mohri

#kof2010 アプリケーションのロードバランス:LVS-DR:効率がよくP4のサーバーでも十分に性能を発揮する。実サーバーはすべて同じIPアドレスを共有。L3で分散しているので効率がよい。下りはバランサを中継せず実サーバがクライアントに直接届ける

2010-11-05 16:45:34