私は運営部門に勤務しているため、一部のサービス展開の主な意思決定者です。私が取り組んでいる分散アプリケーションには、さまざまな種類の「サービス」が含まれています。混乱を起こしたくないので「サービス」と言います。これは同じC ++実行可能ファイルの複数のインスタンスであり、起動するサービスの種類をexeに通知するパラメータが異なります。
従来、過去にサービスを配布した方法は比率でした。1:1
方法service-counts:cores
はcores
次のとおりです。いいえhyper-threaded cores
。
はい!
4
物理CPUがあり、それぞれコアがあるホストです4
。/proc/cpuinfo
このホストでは持っているとマークされます。ここからは、32 processors
これが私が意味するものではありません。総数について話していますcores
。4cpus x 4cores == 16 cores
サービスは同時に同じシーンで並行して動作するため、システムはマルチスレッドではありません。配布されますが、そうではありません。スレッド。私たちのサービスは、スレッド全体で互いに多くのメモリを共有しません(ほとんどはデータベース情報だと思います)。知っておくべき重要な情報かもしれません。
私の質問は、私たちのソフトウェアが技術的にスレッドスレッド計算を活用しようとしないので(主に分散化service:core
取り扱い荷重)、比率に気をつけるべきですか?私はこれが他のサービスで占めることができる未使用のサイクルを無駄にするように感じます。
はい!
- ホストには16個のコアがあり、16個のプロセスを実行します。
Load average: 2.94 2.96 3.01
- サービス負荷は
40%
それぞれ約です(このボックスには16の同じ種類のサービス)。
負荷平均は比較的低いですが、1:1
メモリバス競合の複雑さ(つまり、同じコアのスレッドは同じメモリバスにアクセスするために競合する)についてはよくわかりません。より多くのプロセスをホストすることは、システムのコア数Load average
とは遠いです。16
質問!
service:core
主に比率を無視し、代わりにサービスロードとボックスロードに主に焦点を当てた新しい戦略をKPIとして提案するとき、何を考慮する必要がありますか?このタイプのアプリケーションについて考慮すべき詳細な詳細はありますか?
答え1
負荷平均以外の要因には、メモリ使用量、コンテキスト切り替え、ディスクまたはネットワークI / O(またはサービスがポートをどのように不必要に使用するかに応じて一時ポート圧力)があり、特に単一のホストでより多くのサービスがバンドルされます。提供される場合はさらにそうです。さらに、100%ロードされたシステムは、毎日、毎週、または毎月のクローン作業が開始されると災害に陥ることがあります(面白い事実:OOMキラーは通常、クローン毎日の作業のsshd
ため午前4時に終了します)。したがって、空き領域を残すのが便利かもしれません。容量。
どのようなサービス監視がありますか?サービスの待ち時間とスループット指標がある場合は、さまざまな構成をテストし、その結果を現在の基準ケースと比較できます。 (状況が悪化すると、ボトルネックが発生した場所がわかります...)
そして、1つのシステムでより多くのデータが蓄積されている場合、そのボックスが点灯している場合、回復状況は現在の設定と比較してどれほど悪いでしょうか?