, , . … ! , .
South Park, 306, «— »
Smug Alert!
HighLoad++ Google Amazon, DNS- gdnsd. , , . , .
, , , . :
- . — , . «» , . «» , Linode, , , , - — , , .
- . , AWS A4. , , , . 3 , — . dedicated- , .
- «» open source, , , , , . .
- . Aerospike. SSD-, SSD, . NVMe , , , . Aerospike , .
dedicated- , . — Hetzner, - , , . .
, , - :
, , , , .
, …
Chef, ?
, , . HTTP- nginx , . « » — , , .
gdnsd:
; , ; IP- service_types => { adserver => { plugin => extmon, cmd => ["/usr/local/bin/check-adserver-node-for-gdnsd", "%%IPADDR%%"] down_thresh => 4, ; 4 ? . ok_thresh => 1, ; ? ! interval => 20, ; 20 timeout => 5, ; 5 } ; adserver } ; service_types plugins => { multifo => { ; 1/3 , DNS ; , - — , ; , «» ; up_thresh => 0.3, adserver-eu => { service_types => adserver, www1-de => 192.168.93.1, www2-de => 192.168.93.2, www3-de => 192.168.93.3, www4-de => 192.168.93.4, www5-de => 192.168.93.5, } ; adserver-eu } ; multifo } ; plugins
DNSゾーンファイルで結果の構成を使用します。
eu.adserver.sample. 60 DYNA multifo!adserver-eu
nginxのサーバープールを作成し、構成をファームに展開します。
upstream adserver-eu { server localhost:8080 max_fails=5 fail_timeout=5s; server www1-de.adserver.sample:8080 max_fails=5 fail_timeout=5s; server www2-de.adserver.sample:8080 max_fails=5 fail_timeout=5s; server www3-de.adserver.sample:8080 max_fails=5 fail_timeout=5s; server www4-de.adserver.sample:8080 max_fails=5 fail_timeout=5s; server www5-de.adserver.sample:8080 max_fails=5 fail_timeout=5s; keepalive 1000; }
ローテーションで25を超えるサーバーがある場合、同じ名前で25個のグループに分割し、 Aレコードではなくgdnsdで同義語(DYNC)を動的に選択することを忘れないでください 。
サーバーのリストは、必要に応じて、GDNSまたは自動化システムに従って自動的に入力できます。 たとえば、当社ではパペットが使用されており、特別なクラウンスクリプトがパペットマスターに登録されているさまざまなタイプのサーバーの最新リストを保持しています。 localhostを含む行は、エラーのためにリストが空の場合の状況から保護します。この場合、各nginxは独自のフロントエンドのみにサービスを提供し、災害は発生しません。
私たちは光る、少年たち、光!
だから、何が起こった:
- 優れた耐障害性。 リスクは、ネットワークリスク(これは、独立した電源とネットワークを使用してアプリケーションを複数の地域に分散することで解決されます)および構成リスク(nginxまたはgdnsdの構成に手を加えて、すべてをすぐに壊す変更を邪魔することはありません-これに対処するためのレシピも知られています)
- プールの「ウォームアップ」の問題と容量不足の問題は存在しません。 Webアプリケーションは、負荷によって最初に停止することが保証されています。
- 均一なトラフィックフローとネットワーク負荷分散。 10ギガビットサーバーへの5 Gb / sのトラフィックを受け入れますか? 問題はありません。バランサーとアプリケーション間のトラフィックを内部ネットワークに転送することを忘れないでください。また、プロバイダーがこれら10台のサーバーのインターネットへの一般的なアップリンク1 Gb / sのスイッチを販売しないようにしてください。
- 「スムーズ」な展開。 DNSバランシングのみを使用する場合、多くのパートナー(SSP)が「屋根を引き裂く」という事実に直面しました。これは、プールからのサーバーの連続的な損失です。 Javaアプリケーションは、初期化中に必要な多くのデータをメモリにロードするため、状況は複雑でした。これには時間がかかります。 クロスバランシングにより、プロセスは反対側からほとんど見えなくなりました。
プルティック氏のResみ
あなたは無料のバランスをとる必要があり、スティッキーセッションは犠牲者です。 ただし、nginxの無料バージョンはIPハッシュによるバランシングを提供し、Aerospikeなどの最新のNoSQLデータベースは、アプリケーションで使用できる、応答時間が速い信頼性の高い一般的なセッションリポジトリとして使用できます。 最後に、これは愛国的ではありませんが、 単一のルールに従って複数のバランサーにユーザーをルーティングできる HAProxyに切り替えることができます 。 一般に、スティッキーセッションが必要な場合は、利用可能な手段でそれらのために戦います。
フィギュア
現在、20コアサーバーのそれぞれが1秒あたり最大15,000のリクエストを処理しています。これは、Javaアプリケーションの実用的な上限に近いものです。 すべてのクラスターで、CDNを除き、毎秒50万を超えるリクエスト、5ギガビット/秒のインバウンドおよび4ギガビット/秒のアウトバウンドでピーク時にバランスを取り、処理します。 はい、DSPの特異性は、発信に対する発信の過剰であり、オークションのオファーはそれらに対する意味のある答え以上のものです。
igorsによる投稿