生きている例のクラウドでのハイロード

こんにちは、 Flops.ruホスティングがあなたと一緒です。今日は、かなり大きくロードされたプロジェクトをクラウド環境に移動した結果についてお話します。 問題のプロジェクトはadblockアプリケーションのAdguardラインであり、その開発者はこの記事の準備に親切に参加しました。



この記事では、プロジェクトの仮想インフラストラクチャ、クラウドへの転送の結果について説明すると同時に、移行によって発見されたいくつかの興味深いボトルネックとバグをリストします。 さらに、プロジェクトの作業を示す多くのグラフを提供します。 一般的に、私たちはあなたを猫に招待します。









プロジェクトの簡単な特徴



ラッシュアワーのトラフィック-200-250 Mbps。 すべての仮想プロジェクトサーバーの合計メモリ容量は70 GBです。 総CPU消費のピークは8 Xeon 2620プロセッサコアの領域にあり、移動前は、プロジェクトは2台の物理サーバーに配置された8台の仮想マシンに存在していました。 移行中に、最も負荷の高いアプリケーションを別々のサーバー(1つのサーバー-1つのアプリケーション)に移動することが決定され、マシンの数は12に増加しました。





LinuxとWindowsの両方をサポートしているため、例外なくすべてのマシンを移行できました。 私たちは移動自体にこだわるつもりはありません-それは驚くことなく通過し、代わりに移動後に注目を集めた興味深い側面について話します。



プロジェクトによって作成される負荷は、極端な高負荷からはほど遠いものの、それでも非常に高く、ネットワークスタックからデータストレージシステムまで、すべてのサブシステムに影響します。



パブリックおよびローカルエリアネットワーク



ネットワークスタックから始めましょう。 クライアントの製品ラインは、更新や新しいデータベースのために定期的にバックエンドサーバーにアクセスするいくつかのデスクトップアプリケーションで構成されています。 各製品ラインは、個別の仮想サーバーにある独自のバックエンドによって提供されます。 多くのクライアントがあるため、ネットワークに適切な負荷がかかります。 以下は、バックエンドサーバーの1つによるトラフィック消費量のグラフです。







クライアントサーバー間の通信に使用されるローカルFLOPSネットワークに個別に注意する必要があります。

  1. ローカルネットワークは完全に無料であるため、トラフィックに関係なく使用できます。
  2. 帯域幅-1 Gbps。
  3. DigitalOceanやLinodeとは異なり、ローカルFLOPSネットワークはプライベートであり、信頼できる環境を作成するために使用できます。
  4. インターネットアクセスを維持しながら、一部の仮想サーバーを外部から完全に分離する場合は、他のサーバーでNATを設定することにより、ローカルネットワークを使用してこれを行うことができます。










ディスクサブシステム



ドライブでアクティブに動作する唯一のアプリケーションは、別の仮想サーバーでホストされているPostgresデータベースです。 アクセスログ、サービスデータ、および統計はデータベースにアクティブに書き込まれます。これにより、ディスクへの書き込みの強度が高くなります。書き込みで最大750 iops、ピークで読み取りで最大1500 iopsです。







これらの条件下でも、主にSSDの使用によるディスクサブシステムの応答時間が短いため、平均負荷(負荷平均)は比較的小さいままです。





さまざまなキャッシュによって十分に償却され、常にディスクに到達するわけではない読み取り操作とは対照的に、データベースへの各書き込みには先行書き込みログ(WAL)への同期書き込みが伴い、ブロックデバイスの応答中に隣接します。 したがって、SSDを使用しない場合、ピークパフォーマンスは低くなり、LAは高くなりました。



転送結果



統計とモニタリング


クライアントは移転前に独自の監視を行っていましたが、当社の資金によりツールが大幅に拡張されました。 さらに、クライアントは、サーバー内で発生するイベントに関するメッセージの受信を開始しました。たとえば次のとおりです。







詳細な統計と「オンザフライ」でサーバーを再構成する機能により、各サーバーに必要なリソース消費値を非常に正確に構成することができました。



簡単なバグ検出


統計は、以前は不明であったかローカライズできなかったいくつかの微妙なバグを追跡するのに役立ちました。 それらのいくつかを次に示します。



CPUスパイク


グラフを転送して分析した後、バックエンドアプリケーションの1つが非常に奇妙な動作を示したことが判明しました。時間の経過とともに、CPU消費が整数のコア数だけ増加しました。



次のジャンプの後、理由は非常に複雑な(そして誤った)正規表現であり、この正規表現内のスレッドがCPU使用率100%で定期的にハングすることが判明しました。



gzipコンテンツの次善の仕事


クライアントは、バックエンドサーバーのCPU負荷が永続的に高いことに非常に困惑していました。 その理由は、このようなトラフィック量でJavaツールを使用したサーバー応答のgzip圧縮には、大きな計算リソースが必要であることが判明したためです。 クライアントはコンテンツの配信を最適化し、状況はさらに良くなりました。 左右-最適化の前後のCPU負荷。







外部ネットワークトラフィックの突然の急増


クライアントが理解するのに多くの時間を要した現象の1つは、次のようなトラフィックの急激な増加です。





判明したように、それらは新しいバージョンのリリースに関連付けられていました。 ソフトウェアを開発し、定期的に更新をリリースする場合、顧客が同時にソフトウェアをダウンロードする状況をすぐに予測することをお勧めします。 あなたの分布が重くなればなるほど、そのような状況に陥るリスクが高まります:)



機器の故障リスクを最小限に抑える


転送前に、プロジェクトは2台のサーバーによって処理されていましたが、それぞれが単独でプロジェクトを処理できましたが、そのうちの1台が故障した場合、数十分のアイドル時間が保証され、神経質が損なわれます。 クラウドの移行により、物理的な鉄への依存が減少しました。



データベースの高速化


上記グラフからわかるように、データベースはデータベースと非常に集中的に機能し、ピーク時には書き込みで最大750 iops、読み取りで最大1500 iopsを生成できます。 移動前にクライアントが使用していたディスクアレイは、このようなパフォーマンスを提供できず、システムのボトルネックでした。 クラウドへの移行により、この「ボトルネック」を取り除くことができました。



システム管理者のアクションへの開発者の依存を減らす


クラウドコントロールパネルにより、開発者は以前はシステム管理者のみが利用できたアクションを実行できました-新しい仮想サーバーの作成、クローンコピーの起動、テスト機能のテスト、負荷の分析、インスタンスパラメーターの変更。 すべてのサーバー上のデータが手元にあり、これは多くのマシンがある場合に重要になります。



高速水平スケーリング


クライアントに大きな印象を与えた移動の結果の1つは、非常に高速な水平スケーリングの可能性です。 アクションのシーケンス全体は次のとおりです。

  1. 戦闘サーバーの複製と起動(5〜10秒)
  2. ラウンドロビンDNSの構成、またはnginxプロキシ構成での宛先の追加(1〜3分)


経済効果


移転前後のホスティング費用を見積もります。



以前:プロジェクトは、96 Gb RAM、6×1 Tb SATA(ハードウェアRAID10)、2x Xeon E5520の構成を持つ2つのコロケーションサーバーでホストされていました。 同様の構成の専用サーバーは、1か月に1万から2万ルーブルで見つかります。 2つ必要なので、サーバーのコストは1か月あたり36〜40千になります。 300 Mbitの専用バンドは、1か月あたり1万3〜1万5千ルーブルのコストがかかります。 スイッチのコストはおそらく3〜5千です。 四捨五入すると、合計費用は1か月あたり52〜60千ルーブル程度になると言えます。



後:固定料金プランの1 GBのメモリのコストは、1か月あたり500ルーブルです。 合計RAMが70 GBのサーバーの総コストは35,000ルーブルです。 さらに、1日の制限に収まらないトラフィックを含める必要があります。 その費用は、1ヶ月あたり約8〜12,000ルーブルになります。 結果は、1か月あたり43〜47ルーブルです。



専用サーバーのインストールと構成(監視、SMS通知、バックアップ、仮想化)のコストを考慮すると便利ですが、これがなくても、この特定の場合のクラウドでのリソースのレンタルは、同じ物理サーバーのレンタルよりも15-20%安くなりますタスク。



おわりに



クラウドと専用サーバーで単一の複雑なプロジェクトをホストする2つの方法を比較すると、クラウドは説得力のある優位性を示しました。 安価で、便利で、柔軟性があり、多くのプロジェクトの弱点を取り除くのに役立ち、クライアントに統計の設定、監視、バックアップなどの多くの日常的なタスクを無視する機会を与えました。



これまでのところ、クラウドが専用サーバーで失われる個々のシナリオに名前を付けることができますが、時間が経つにつれて、そのようなシナリオはますます少なくなると確信しています。



従来、FLOPS試用期間を登録して活用することをお勧めします( ビデオチュートリアルを参照)。 試用期間は500ルーブルまたは2週間です(何が早く終了するかによります)。 ご清聴ありがとうございました。



All Articles