はじめに
Akamai Cloud Computing では、インスタンスへのトラフィックの負荷分散のための製品としてNodeBalancerを提供しています。
NodeBalancerは月額10ドルで利用することができる、低コストなTCP/HTTP/HTTPSのロードバランサーです。
今回はそのNodeBalancerの性能を最大限利用するために、Akamai Global Traffic Management (GTM) と組み合わせた構成を紹介します。
NodeBalancer + Akamai GTM
NodeBalancerではNodeBalancer Limitsの制約があり、1台のNodebalancerでトラフィックを補えないケースがあります。
パフォーマンスに関する項目は下記になります。
- 最大同時接続数:10,000
- Network In:NodeBalancerあたり最大10Gbpsの帯域幅
- 1 秒あたりの接続数 : 制限値はないが、TCP(レイヤー4)負荷分散ではより多くの通信が行え、 HTTP および HTTPS (レイヤー 7) の負荷分散ではレイヤー4ほどの性能は出ない
そのため、大規模なアクセスが想定されるユースケースでは、NodeBalancerを冗長化し、さらに高いパフォーマンスを発揮できる構成を組む必要があります。
NodeBalancerは複数インスタンスに付与することができるため、DNSにて負荷分散をすると制限を超えるパフォーマンスを発揮することができます。
そこで、DNS負荷分散ソリューションであるAkamai GTMを組み合わせることで下記の構成が実現します。
Akamai Global Traffic Management (GTM) とは
Global Traffic Management とはAkamaiが提供する DNS ベースでロードバランシングを提供するソリューションです。
以下の様々な振り分け機能を提供しています。
- Mirror Failover (サイトダウン時にバックアップへ)
- Map by geographic location etc. (地理的振り分け)
- Weighted Random Load Balancing etc. (比率指定で負荷分散)
- Performance-Based Load Balancing (応答時間が短くなるように負荷分散)
NodeBalancerにて利用する負荷分散では、Weighted Random Load Balancingを利用しました。
構成に対して負荷試験を実施する
NodeBalancerとAkamai GTMの構成が実際に期待通りに動作するのかを確認しました。
Akamai GTM、NodeBalancerはどちらともTerraformに対応しており、検証に利用したIaCはGithubにまとめてあります。
NodeBalancerとInstanceを構築する
検証ではLinode 4 GBを12台起動し、2つのNodeBalancerをアタッチするTerraformを作成し、環境構築を行いました。
すべてのインスタンスにNginxをインストールし、負荷試験に利用するダミーファイルを作成しています。
apt update
apt install nginx
dd if=/dev/zero of=/var/www/html/dummy bs=1M count=1
Akamai GTMを構築する
作成されたNodeBalancerの2つのエンドポイントに対して、Akamai GTMの設定をTerraformで行います。
今回は重み付けを 50:50 と設定しており、均等に負荷が分散するようにしています。
作成できたAkamai GTMのDNSエンドポイントに対して複数回Digにて名前解決を行い、異なるNodeBalancerのIPアドレスを返答することを確認します。
➜ dig gtm.xxxxxx.akadns.net +short
172.233.22.2
➜ dig gtm.xxxxx.akadns.net +short
172.233.11.1
Linode Kubenetes Engine (LKE)でLocustから負荷試験を行う
Akamai Cloud Computing では KubernetesサービスであるLKEを利用することができるため、負荷試験のような並列でスケールが必要な負荷試験のユースケースで活用することができます。
また、ネットワーク転送量は0.005ドル/GBとコストが安く、他クラウドへの負荷試験も低コストで実施することができます。
今回の検証では、Linode 64 GBを20台起動して負荷試験を実施しています。
kubectl create configmap my-loadtest-locustfile --from-file ./locustfile.py
helm install locust deliveryhero/locust \
--set loadtest.locust_locustfile=locustfile.py \
--set loadtest.locust_locustfile_configmap=my-loadtest-locustfile
kubectl scale deployment locust-worker --replicas=20
kubectl --namespace default port-forward service/locust 8089:8089
Locustの管理コンソールにアクセスし、1万ユーザーの負荷試験を実施しました。
結果確認
NodeBalancerのSummary画面にて負荷状況を確認し、どちらにも均等に負荷がかかっていることを確認しました。
また、あえて高負荷の試験を行い、制限値である最大同時接続数:10,000をきっちり上限として張り付いていることも確認できました。
まとめ
NodeBalancer と Akamai GTM を利用することで、高負荷なユースケースでもスケールアウトできるロードバランシング構成を組むことができます。また、記載されている制限値いっぱいの性能をNodeBalancerが発揮することも確認できました。
Akamaiの製品を組み合わせることで、様々なユースケースに対してもComputingを活用することが可能ですので、ぜひ利用をご検討していただければと思います。
Akamai はCDN、セキュリティ、クラウドサービスを通じ、オンラインライフの力となり守っています。本稿でご紹介したような課題やご相談があれば、お気軽にお問い合わせください
関連記事
アカマイ・テクノロジーズ合同会社はQiitaでAkamai Cloud Computing Services関連など開発者向けの記事を掲載しております。