2018年4月15日日曜日

Nginx で gRPC のロードバランスを試してみる

Nginx に追加された「gRPC サポート機能」を使って gRPC のロードバランスを試してみました。※ windows 版です。




Nginx の入手


gRPC サポート機能は 1.13.10 で追加されたようですので、1.13.10 以降のモジュールを入手します。

Introducing gRPC Support with NGINX 1.13.10
https://www.nginx.com/blog/nginx-1-13-10-grpc/

ダウンロードサイト
http://nginx.org/en/download.html


Nginx のインストール


入手した圧縮ファイルを任意のディレクトリに展開します。インストーラーはありません。設定ファイルの記述を変更し、実行ファイルを起動するだけです。

Nginx を起動するには、nginx.exe の格納ディレクトリでコマンドプロンプトを起動し、次のコマンドを実行します。

start nginx

Nginx を終了するには、nginx.exe の格納ディレクトリでコマンドプロンプトを起動し、次のコマンドを実行します。起動したときのコマンドプロンプトを閉じるだけでは終了しません。終了コマンドを実行する必要があります。

nginx -s quit

Nginx が起動しているかどうかを確認するには、インターネットブラウザで http://localhost:80/ を表示します。「Welcome to nginx!」ページが表示されれば成功です。
既定のポート番号は 80 です。ポート番号を変更するには、設定ファイル内の記述を書き換えます。次項を参照してください。

 

gRPC のロードバランス設定


展開先の conf ディレクトリ内にある nginx.conf に設定を追加します。

http {
 server {

  server_name  localhost;

         # 既定のポート
  # Welcomeページのポート番号を変更するにはこの番号を変更
  listen 80;

  location / {
   root   html;
   index  index.html index.htm;
  }

  # gRPC用のポート
  # クライアントアプリケーションからはこのポートに対してリクエスト
  listen 50001 http2;

  # gRPCのサービス
  # スラッシュの後にサービス名を記述
  location /SampleGrpcService {
   # ロードバランスさせるサーバーグループ名を指定
   grpc_pass grpc://grpcServers;
   # 502エラーが発生したときのレスポンスを指定?(未検証)
   error_page 502 = /grpcError502;
  }

  location = /grpcError502 {
   internal;
   default_type application/grpc;
   add_header grpc-status 14;
   add_header grpc-message "unavailable";
   return 204;
  }

 }

 # ロードバランスさせるサーバーグループ
 upstream grpcservers {
  server localhost:50051;
  server localhost:50052;
 }

}


gRPC アプリケーションの実行


・サーバーアプリケーションを二つ起動します。一つはポート 50051、もう一つはポート 50052 を使用します。

・クライアントアプリケーションから、ポート 50001 に対してリクエストを送信します。

既定ではラウンドロビンで振り分けが行われます。交互(数リクエストごと)に 50051, 50052 に対してリクエストが送信されました。

Nginx のアクセスログには次のように記録されました。

127.0.0.1 - - [15/Apr/2018:17:25:40 +0900] "POST /SampleGrpcService/GetData HTTP/2.0" 200 4213 "-" "grpc-csharp/1.10.1 grpc-c/6.0.0 (windows; chttp2; glamorous)"


サーバーがダウンしていたら?


片方(50052)のサーバーアプリケーションを終了させた状態で実行したところ、50052 に対するリクエストでタイムアウトが発生した後に 50051 に対して同じリクエストが送信されました。このあたりの挙動は動作設定で変えられると思いますが、未確認です。



0 件のコメント:

コメントを投稿

paiza のスキルチェックをやってみました

いまさら感はありますが、 paiza のスキルチェックをやってみました。指定された時間内にコードを書いてユニットテストにかけ、その結果を基に評価を数値化してくれるというものですが、ゲーム感覚で空き時間を見つけて進めていこうと考えています。 どうやら時間が短いほど高い評価を得...