Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cost Reduction for ECS Fargate Usage in Backlog

vvatanabe
February 01, 2024

Cost Reduction for ECS Fargate Usage in Backlog

BacklogのGitホスティング機能で使用しているECS Fargateのコスト効率化の取り組みを紹介します。
https://github.com/vvatanabe
https://twitter.com/vvvatanabe
https://backlog.com/ja/

vvatanabe

February 01, 2024
Tweet

More Decks by vvatanabe

Other Decks in Technology

Transcript

  1. ▪ “進んでるね!”で、チームは進む。 みんなで使う簡単、便利な プロジェクト・タスク管理ツール。 タスク管理や Wiki など情報共有に関する豊富な機能がオ ールインワン 直感的に操作が可能なインターフェース SaaS版

    / インストール版の2つの形態で提供 ▪ ▪ 担当者・期限を明確に チームのタスクを、担当者や期限を明確にして課題 を予定通りに完了させましょう。課題の更新は Backlogやメールで受け取れます。 ガントチャートで可視化 プロジェクト計画をガントチャートで可視化します 。メンバーの進捗を把握することで、作業の遅延に いち早く気づけます。 Wikiでドキュメント管理 Backlog Wikiは個人メモ、会議の議事録、作業マニュ アル、仕様書などチームメンバーに向けた情報を文 書で管理します。リンク共有やPDF出力にも対応し ています。 出先からも楽々!モバイルアプリ 無料で使えるBacklogモバイルアプリ(iOS / Android サポート)を利用すれば、外出先でもプロジェクト の進捗を確認したり、課題の追加やコメントを投稿 できます。
  2. コスト削減の対象となるサブシステム ・Gitホスティング機能はECS Fargate上で稼働する、小さな独立した 複数のサービスを中心に構築されている。 ・星アイコンはECS Fargateで稼働しているサービスを示す。 ・サービス間の通信プロトコルはgRPC。 ・本セッションでは、図のECS Fargateで稼働しているサービスのコ スト削減について紹介する。

    BacklogのGitホスティング機能のサブシステムの概観 AWS Cloud [EKS] WEB [EKS] API [ECS] Git PROXY [ECS] Git HTTPS [ECS] Replication Worker [ECS] Git SSH [SQS] [S3] [EC2] GIT [EBS] Ripository (Primary) [EC2] GIT [EBS] Ripository (Replica) ※ コンポーネント間のLBなどは省略 gRPC
  3. 【手軽に節約】プラットフォームをARM64へ移行 Region: ap-northeast-1 vCPU単位(1時間) vRAM GB単位(1時間) Linux/x86 0.05056USD 0.00553USD Linux/ARM

    0.04045USD 0.00442USD 割引率 19.9%↓ 20.0%↓ ※ 2024/01/28時点 Refs: https://aws.amazon.com/jp/fargate/pricing/ 移行するだけでお得に ・サブシステムの構成に手を入れずに、少ない労力で大きな成果を得たい。 ・x86からARMへを移行するだけで費用が20%安くなる。 ・特にx86に依存する要素がない限り、使わない手はない! ・余談)昨年リリースしたAI関連の新機能もECS Fargate上で稼働しおり、最初からARMを選択した。 "requiresCompatibilities": [ "FARGATE" ], "runtimePlatform": { "operatingSystemFamily": "LINUX", "cpuArchitecture": "ARM64" }, Taskdefinition
  4. 【手軽に節約】プラットフォームをARM64へ移行 マルチアーキテクチャビルドの時間を短縮する ・問題点:x86上でbuildxを使ってARMのコンテナイメージをビルドするのにめちゃくちゃ時間がかかる。 ・原因:時間がかかっているのはアプリケーションのバイナリをビルドする処理。buildxはマルチアーキテクチャのビルドをサポート するためにQEMU(Quick Emulator)を利用している。QEMUがエミュレーションに基づいて動作するため時間がかかる。 ・解決策:(Goの場合)QEMUを介さずGoのクロスコンパイルでARMのバイナリをビルドする。 改善後 改善前 FROM

    --platform=$BUILDPLATFORM golang:1.21 ARG TARGETARCH WORKDIR /go/src/example COPY go.mod . COPY go.sum . RUN go mod download COPY . . RUN GOOS=linux GOARCH=${TARGETARCH} go build -o /go/bin/myApp ./... FROM gcr.io/distroless/static-debian11 COPY --from=0 /go/bin/myApp /go/bin/myApp ENTRYPOINT ["/go/bin/myApp"] $BUILDPLATFORMはDocker BuildKitが提供する 環境変数で、ビルド実行中のプラットフォーム (例:linux/amd64)を指す。 TARGETARCHは、ターゲットのアーキテクチャ(例: amd64, arm64)を指定するための引数 GOARCH環境変数を使用してターゲットの アーキテクチャ(TARGETARCHで指定) を設定し、アプリケーションをビルド
  5. パフォーマンスとコストの最適化 【余剰を節約】コンピューターリソースの最適化 問題: ECS Fargateで稼働している一部のサービス(基本的にデータのバケツリレ ーしか行っていない)において、ピーク時にメモリがスパイクする傾向があ った。 暫定対策: スパイクしてもギリギリOOMにならない程度にメモリを増やして凌いでい た。(お金で殴る)

    調査内容: ロードテストを実施して、Goのpprofコマンドを使ってヒープのプロファイ ラを取得。gRPCクライアントのストリームで使用されているバッファ領域 が、コネクション数に比例して上昇していた。 例. gRPCクライアントのメモリ使用量を抑える スパイク!
  6. パフォーマンスとコストの最適化 【余剰を節約】コンピューターリソースの最適化 原因: ・gRPCクライアント(grpc-go)の実装でウインドウサイズの設定が 1024 * 64 - 1(64k-1)を閾値に動作が変わる。 ・64k-1未満の場合

    => http2のウインドウサイズが動的に変更される。64k-1以上の場合 => ウインドウサイズは動的に変更されない。 ・特にhttp2におけるPingのRTTが低いほどウインドウサイズが増加していく。 ・対象の全ECSのサービスは、同リージョン内で通信しており距離が近い(RTTが低い)のでウィンドウサイズが増加しやすい。 ・リージョンを跨ぐような大陸間通信の場合は、ウインドウサイズの動的拡張の恩恵を得られる。 ・詳細:https://grpc.io/blog/grpc-go-perf-improvements/#bdp-estimation-and-dynamic-flow-control-window 対応策: ・gRPCクライアントのウインドウサイズを64k-1以上に設定する。 結果: ・メモリ使用量が安定化して、ピーク時のスパイクがなくなる。 ・応答時間も伸びることなく影響なし。 例. gRPCクライアントのメモリ使用量を抑える 圧倒的平穏
  7. ・Savings Plansは、1年または 3年の期間で、一貫したコンピューティング使用量 (USD/時間で測定) を契約する代わりに、 Amazon EC2、AWS Lambda、AWS Fargateの使用料金が割引される柔軟な料金モデル。 ・Savings

    Plansには3つのタイプがある。 ・Compute Savings Plans ・最大66%のコスト削減を目指す非常に柔軟なプラン。 ・EC2インスタンス、Fargate、Lambdaに関わらず使用され、インスタンスの種類、サイズ、リージョン、OSなどに拘束 されずに利用できる。 ・EC2 Instance Savings Plans ・最大72%のコスト削減を提供する、より特定のプラン。 ・特定のリージョン内のインスタンスファミリーに対して適用され、インスタンスのサイズ、OS、テナンシーに関係なく 利用できる。 ・SageMaker Savings Plan ・Amazon SageMaker MLインスタンスを最大64%節約できる新しい柔軟な料金モデル。 【年払で節約】Compute Savings Plansの適用 年単位でまとめて契約してお得に
  8. 【年払で節約】Compute Savings Plansの適用 オプションによる料金比較 Region: ap-northeast-1, CPU: ARM ※ 2024/01/28時点

    Refs: https://aws.amazon.com/jp/savingsplans/compute-pricing/ vCPU単位(1時間) vRAM GB単位(1時間) 割引率(vCPU, vRam) On-Demand 0.04045USD 0.00442USD - Savings Plans(1年, 前払いなし ) 0.03185USD 0.00348USD 21%↓, 21%↓ Savings Plans(1年, 一部前払い ) 0.03034USD 0.00332USD 25%↓, 25%↓ Savings Plans(1年, 全額前払い ) 0.02973USD 0.00325USD 27%↓, 26%↓ Savings Plans(3年, 前払いなし ) 0.02184USD 0.00239USD 46%↓, 46%↓ Savings Plans(3年, 一部前払い ) 0.02022USD 0.00221USD 50%↓, 50%↓ Savings Plans(3年, 全額前払い ) 0.01982USD 0.00217USD 51%↓, 51%↓ ・Compute Savings Plansの(1年, 全額前払い )を契約。Fargate利用料金を27%削減することに成功。 ・現時点での使用量(vCPU, vRAM)で契約して、年単位で増減を見直す。
  9. まとめ 〜 削減結果 〜 コストエクスプローラーで見るコストの推移 Savings Plansの適用状況 ・ECS Fargate上で稼働している4種類のサービスに対して、それぞれARMへの 移行とリソースの最適化を実施した。

    ・Savings Plansの適用状況は、Savings Plans使用状況グラフ で確認する。 ※ 請求とコスト管理 > Savings Plans > 使用状況レポート さらに!ここから Savings Plansを適用して27%削減 66%削減! 【手軽に節約】プラットフォームをARM64へ移行 ↘ 【余剰を節約】コンピューターリソースの最適化 ↙ 【年払で節約】Compute Savings Plansの適用 ↘ _人人人人人人人人人人人人_ > 約70%のコスト削減!! <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ 100%適用されていることを確認 日々コストが確実に削減されて いく様子が伺え達成感に!