b. 余剰リソースをどのような⼿法で削減していったか 2. (時間があれば)その他の最適化した手法の紹介 a. Kubernetesのリソースの使われ⽅を⾒てノードのインスタンスタイプを最 適化 b. Datadogの料⾦体系を⾒て、コストの最適化を実施 c. CircleCIの実⾏環境を意識して最適化する d. Cloud Native BuildpacksのBuildキャッシュの動きを⾒て最適化する
b. 余剰リソースをどのような⼿法で削減していったか 2. (時間があれば)その他の最適化した手法の紹介 a. Kubernetesのリソースの使われ⽅を⾒てノードのインスタンスタイプを最 適化 b. Datadogの料⾦体系を⾒て、コストの最適化を実施 c. CircleCIの実⾏環境を意識して最適化する d. Cloud Native BuildpacksのBuildキャッシュの動きを⾒て最適化する
20000 前提条件 最大指標 DB serverless 20% DB指標 前提条件 ※DBはAWSのACUなど負荷テスト実施時に記録されたもの を記録 Pod名 Pod数上限 最大Pod負荷率 Pod A 20 20 Pod B 10 15 ※Pod負荷率は、後述のものを負荷テストを通じて計測して記 録する
b. 余剰リソースをどのような⼿法で削減していったか 2. (時間があれば)その他の最適化した手法の紹介 a. Kubernetesのリソースの使われ⽅を⾒てノードのインスタンスタイプを最 適化 b. Datadogの料⾦体系を⾒て、コストの最適化を実施 c. CircleCIの実⾏環境を意識して最適化する d. Cloud Native BuildpacksのBuildキャッシュの動きを⾒て最適化する
a. その際には、スケールアウトできないリソースに関しては、インフラのスペックの上限は気にしておく 3. スパイクを観測して、スパイク許容量を定める a. 許容量を超えるようなスパイクが来る場合には、それも検知できるような運⽤は⽤意しておく 4. これを守れるようにリソース計画を立てる。 a. ⾃動的に縮退できる仕組みは可能な限り⼊れる
b. 余剰リソースをどのような⼿法で削減していったか 2. (時間があれば)その他の最適化した手法の紹介 a. Kubernetesのリソースの使われ⽅を⾒てノードのインスタンスタイプを最 適化 b. Datadogの料⾦体系を⾒て、コストの最適化を実施 c. CircleCIの実⾏環境を意識して最適化する d. Cloud Native BuildpacksのBuildキャッシュの動きを⾒て最適化する
CPU request aws-node 25m ebs-csi-nod 30m datadog 0m argocd 0m fluentd-cloudwatch 100m kube-proxy 100m Deployment 上記の状況だと、主要 Pod Aはノードの1台しか配備できないと言う構図になってしまう。 CPU request 主要Pod A 2000m 主要Pod B 1000m 主要Pod C 2000m 主要Pod D 1000m
CPU request aws-node 25m ebs-csi-nod 30m datadog 0m argocd 0m fluentd-cloudwatch 100m kube-proxy 100m Deployment 上記の状況だと、主要 Pod Aはノードの3台まで配備できる構図になる。 つまり1つあたりのノードを倍にしたら3倍の Podが格納でき効率的になる。 CPU request 主要Pod A 2000m 主要Pod B 1000m 主要Pod C 2000m 主要Pod D 1000m ※1.1つのノードの同じPodが立ちすぎるとSpotインスタンスが終了した場合に、影響が大きくなるので、 topologySpreadConstraintsなどで 別途立つ数を調整する必要はあります。 ※2.Grpcを使っていると、デフォルトのスレッド数は、ノードの CPUの数に依存して決まる関係で、ここら辺もノードを増やすと、 Java側の DirectBufferなどは増加する傾向にあります。この点も必要に応じて調整は必要になるかもしれないです。