Save 37% off PRO during our Black Friday Sale! »

1014-AWS-EC2-Graviton2

 1014-AWS-EC2-Graviton2

4bcb32bcb73d1ead993a6ad55b189e9e?s=128

Hasegawa Takuya

October 13, 2021
Tweet

Transcript

  1. Amazon EC2 を Graviton へ 切り替えたら幸せなことしかあ りませんでした 技術本部サービスリライアビリティグループ 長谷川 拓也

  2. 1.自己紹介 2.SRG について 3.AWS Graviton とは 4.導入先サービスの紹介 5.Graviton2 にした結果 コスト

    6.Graviton2 に切り替えるまでの軌跡 7.Graviton2 にした結果 パフォーマンス 8.Graviton2 の苦手なこと 9.まとめ
  3. 自己紹介

  4. あなたはだれ? •長谷川 拓也 2018年度新卒入社 メディア系サービスの横断組織 サービスリライアビリティグループ(SRG)所属 合同会社HCloud の社長でもある •好きなこと(もの) 自宅サーバー

    マイニング 🔨 rarirureluis
  5. (閑話)自宅サーバー •月2万円の NURO Biz を契約 NURO 光のビジネス向け(固定IP付き) •サーバーは全部で9台 うち2台は Raspberry

    Pi 4 8GB メモリ合計 302GB ストレージ合計 80TB •Proxmox 上に Qemu/KVM と LXC •アプリを動かすときは Nomad on Proxmox 個人サービスの API やバッチ 業務委託の WordPress が動いていたり 合計 80個のコンテナが動いてます🤖
  6. None
  7. (閑話)マイニング 🔨 •今年の2月から始めた新参勢 •1日大体3,500円掘れる 年換算だと約130万円 ビデオカードの価格が今でも上昇している理由は、、、 •マイニングの監視の exporter を自作 nicehash_exporter

  8. SRG について

  9. SRG •メディア事業のインフラを横断的に見ている部署 やっていること:既存サービスの改善や、新規立ち上げ、OSS 貢献など 大小合わせて200弱のサービス、システムをサポート •最近は Developers Blog でアウトプットしています 🔍

    「CyberAgent Developers Blog」
  10. AWS Graviton とは

  11. AWS Graviton2 • AWS が開発した 64-bit の Arm Neoverse N1コアを使用してカスタム構成されたプロセッサ

    • AWS Graviton2 が現行の世代 • EC2 以外のサービスでも利用可能 Amazon Aurora, Amazon Elasticsearch Service, Amazon ElastiCache でも利用可能 • 従来の x86_64 よりコストパフォーマンスに優れる
  12. EC2 m5.large vs m6g.large • 雑に UnixBench で比較 • 価格

    m5.large: 0.124 USD/h m6g.large: 0.099 USD/h ※ 2021/09/09 東京リージョンオンデマンド価格 • いずれも 2 vCPU / 8GB MEM • AMI m5.large: amzn2-ami-hvm-2.0.20200406.0-x86_64-gp2 m6g.large: amzn2-ami-hvm-2.0.20200406.0-arm64-gp2 • m5.large より 0.025 USD/h 安いのにスコアは2倍近い
  13. 導入先サービスの紹介

  14. ドットマネー by Ameba • 国内最大級のポイント交換サービス 利用者数2,000万人以上 • 既存の EC2(API, SSR(Web))

    を開発環境も含め全て置き換 え https://d-money.jp/
  15. SRG とドットマネーの関係性 • SRG は横軸組織 SRG(長谷川)が Graviton2 を PoC し、導入することによってメリットを得られると感じたためドットマネー側

    と相談し導入を決定。 • 今回はインフラに関する全ての作業を SRG が請け負う 普段はインフラに関する業務はサービス側に PR を出してもらい、SRG がレビューをするフローを取って いますが内容がヘビーなものに関しては SRG が全面協力 💪
  16. 構成図 • 置き換え対象となる EC2 はほぼ同じような構成・ミドルウェ ア CentOS 7 Nginx OpenJDK

    8 td-agent dd-agent
  17. Graviton2 にした結果 コスト編

  18. 開発環境でコストが 1/3 コスト(開発環境) Before After m5.large 26台 0台 t4g.medium 0台

    26台 合計(月) $2,321 $809 オンデマンド単純試算(月) = 差額 $1,512/月 年計算だと $18,144 ※ 2021/09/09 時点での東京リージョンオンデマンド価格計算
  19. 本番環境でコストが 1/2 コスト(本番環境) Before After m4.large 1台 0台 m5.large 12台

    0台 m5.xlarge 10台 0台 m6g.medium 0台 15台 m6g.large 0台 2台 m6g.xlarge 0台 8台 合計(月) $3,487 $1,746 オンデマンド単純試算(月) = 差額 $1,741/月 年計算だと $20,892 ※ 2021/09/09 時点での東京リージョンオンデマンド価格計算
  20. コストまとめ • 開発環境で移行前に比べてコスト 38% 削減 • 本番環境では 50% 削減 •

    移行時にスケールダウンを行っています 1. コストパフォーマンスが優れている 2. もともと過剰スペックだった
  21. Graviton2 に切り替えるまでの 軌跡

  22. Arm に対応したインスタンスを作る • ドットマネーでは Terraform + Ansible を利用 • 鬼門はミドルウェア

    Arm に対応したミドルウェア等があるか、バージョンの差異でコンフィグが変わるかどうか • 今回は CentOS 7(ami-016042a158845bded) を利用 ※あとで出てきます! p27 • インストールされているミドルウェアは下記 NGINX OpenJDK 8 td-agent dd-agent • サポートOSのチェック(要チェック) https://github.com/aws/aws-graviton-getting-started/blob/master/os.md
  23. Arm に対応する NGINX編 • NGINX 公式リポジトリで CentOS 7 から Arm

    版が配布されている http://nginx.org/packages/centos/7/aarch64/ • epel にもあるが 1.12.2 と古い(現在の Stable では 1.20.0)
  24. Arm に対応する OpenJDK編 • OpenJDK 8 も Arm 版が配布されている updates

    リポジトリにある http://mirror.centos.org/altarch/7/updates/aarch64/ • Java を使う場合はここを参照 Graviton で使うためのチューニング方法が書かれてる https://github.com/aws/aws-graviton-getting-started/blob/main/java.md
  25. Arm に対応する td-agent編 • v4 から Arm 版が配布されている 当初 4.0.0

    がリリースされていたがバグがあったので issue を上げたら速攻解決された https://github.com/fluent-plugins-nursery/td-agent-builder/issues/176 • 3.4.x から 4.0.1 への移行が発生したが、コンフィグの変更は無し
  26. Arm に対応する dd-agent編 • datadog-gent 公式リポジトリで提供

  27. Arm に対応する まとめ • Ansible を流しきるまで半営業日しかかからなかった Ansible が綺麗に整備されていたというのも理由 実際に Arm

    に対応した際の diff はこれのみ ↓ • 各ミドルウェアの Arm 対応は進んでいるので興味があれば調べてみてください。 • 動作確認をしているときに見つかった問題は1つだけ
  28. エントロピーの少なさによる問題 • Java が乱数を生成する部分で大幅にパフォーマンスが低下し、レスポンスタイムが悪化した。 エントロピー数が 11 しかなかった。 • 対策として haveged

    を入れることでエントロピーの数が増える • AL2, CentOS8.3.2011 の AMI では 4,000 ぐらいあります 非推奨の AMI を使うとこの問題に当たります
  29. 再掲 • 今回は CentOS 7(ami-016042a158845bded) を利用 ※ • サポートOSのチェック(要チェック) https://github.com/aws/aws-graviton-getting-started/blob/master/os.md

    Operating Systems available for Graviton based instances https://github.com/aws/aws-graviton-getting-started/blob/master/os.md
  30. ノーメンテで Graviton へ • ノーメンテで切り替えるのはとても簡単 1. ターゲットグループに Graviton2 な EC2

    を入れる Graviton2 な EC2 を作成し、ALB にぶら下げる 2. 数日様子を見て問題なければ古い EC2 を抜く Graviton2 ではない他の EC2 とレスポンスタイム等を比較し問題がないことを確認してから Graviton2 ではない EC2 を ALB から外す
  31. Graviton2 にした結果 パフォーマンス編

  32. Webレスポンスタイム ALB p95編 • m5.xlarge($0.248/h) -> m6g.xlarge($0.198/h) • 同スペックでの比較 レスポンスタイムの悪化は見られず

    コスト削減
  33. Admin レスポンスタイム ALB p95編 • m5.large($0.124/h) -> m6g.large($0.099/h) • 同スペックでの比較

    レスポンスタイムの悪化は見られず コスト削減 & レスポンスタイムが速くなった
  34. Admin レスポンスタイム ALB p95編 • m5.large($0.248/h) -> m6g.medium($0.0495/h) • スケールダウンも同時に行ったパターン

    レスポンスタイムは少し悪化 コストと比較したら無問題
  35. Graviton2 の苦手なこと

  36. 暗号処理が遅い ① AES-CBC 以外は厳しい

  37. 暗号処理が遅い ② AES-GCM は遅い | AES-CBC は速い

  38. Graviton2 Arm には AES 命令拡張がある • Graviton2 の Arm で

    AES が速いのは命令拡張が搭載されている • 他にも Arm に有利(ソフトウェア処理)な ChaCha20-Poly1305 が熱いらしい Firefox では Arm 環境のとき、AES-NI がない場合 ChaCha20-Poly1305 を優先させたり、TLS1.3 では AES-GCM / ChaCha20-Poly1305 を使うらしい。 https://www.ipa.go.jp/security/ipg/documents/ipa-cryptrec-gl-3001-3.0.1.pdf https://bugzilla.mozilla.org/show_bug.cgi?id=1126830
  39. Graviton2 な RDS だとどうなるのか • RDS for MySQL 8.0.21 •

    ストレージ暗号化 • nonTLS と TLS で比較 • 10回実行の平均 • TLS接続でも Graviton2 が優位 • m5.large($0.235/h) / m6g.large($0.209/h) • Aurora 2.0.92 でも同様の結果
  40. まとめ

  41. まとめ • Graviton2 導入していいの? 実際に導入してみないと分からない。 台数が多い場合は同じスペックで導入すればリスクは小さい それでもコストは下げれる 新規サービスとかなら最初から Graviton2 に行くのが吉

    • なので今回 Client Facing の部分はスケールダウンせずに、 同じスペックのものに。 一旦様子を見てスケールダウンできそうならするという感じに。 • ドットマネーでは性能劣化はなくコストを下げれた。 • 今回使用した AMI は非推奨のためご利用の際はこちらをご覧ください。 • BlackBelt でも x86 と比較されている。 ベンチマークや注意点など説明されています。下記2つは要チェック。 Amazon EC2 Deep Dive AWS Graviton2 Arm CPU 搭載インスタンス aws/aws-graviton-getting-started
  42. 参考リンク集 • aws/aws-graviton-getting-started https://github.com/aws/aws-graviton-getting-started • Arm CPU対x86 CPU - クラウドでのパフォーマンス分析

    https://www.infoq.com/jp/articles/arm-vs-x86-cloud-performance/ • Amazon EC2 Deep Dive AWS Graviton2 Arm CPU 搭載インスタンス https://d1.awsstatic.com/webinars/jp/pdf/services/20200707_BlackBelt_Graviton2.pdf • 各種グラフのソース https://docs.google.com/spreadsheets/d/1aeLjdjV3hMV0LKsp_SSwINm71WwEbogQuYxw67vcF-Q/edit#g id=0
  43. ありがとうございました Twitter: 4c.vc/t Slide: 4c.vc/1014