gRPCアプリをNetwork Load Balancerで負荷分散してみた
森永です。
先日発表されたNLB(Network Load Balancer)ですが、TCPのロードバランシングができるということで、gRPCを使って負荷分散が出来ないか試してみました。
CLB版はこちら
構成
NLBの下にgRPCのサーバーを2台用意します。
クライアントからNLBにリクエストを投げてレスポンスが返ってくるか確認します。
試してみる
サーバの設定
サーバー側は、gRPCのNode版サンプルのサーバーアプリケーション("Hello world"というメッセージを返す)を使用します。
UserDataに以下を仕込むだけでセッティング完了です。
2台目は下から2行目の01
部分を02
にしておきます。
#!/bin/bash yum install -y git curl --silent --location https://rpm.nodesource.com/setup_7.x | bash - yum install -y nodejs git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc cd grpc/examples/node/dynamic_codegen npm install sed -i -e "s/call.request.name/call.request.name + \' 01\'/" greeter_server.js node ./greeter_server.js &
50051番の口をVPC内部向けにセキュリティグループであけておく必要があります。
次に、internal NLBを作成します。(externalで試そうかと思いましたがNLBはセキュリティグループ指定が出来ないので一旦断念)
ListenポートをTCP50051番に指定、サーバーをMulti-AZで配置するのでAZまたぎのサブネットを指定します。
ターゲットグループ設定でもTCP50051番に向くように指定します。
両方「healty」になりました!
クライアントの設定
次にクライアントの設定をします。
せっかくgRPCを使うのであればNode以外の言語でやりたいので、今回はGoのクライアントを使用します。
サーバと同じくユーザデータを流し込んだらセットアップは完了です。
一番下の行の「NLBのDNS名」を実際のNLBのDNS名に書き換えて下さい。
#!/bin/bash yum install -y git pip install --upgrade pip python -m pip install grpcio python -m pip install grpcio-tools git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc cd grpc/examples/python/helloworld sed -i -e "s/localhost/「NLBのDNS名」/" greeter_client.py
では、クライアントにSSHしてサーバへリクエストを送ってみましょう!
$ cd /grpc/examples/python/helloworld $ python greeter_client.py Greeter client received: Hello you 02
ちゃんといけてますね。
分散しているかどうかを確かめるために何度もリクエストを送ってみます。
$ for ((i=0;i<10;i++)); do > python greeter_client.py > done Greeter client received: Hello you 02 Greeter client received: Hello you 01 Greeter client received: Hello you 02 Greeter client received: Hello you 01 Greeter client received: Hello you 02 Greeter client received: Hello you 01 Greeter client received: Hello you 02 Greeter client received: Hello you 01 Greeter client received: Hello you 02 Greeter client received: Hello you 01
クライアント側できれいに分散してくれてますね!
最後に
NLBの登場でデザインパターンが大きく変わってきそうですね。
色々検証をしていこうと思います。