スタックオーバーフローの仕組み-Iron

Stack Overflowは大規模プロジェクトですが、そうではありません。 つまり、私たちは多くのことを達成しましたが、私たちのプロジェクトを「ビッグ」と呼ぶことはできません。それは早すぎます。 例としていくつかの例を挙げましょう-現在どのような負荷を処理していますか。 2013年11月12日付の24時間統計スライス。 これは通常の平日です。 ここでは、情報はCDNを使用せずに、独自のコンピューティングパワーでのみ表示されます。







統計







これらの数値を取得する方法については必ず投稿する必要がありますが、これらの統計(トラフィックを除く)はHTTPログのおかげでのみ計算されます。 一日に何時間もかかったのですか? 魔法と呼んでいます。 ほとんどの人は「マルチコアプロセッサを備えた複数のサーバー」と呼んでいますが、私たちはそれを魔法に帰します。 Stack Exchangeは、次のハードウェアで実行されます。







この美しさがどのように見えるかは、最初の写真(上記)で見ることができます。



私たちは単にサイトをホストしているだけではありません。 最も近いラックは、仮想化(vmware)および補助インフラストラクチャ用のサーバーです。これらは、展開マシン、ドメインコントローラー、監視、管理者用の追加データベースなど、サービスの動作に直接影響しません。 上記の2つのSQLサーバーは最近までバックアップサーバーでしたが、読み取り専用のクエリに使用されるようになったため、長期間データベースの負荷を考慮することなく拡張を続けることができます。 このリストの2つのWebサーバーは、開発および周辺タスク用に設計されているため、トラフィックをほとんど消費しません。



設備について



現時点で何かが発生し、インフラストラクチャのすべての冗長性がなくなったと想像すると、スタックエクスチェンジ全体がパフォーマンスを低下させることなく次の機器で動作できます。







実際に検証するために、いくつかのサーバーの切断を試行する必要があります。 :)



以下は、平均的なハードウェア構成です。







20Gbpsは多すぎるように見えますか? はい、たとえば、ピーク時のSQLサーバーは100-200 Mbit / sを超えるネットワークをロードしませんが、バックアップ、トポロジの再構築を忘れないでください-これはいつでも必要になる可能性があり、その後ネットワークは完全に使用されます。 このような量のメモリとSSDは、このチャネルを完全にダウンロードできます。



保管



現在、SQLには約2 TBのデータがあります(18個のSSDの最初のクラスターで1.06 / 1.16 TB、2番目のクラスターで0.889 / 1.45 TB、4つのSSDで構成されています)。 クラウドについて考える価値はあるかもしれませんが、現在はSSDを使用しており、データベースへの書き込み時間は文字通り0ミリ秒です。 メモリー内にデータベースがあり、その前に2つのキャッシュレベルがある場合、Stack Overflowの読み取り/書き込み比率は40〜60です。はい、そうです、データベースの時間の60%を書き込みます。

Webサーバーは、RAID1で320 GB SSDを使用します。

ElasticSearchサーバーには300 GB SSDも付属しています。 上書きとインデックス作成が頻繁に行われるため、これは重要です。



SANについても言及しませんでした。 これは、24個のSAS 10Kディスクと2x10 Gb / s接続を備えたDELL Equal Logic PS6110Xです。 VmWare仮想サーバーのストレージとしてクラウドとして使用され、サイト自体には接続されていません。 このサーバーがクラッシュした場合、サイトはしばらくの間それについても知りません。



次は?



これで何をしますか? より多くのパフォーマンスが必要です-これは私たちにとって非常に重要です。 11月12日、ページは平均28ミリ秒でロードされました。 ダウンロード速度を50ミリ秒以下に維持しようとしています。 その日の人気のあるページの平均負荷統計は次のとおりです。







タイミングを記録することにより、ダウンロード速度を監視します。 これにより、非常に視覚的なスケジュールを作成できます。





将来のスケーラビリティ



明らかに、すべてのサービスが低負荷で動作するようになりました。 Webサーバーは、プロセッサの平均5〜15%、15.5 GBのRAM、および20〜40 Mbpsのネットワーク帯域幅を消費します。 データベースサーバーの平均プロセッサ負荷は5〜10%、RAMは365 GB、ネットワーク帯域幅は100〜200 Mb / sです。 これにより、完全に開発することができ、非常に重要なことは、負荷の増加(コードのエラーまたはその他の障害)が発生した場合に落下しないようにします。



Opserverのスクリーンショットを次に示します。







負荷が非常に低い主な理由は、コードの効率です。 この投稿は別の記事に捧げられていますが、効果的なコードは、将来のハードウェアのスケーリングにとって重要な場所です。 あなたがしたことはしたが、すべきではなかったすべてのことは、あなたがそれをまったくやらなかった場合よりも多くの費用がかかります-同様のルールが非効率的なコードに適用されます。 コストは次のように理解されます:電力消費、ハードウェアのコスト(より多くのサーバーが必要、またはより強力でなければならないため)、より複雑なコードを実現しようとしている開発者(ただし、率直に言って、最適化されたコードは必ずしも容易ではない)ページ-別のページをロードするのを待たないユーザーの反応で表現されていること...または、もうあなたに来ません。 効率の悪いコードの価格は、思っているよりもはるかに高くなる可能性があります。



そのため、今日、Stack Overflowが現在のハードウェアでどのように機能するかを知りました。 次回は、なぜ急いでクラウドに移行しないのかを学びます。



All Articles