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

Cost Reduction for ECS Fargate Usage in Backlog

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for vvatanabe 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/

Avatar for vvatanabe

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%適用されていることを確認 日々コストが確実に削減されて いく様子が伺え達成感に!