Akamai Cloud Computing の NodeBalancer を Akamai GTM で負荷分散する

# はじめに

Akamai Cloud Computing では、インスタンスへのトラフィックの負荷分散のための製品としてNodeBalancerを提供しています。
NodeBalancerは月額10ドルで利用することができる、低コストなTCP/HTTP/HTTPSのロードバランサーです。
今回はそのNodeBalancerの性能を最大限利用するために、Akamai Global Traffic Management (GTM) と組み合わせた構成を紹介します。


https://www.linode.com/ja/products/nodebalancers/

# NodeBalancer + Akamai GTM

NodeBalancerでは[NodeBalancer Limits](https://techdocs.akamai.com/cloud-computing/docs/nodebalancer#limits-and-considerations)の制約があり、1台のNodebalancerでトラフィックを補えないケースがあります。

パフォーマンスに関する項目は下記になります。

- 最大同時接続数：10,000
- Network In：NodeBalancerあたり最大10Gbpsの帯域幅
- 1 秒あたりの接続数 : 制限値はないが、TCP（レイヤー4）負荷分散ではより多くの通信が行え、 HTTP および HTTPS (レイヤー 7) の負荷分散ではレイヤー4ほどの性能は出ない

そのため、大規模なアクセスが想定されるユースケースでは、NodeBalancerを冗長化し、さらに高いパフォーマンスを発揮できる構成を組む必要があります。

NodeBalancerは複数インスタンスに付与することができるため、DNSにて負荷分散をすると制限を超えるパフォーマンスを発揮することができます。

そこで、DNS負荷分散ソリューションであるAkamai GTMを組み合わせることで下記の構成が実現します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/1d5a8524-5cba-ac89-5b33-30c88b69a2df.png)



# 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を利用しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/35b9562e-bb6a-c357-1779-c512a0ffc111.png)


**[参考：Akamai GTM](https://www.akamai.com/site/ja/documents/product-brief/global-traffic-management-product-brief.pdf)**


## 構成に対して負荷試験を実施する

NodeBalancerとAkamai GTMの構成が実際に期待通りに動作するのかを確認しました。
Akamai GTM、NodeBalancerはどちらともTerraformに対応しており、検証に利用したIaCはGithubにまとめてあります。

### NodeBalancerとInstanceを構築する

検証ではLinode 4 GBを12台起動し、2つのNodeBalancerをアタッチするTerraformを作成し、環境構築を行いました。

https://github.com/isss802/gtm-nodebalancer-demo/tree/main/linode

すべてのインスタンスにNginxをインストールし、負荷試験に利用するダミーファイルを作成しています。

```shell
apt update
apt install nginx
dd if=/dev/zero of=/var/www/html/dummy bs=1M count=1
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/7dda9853-329d-7798-7131-2d02d1df2c72.png)


### Akamai GTMを構築する

作成されたNodeBalancerの2つのエンドポイントに対して、Akamai GTMの設定をTerraformで行います。
今回は重み付けを 50:50 と設定しており、均等に負荷が分散するようにしています。

https://github.com/isss802/gtm-nodebalancer-demo/tree/main/gtm

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/72b15953-9f76-e288-66db-119c571e5d5d.png)

作成できた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台起動して負荷試験を実施しています。

https://qiita.com/isss802/items/26dfa5c39e4082d1743a

https://github.com/isss802/gtm-nodebalancer-demo/tree/main/locust

```shell
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万ユーザーの負荷試験を実施しました。


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/e0fc8f72-6c83-7fd7-a9b9-4dfaa1792fb0.png" width=55%>

### 結果確認

NodeBalancerのSummary画面にて負荷状況を確認し、どちらにも均等に負荷がかかっていることを確認しました。
また、あえて高負荷の試験を行い、制限値である最大同時接続数：10,000をきっちり上限として張り付いていることも確認できました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/a371bcc3-850b-0fe6-b605-df7a8678ed6d.png" width=48%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/4ee43ed2-86a5-10e8-b455-eb4d1bbee85c.png" width=48%>

# まとめ

NodeBalancer と Akamai GTM を利用することで、高負荷なユースケースでもスケールアウトできるロードバランシング構成を組むことができます。また、記載されている制限値いっぱいの性能をNodeBalancerが発揮することも確認できました。
Akamaiの製品を組み合わせることで、様々なユースケースに対してもComputingを活用することが可能ですので、ぜひ利用をご検討していただければと思います。

Akamai はCDN、セキュリティ、クラウドサービスを通じ、オンラインライフの力となり守っています。本稿でご紹介したような課題やご相談があれば、お気軽にお問い合わせください
- [Akamai 営業担当者へのお問い合わせ](https://www.akamai.com/ja/why-akamai/contact-us/contact-sales)

# 関連記事

アカマイ・テクノロジーズ合同会社はQiitaでAkamai Cloud Computing Services関連など開発者向けの記事を掲載しております。

https://qiita.com/xenbase/items/52e2956a64cedc772bd9