Stack Overflowのアーキテクチャ

http://www.youtube.com/watch?v=OGi8FT2j8hE

1 comment | 0 points | by WazanovaNews 2年以上前


Jshiike 2年以上前 edited | ▲upvoteする | link

ドイツのハンブルグで開催されたDeveloper Conference 2013で、Stack Overflowのアーキテクチャが紹介されてます。

Stack Overflowのネットワークは、110 Q&Aサイト、430万ユーザ、質問760万件、回答1360万件、月間5億6千万ページビュー

サーバ25台: ウェブサーバ11台(内9台でほぼトラフィックさばく)、ロードバランサ1台 (+ 予備1台)、DBノード4台、アプリサーバ3台、検索サーバ3台(Elasticsearch)、Redisサーバ2台(キャッシュ、メッセージング)

毎秒質問が投稿されているので、トップページには都度最新の質問を掲載するように更新はできないが、ユーザの回答パターン、質問閲覧パターン、好みのタグを把握して掲載される質問をだし分けるアルゴリズムを採用している。

DBサーバは10%、メモリ 384GB RAMなのが効いている、Webサーバは10%-15%。(CPU稼働?ちょっとスライドが見づらい。)計算上は5台のサーバで運営できるということ。

これが実現できているのはシンプルにしているから。.NETフレームワークで、プロジェクトは9件、コードは11万行。テストはほとんどしないが、ユーザがmeta.stackoverflow.comで積極的にバグの報告などをしてくれる。

1日5回本番にアップ。

キャッシュは4段階。ネットワークレベル(ブラウザ、CDNなど) -> サーバレベル(HttpRuntime.Cache)-> サイトレベル(Redis)-> SQLサーバデータベース(384GB RAM)-> ソリッドステートディスク

キャッシュのコードはこの10行(見づらいですがビデオで確認できます。)。スタティックメソッド/スタティッククラスを使っている。オブジェクト指向プログラミング視点ではよくないが、とにかく早いし、ダイレクトに反映できる。

例えば、一番人気のある回答のページに関わるコードには3つのクラスがあり、それぞれの処理にはナノ秒しかかからないが、それでもキャッシュする。viewで都度クラスをつくると、ガベージコレクタの対象を増やすことになる。だから、このクラスのコピーをつくって、各ページで再利用する仕組みにしている。

ライブラリは極力オープンソースとして提供することにより、そのコードはデベロッパーコミュニティのものとなり、またStackoverflow自体のコードベース、プロジェクトを減らすことにも貢献してくれる。

Stackoverflowの開発チームは5人だけ。(これはStackoverflowのプラットフォームチームのことを指しているようなので、後日の記事を見ると、スマホやその他の開発のチームは別途いるようですね。)とにかくベストなGeekを雇うこと。

抽象化、ライブラリは便利だけど、パフォーマンスをあげる肝は、.NETのアセンブリ言語のローレベルまで深堀して調べること。


[2013] ワザノバTop100アクセスランキング


#stackoverflow #開発スタイル #コーディング #アーキテクチャ

Back