ハードウェアとリソースの最適化
概要
最適化は「一つのことを加速する」ことではなく、パフォーマンス↔コスト↔信頼性↔エネルギーのバランスをとることです。基本的な手順:SLI/SLOとプロファイルの測定、ボトルネックの検出、容量の「適切な寸法」、スケーリングの自動化、およびイメージ/チャート/ポリシーのアンカーの改善。
目標と原則
UXからハードウェアへ:SLO (p95レイテンシー、オペレーションの成功)→制限リソースを探します。
右サイジング:負荷の性質のためのリソースとインスタンタイプ。
現金と近接:ストレージとネットワークへの「高価な」旅行を削減します。
自動化:オートスケーリング、ライフサイクルポリシー、IaC。
観測性:4信号メトリック、CPU/allocプロファイル、トレース。
セキュリティ=パフォーマンス:mTLS/signatures/limits-ハードウェアは可能な限り加速されます。
CPUとスケジューリング
タスク:コンテンツとキャッシュミスを最小限に抑え、NUMAと割り込みを考慮します。
NUMA認識:ノードによるピン留め('numactl --cpunodebind --membind')、データベース/ブローカーの場合-ノード上で修正します。
IRQ/softirq:コア(RSS/RPS)で配布し、作業者と競合せずにCPUのホットキューを保護します。
Hyperflow:「レイテンシに敏感」-物理コア上のワーカーを修正します。
コンテキストスイッチ:長いキュー/バッチング/非同期を介して削減します。
コンパイラ/JIT: PGO/LTO (C/C++)、Graal/HotSpotプロファイル(Java)、 'GOMAXPROCS'、およびworker allocation (Go)を含む。
bash
IRQ affinity: bind NIC queue to specific CPU echo 2 >/ proc/irq/XX/smp_affinity # kernel mask
Softirq balance on sysctl -w net network cores. core. netdev_budget=600 sysctl -w net. core. netdev_max_backlog=5000
メモリと割り当て管理
THP/HugePages: JVM/DBの場合-通常はTHPを無効にし、手動でhugepagesを使用します(TLBミスを軽減します)。
NUMAバランス:ステートフルの場合-ローカルノードにメモリをコミットします。
- JVM: G1/ZGC、 '-Xms=-Xmx'等しく、合理的な'MaxGCPauseMillis'。
- Go: 'GOGC' (100-200で始まる)、不要な割り当て、'pprof'プロファイルを避けます。
- Python: uvloop、 asyncio、 C拡張、接続プールを使用します。
- スワップ/zswap:販売中、通常は重要なサービスにスワップします。汎用ノード-「ソフト」負荷のためのzswap。
ストレージとI/O
ディスクの種類:ホットパス用のNVMe、ログ/チェックポイント/テンポ用の個別のプール。
FS:大きなファイル/DBログのXFS;ext4:小型・汎用性に優れています。
RAID/EC:低遅延のためのRAID10、コールドデータのためのRAID6/EC。
I/Oスケジューラ:NVMeの'none'/'mq-deadline'。
非同期/バッチ:グループレコードはWrite-Behind/Group-Commitを使用します。
bash fio --name=randread --filename=/data/test --size=20G --bs=4k \
--iodepth=64 --rw=randread --ioengine=libaio --numjobs=4 --time_based --runtime=60
ネットワーク
MTUとオフロード:データセンターで9000 MTU(エンドツーエンドの場合)、許可されている場合はGRO/LROを有効にします。
RSS/RPS/RFS: NIC上のマルチチャンネルキュー、コアによる分布;irqbalance-制御下で。
SO_REUSEPORT:コアに分散されたスケーラブルなリスニングソケット。
クライアントのタイムアウトとプルリング:短いTCPキープアライブ、オープン接続の制限、バックプレッシャー。
TLS: TLS 1。3のAES-NIハードウェア指示、セッション再開、OCSPのステープリング。
bash sysctl -w net. core. rmem_max=268435456 sysctl -w net. core. wmem_max=268435456 sysctl -w net. ipv4. tcp_rmem="4096 87380 134217728"
sysctl -w net. ipv4. tcp_wmem="4096 65536 134217728"
GPU/FPGA/SmartNIC(適切な場合)
GPU:不正防止推論、推奨、履歴書;'util'、' mem'、'sm_efficiency'を監視します。
SmartNIC/eBPF/DPDK:カーネルへの遷移なしにオフロード、フィルタリング、テレメトリーをL4/L7します。
エネルギープロファイル:安定したレイテンシーのための周波数を修正します。積極的な節電を避けて下さい。
アプリケーションとRDBMS
接続プール:"max_conns'を制限し、接続プール(PgBouncer/Hikari)を適用します。
インデックス/スケジューラ:インデックス、パーティショニングをカバーするEXPLAIN/ANALYZEプロファイル。
キャッシュ:Redis/インプロセスキャッシュ、静的CDN、 ホットAPIのエッジキャッシュ。
Idempotenceとキュー:後退のカスケードを避け、dedupをオンにします。
Gzip/Brotli: CPUコストを考慮した応答の圧縮。バランスを選びなさい。
コンテナとKubernetes
リクエスト/リミット
リクエスト="保証"、制限="天井。"CPU→スロットリングとp99による誤った制限。
バーストロード(トーナメント/マッチピーク)-p95のマージンを考慮してください。
ビンパッキング:個別のホストプール(レイテンシ-クリット、バッチ、GPU、スポット)。トポロジー(アンチアフィニティ、スプレッド)を使用します。
オートスケーリング
カスタムメトリックによるHPA (CPUではなくRPS/p95)。
「長寿」と「オフピーク」労働者のためのVPA。
クラスタオートスカラー+個々のノードグループ(オンデマンド/スポット)。
イベントロード用KEDA(キュー、カフカ、cron)。
スケジューラとマネージャ
CPUマネージャ:レイテンシ・クリティカル・フィードにフルコアをピン留めするための'static'。
トポロジマネージャNUMAアライメント。
HugePages/Deviceプラグイン:DB/低遅延およびGPU/FPGA用。
yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: { name: api-gw }
spec:
scaleTargetRef:
apiVersion: apps/v1 kind: Deployment name: api-gw minReplicas: 6 maxReplicas: 60 metrics:
- type: Pods pods:
metric:
name: http_latency_p95_ms target:
type: AverageValue averageValue: 120
FinOpsとコスト
関税プロファイル:CPU/RAM/ディスク/ネットワークによるインスタンスの選択(計算最適化、メモリ最適化、ストレージ最適化)。
スポット/プリエンプチブル:マルチゾーン冗長性を持つバッチ/ステージング/キャッシュ用。
予約/貯蓄:「永久的な」部分のための1-3年間の留保。
ホット/コールド:階層型ストレージ、アーカイブオブジェクト、ログ保持。
アイドル状態のリソース:重要でない環境の夜間/週末停止。
エネルギー効率(GreenOps)
力のプロフィール:サービスによってバランスをとられる性能対。
共同位置:寒い時間に圧縮し、未使用のノードをオフにします。
KPI:要求ごとのワット、p95/watt、 CO₂-プロバイダのメトリック。
観察とテスト
CPUは/スロットル、'cycles/instructions'、 LLC miss、 RSS/working set、 page faults、 disk lat p95/99、 NIC drops、 retransmitsを盗む。
トレース:「ゴールデンパス」のための分散トレイル。
プロファイリング:eBPF/Perf/Flamegraphs、 'pprof '/YourKit/JFR。
負荷テスト:SLO指向、操作の実際のミックス、「ウォームアップ」フェーズ、フォルト注入。
promql
CPU throttling доля sum(rate(container_cpu_cfs_throttled_seconds_total[5m])) by (pod)
/ sum(rate(container_cpu_usage_seconds_total[5m])) by (pod)
Network loss sum (rate (node_net_dropped_total[5m])) by (instance)
最適化チェックリスト
- SLOとゴールデンパス(API/Payments/Disbursements)が定義されています。
- CPU/alloc/IO/ネットワークプロファイルが収集され、トップNボトルネックが見つかりました。
- NUMA/IRQ/RSSはレイテンシクリティカルノードで構成されています。
- THP off(必要に応じて)、DB/Javaサービスのためのhugepages。
- ホットデータ用のNVMe、 XFS/IOシード構成、fio-bench確認。
- ネットワークスタック:MTU、 RPS/RFS、 SO_REUSEPORT;タイムアウト/プール。
- Kubernetes:リクエストが正しい、制限が制約されない、ビジネスメトリックによるHPA、 VPA/CAが含まれています。
- 「高価な」パス上のキャッシュとCDN;Redis/edgeキャッシュ。
- FinOps:右サイジング/リザーブ/スポットプール;アイドル環境を停止します。
- CIのパフォーマンスオートテスト、p95/p99の回帰。
iGaming/fintech固有の
スケジュールされたピーク:トーナメント/試合/プロモーション→前線の「弾性」プール、キャッシュ/CDNの事前ウォーミング、RPS/レイテンシによるHPA。
支払いと支払い:個々の「ゴールド」IP/ドメイン、優先順位キュー、リソースの分離(テイン/許容)、ベースリザーブ。
Antibot/antifraud:ヘビーモデル-GPU-workers;オンラインスコアリング≤ 50 ms p95;機能のキャッシュ。
規制:変更できないログと暗号化がSLOを壊すべきではありません-ハードウェアの加速と非同期パイプラインをオンにします。
ミニプレイブック
リリース後の待ち時間:1.燃焼率のSLOを点検して下さい;2) 'cpu/alloc'プロファイル;3)ロールバック/フィーチャーフラグ;4) レプリカ/APIキャッシュを増やす。5) RCAおよびテスト固定。
ピーク負荷(試合/トーナメント):1.CDN/キャッシュをウォームアップします。2)リフトminReplicas;3)バースト制限を含める。4)ポストキュー;5)二次関数の読み取り専用モードを有効にします。
よくある間違い
CPUの「窒息」ピークワークロードを制限する→高いp99。
無効なノードプール:ミックスレイテンシクリティカルとバッチ。
データベース/ブローカーのNUMA/IRQ設定がない。
アルゴリズム/キャッシュ/SQLを修正するのではなく「、症状の治療」(CPUの追加)。
RPS/latencyの代わりにCPUによるHPA→lateスケール。
CI→prodでの回帰にパフォーマンステストはありません。
合計
最適化は体系的な仕事です:SLI/SLO、プロファイル、修正アルゴリズム、チューンハードウェア(NUMA/IRQ/IO/ネットワーク)、「サイズ」リソースを正しく測定し、スケーリングを自動化します。テンプレート(画像、チャート、政治)、制御コスト、エネルギーの改善をキャプチャします。プラットフォームは極端なピーク時でも高速で経済的で持続可能です。