BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Stack Overflowを支えるモノシリックアプリをパフォーマンス重視でスケールアップする

Stack Overflowを支えるモノシリックアプリをパフォーマンス重視でスケールアップする

原文(投稿日:2015/06/21)へのリンク

QCon New York 2015でDavid Fullerton氏は,Stack Exchange Webアプリケーションで使用されている,モノシリックなC#/MS SQLアーキテクチャの詳細を発表した。1ヶ月あたり40億のリクエストを処理するStack OverflowのWebサイトもここに含まれる。講演の中でFullerton氏は,パフォーマンスを重視すればスケーラビリティは‘ほぼ無償で’手に入る,外部アプリケーションサービスの数を最小限にすれば‘SOA税’を支払う必要もない,と主張している。

Stack Exchangeのエンジニアリング担当VPであるFullerton氏のプレゼンテーションは,Stack Exchangeファミリが採用しているアーキテクチャは退屈なものかも知れないが,この“退屈さ”を維持する方法論に意味があるのだ,という主張から始まった。Stack Exchangeは,コミュニティ主体の“Q&A”形式のWebサイトをいくつか運営している。開発者のQ&Aポータルとして名高いStack Overflowもそのひとつだ。

Stack Exchangeチームは,完全なリモート体制で運営されている。チームメンバは同じ場所にいる場合でも,そうではないように活動することを推奨されている。インスタントメッセージや分散型のバグトラックアプリケーションの積極的な利用はその例だ。Fullerton氏は,‘優秀な人を雇って好きにやらせる’という考え方が,フルスタックの開発者やシステム管理者が各自の責任を持ってWebサイトを構築し,それを継続的に運営するという,ハイパフォーマンスなチームを生み出す過程でどれほど有益だったかを論じた。

Stack ExchangeのWebサイトファミリは,‘モノリスプラス’アーキテクチャを使用して設計されている。事象の大部分は,モノシリックなC#Web層アプリケーションと,関連するMS SQLデータベース内で発生する。ただし,このルールにはいくつかの例外がある。モノリスから取り出された‘タグエンジン’サービスやキャッシュを提供する数台のRedisサーバ,全文検索を実行するElasticSearchサーバなどだ。

Webサイトのアプリケーションスタックは,耐障害性を向上させるために2つのデータセンタにデプロイされる。ニューヨークにあるプライマリデータセンタと,オレゴンのセカンダリデータセンタだ。アプリケーションのデプロイは毎日実施される。Webティアサーバ全体を対象としたローリングデプロイが1日中行われている。新機能のテストは主に実際のユーザのコホートを使用して行われている。ユーザの選択は,一連の機能フラグによってコントロールされる。

動作を確認するために,サイトのサブセットに対して[その機能を]オンにします。 これは社内用です。私たちのサイトでは,読み込み負荷が1ページ[Question/Answerページ]に集中していて,カスタマイズされたコンテントは他のサイトほど多くありません。また,ユーザの緩やかなコミュニティがあります。

Stack Exchangeの開発ポリシは,'知っていることから始めて,実地で測定し,遅い部分を直す'というものだ。初代の開発者たちがC#とMS SQLに詳しかったので,これが開発スタックとなり,現在でも使用されている。初期のWebアプリケーションではASP.NET MVCやLINQ to SQL,MS SQL全文検索,ビルトインキャッシングなど,既製のツールがいくつか使用されていた。Stack Exchangeではパフォーマンスもひとつの機能だ,とFullerton氏はいう - ユーザエクスペリエンスがその主な理由だが,サイトのパフォーマンスにとって検索エンジンが重要な意味を持っていることも理由のひとつだ。Stack Exchangeのテストは通常,実際の負荷の下で実施する。計測は絶えず行われている(推測や仮定は認められていない)。パフォーマンス不足はバグとして扱われ,可能な限り迅速な修正が求められる。

[このアーキテクチャは]私たちにとって,スケールアップ性に優れています。私たちは1ヶ月40億,ピーク時毎秒3,000のリクエストと,1日8億,ピーク時には毎秒秒8,500のSQLクエリを処理しています。

初期スタックの主だったパーツは,時間の経過と共に置き換えられている,とFullerton氏は言う。Redisを使ったキャッシュや,全文検索を改善するためのElasticSearchが追加され,オブジェクトマッパを独自の中間言語生成フレームワークに置き換えることでSQLアクセスが改善された。さらには,スケーラビリティと新たな機能的要件でモノリスから取り出されたコードを基に,タグエンジンサービスが新しく開発されている。

リクエストのプロファイルやボトルネック検出を行うminiprofiler,監視を行うOpserver,リクエストのトレースやブレークダウンのためのDapperといったツーリングが,パフォーマンスの識別や監視に役立つ。パフォーマンス重視には多くのメリットがある,と氏は言う。

パフォーマンスのために最適化することで,スケーラビリティも(ほぼ無料で)手に入ります。モノリスはあなたが思っているよりも,ずっとスケーラビリティがあるのです。

Fullerton氏の結論は,Stack Exchangeは‘モノリスプラス’アーキテクチャを使って大きな成功を収めている,というものだ。このアーキテクチャは面白みに欠けるかも知れないが,これをここまで維持してきたチームのプロセスには興味が尽きない。マイクロサービスアーキテクチャスタイルは確かに今,人気のトレンドなのかも知れない。しかしFullerton氏は,分散型システム構築が避けて通ることのできない“SOA税”ゆえに,このパターンの乱用に対して警鐘を鳴らしている。

SOAが唯一の方法ではありません。自分自身の問題空間を知ってください。本当の問題を解決しましょう。概念ではなく,現実の問題を解決するためにサービスを展開するのです。

David Fullerton氏のQcon New Yorkでの講演 “Scaling Stack Overflow: Keeping it Vertical by Obsessing Over Performance”に関する詳細は,カンファレンスのWebサイトで目にすることができる。

この記事に星をつける

おすすめ度
スタイル

BT