- Scott Hanselmanのポッドキャストで、Stack Overflowのエンジニアリングディレクター Roberta Arcoverde へのインタビュー内容の要約
- 8年前にソフトウェアエンジニアとして入社し、スタッフエンジニア(テックリード)になった後、今年の初めにマネージャーへピボット
S: エンジニアリングディレクターになって変わったことは?
- R: 人を管理するようになった。キャリアを管理し、成長できるよう支援する。また、私たちがどこへ向かうべきかについての戦略的ビジョンを持つ
ソフトウェアアーキテクチャがどうなっているかを見て、成長のための方向へ進んでいるか、今回のPRだけでなく今後3年間で私たちが望む場所へ向かっているかなどを継続的に確認している
- S: もっと長期的な計画を立てて行動するということですね。技術の変化に驚かされないように。
- R: その通りです。そして、より多くの1-on-1ミーティングも行います。
- S: いまMicrosoftでもレビューシーズンで、数日間ずっと1on1ミーティングと評価ばかりなんです。毎日ミーティングばかりで面白くないのですが、リフレッシュのためにコードを見たりもしますか?
- R: はい、コードを見ます。私のような現場のマネージャーも毎日コードを書くべきだと強く信じています。個人的には、それが技術力を維持するのに役立つと思っています。
ジュニアエンジニアをメンタリングするのにも役立ちますし、シニアエンジニアが提案した変更の影響を評価するのにも役立ちます。
コードを書き続け、ソフトウェアがどこへ向かっているのかを見ていれば、大きな再設計があるときにも、彼らが最善の結果を出せるよう支援するための「正しい質問」ができるようになります。
S: Stack Overflowのアーキテクチャはどのようなものですか?
- R: Stack Overflowは少しユニークです。特に2008年に始まった他の大規模サイトと比べるとそうです。
- 私たちは現在14年物のコードベースを持っており、
- 自社データセンターのオンプレミスマシンで運用しています。
- クラウドへ移行したことはありません。
- モノリシックなアプリケーションでもあります。サービスやマイクロサービスには分割していません。
- マルチテナントのWebアプリも持っています。.NETベースで、9台のWebサーバー上で単一アプリとして動作しています。
- IISで運用しており、1台のサーバーが毎秒6,000リクエストを処理します。(月間20億PV)
- S: IISはApacheやNGINX、Kubernetesなどの台頭でかなり減りましたよね。そちらへ進むこともできたはずですが、意図的に無視したものはありますか? また、これはSOに必要だ、と思ったものはありますか?
- R: 私たちはその多くを無視してきました。最も最近のものは、マイクロサービスとKubernetesに関するあらゆるものです。
無視した最大の理由は、SOの最も強い開発哲学にあります。
常にこの質問から始めます。「どんな問題を解決しようとしているのか?」
そのようなツールが解決しようとしている問題は、私たちが直面している問題を解決してくれません。
たとえば、モノリスからマイクロサービスやサービス群へ移行するのは、チームを分割してスケールさせるためです。
複数のチームが同じプロジェクトで衝突せずに作業できるようにし、素早くデプロイできるようにするなどです。
高速なデプロイも私たちにとっては問題ではありませんでした。SOは1日に何度も、4分でデプロイでき、問題があっても数分で素早くロールバックできます
現在の私たちのリードタイムやマージにかかる時間は素晴らしく、苦痛なものではありません。
約50人のエンジニアがQ&Aプラットフォームを開発中
- R: 2014年には10人で、全員がコードベース全体を理解するのは簡単でした。
いまは新しいエンジニアのオンボーディングが難しくなってきています。
いずれは特定のモジュールを切り出し、専任チームがそれを見て、コード全体を理解しなくてもよくなるかもしれません。
しかし、まだそこまでは至っていません。私たちはまだその問題に直面しておらず、実用主義者です。
その他のアーキテクチャ
- 2層のキャッシュ(メモリとWebサーバー)
- さらに複数台のSQL Server:1.5TBのRAMにより、DB全体の1/3へRAM上から高速アクセス可能
→ これはクラウドで安価に使うのが難しい、非常に高価な構成だと思う
- 質問ページはキャッシュしない。最もヒット率が高く、トラフィックの80%がそこへ向かうが…
→ 以前Redisでキャッシュしようとしたが、hit/missのキャッシュ率があまり良くなかった
- 現在のページレンダリング時間は約20ms
- StackExchangeも同じサーバー上でマルチテナント運用中。1つのアプリケーションが200のサイトをすべて処理
→ つまり、1つのアプリケーションをデプロイするだけで全体に適用される
- HAProxy配下でローリングビルドされる
7件のコメント
おお…。
haproxyでローリングビルドしているという部分が印象的ですが、どう実装しているのか気になりますねポッドキャストのスクリプトを読んでみましたが、
haproxyを使っている部分は短く触れて通り過ぎる感じですね。ヘルスチェックの話や、かなりモニタリングをしているという会話につながっているのを見ると、直接うまく作り込んで運用している…という程度の印象ですね ^^;「4分でデプロイ」をどうやって実現しているのか気になりますね
私も前の会社でRAM 4TBサーバー / RAM 8TBサーバーを運用したことがありますが、構築費はもちろん莫大でした。それでも、そのスペックをクラウドで代替できるとはとても思えませんでした。
そうでしょうね。
要約ありがとうございます。
印象的な部分が多いです。
かなり長いインタビューなので、途中途中で要約しました。全体を聞きながらスクリプトを参照してください!
スクリプト: https://app.podscribe.ai/episode/83433649