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

1014-AWS-EC2-Graviton2

 1014-AWS-EC2-Graviton2

Hasegawa Takuya

October 13, 2021
Tweet

More Decks by Hasegawa Takuya

Other Decks in Technology

Transcript

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

    6.Graviton2 に切り替えるまでの軌跡 7.Graviton2 にした結果 パフォーマンス 8.Graviton2 の苦手なこと 9.まとめ
  2. (閑話)自宅サーバー •月2万円の NURO Biz を契約 NURO 光のビジネス向け(固定IP付き) •サーバーは全部で9台 うち2台は Raspberry

    Pi 4 8GB メモリ合計 302GB ストレージ合計 80TB •Proxmox 上に Qemu/KVM と LXC •アプリを動かすときは Nomad on Proxmox 個人サービスの API やバッチ 業務委託の WordPress が動いていたり 合計 80個のコンテナが動いてます🤖
  3. AWS Graviton2 • AWS が開発した 64-bit の Arm Neoverse N1コアを使用してカスタム構成されたプロセッサ

    • AWS Graviton2 が現行の世代 • EC2 以外のサービスでも利用可能 Amazon Aurora, Amazon Elasticsearch Service, Amazon ElastiCache でも利用可能 • 従来の x86_64 よりコストパフォーマンスに優れる
  4. 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倍近い
  5. SRG とドットマネーの関係性 • SRG は横軸組織 SRG(長谷川)が Graviton2 を PoC し、導入することによってメリットを得られると感じたためドットマネー側

    と相談し導入を決定。 • 今回はインフラに関する全ての作業を SRG が請け負う 普段はインフラに関する業務はサービス側に PR を出してもらい、SRG がレビューをするフローを取って いますが内容がヘビーなものに関しては SRG が全面協力 💪
  6. 開発環境でコストが 1/3 コスト(開発環境) Before After m5.large 26台 0台 t4g.medium 0台

    26台 合計(月) $2,321 $809 オンデマンド単純試算(月) = 差額 $1,512/月 年計算だと $18,144 ※ 2021/09/09 時点での東京リージョンオンデマンド価格計算
  7. 本番環境でコストが 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 時点での東京リージョンオンデマンド価格計算
  8. コストまとめ • 開発環境で移行前に比べてコスト 38% 削減 • 本番環境では 50% 削減 •

    移行時にスケールダウンを行っています 1. コストパフォーマンスが優れている 2. もともと過剰スペックだった
  9. 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
  10. Arm に対応する NGINX編 • NGINX 公式リポジトリで CentOS 7 から Arm

    版が配布されている http://nginx.org/packages/centos/7/aarch64/ • epel にもあるが 1.12.2 と古い(現在の Stable では 1.20.0)
  11. 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
  12. 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 への移行が発生したが、コンフィグの変更は無し
  13. Arm に対応する まとめ • Ansible を流しきるまで半営業日しかかからなかった Ansible が綺麗に整備されていたというのも理由 実際に Arm

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

    を入れることでエントロピーの数が増える • AL2, CentOS8.3.2011 の AMI では 4,000 ぐらいあります 非推奨の AMI を使うとこの問題に当たります
  15. ノーメンテで Graviton へ • ノーメンテで切り替えるのはとても簡単 1. ターゲットグループに Graviton2 な EC2

    を入れる Graviton2 な EC2 を作成し、ALB にぶら下げる 2. 数日様子を見て問題なければ古い EC2 を抜く Graviton2 ではない他の EC2 とレスポンスタイム等を比較し問題がないことを確認してから Graviton2 ではない EC2 を ALB から外す
  16. Admin レスポンスタイム ALB p95編 • m5.large($0.124/h) -> m6g.large($0.099/h) • 同スペックでの比較

    レスポンスタイムの悪化は見られず コスト削減 & レスポンスタイムが速くなった
  17. 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
  18. 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 でも同様の結果
  19. まとめ • Graviton2 導入していいの? 実際に導入してみないと分からない。 台数が多い場合は同じスペックで導入すればリスクは小さい それでもコストは下げれる 新規サービスとかなら最初から Graviton2 に行くのが吉

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