GRPC负载均衡

负载均衡

负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高应用的性能和可靠性。

GRPC负载均衡

关于GRPC的负载均衡,我们选择NGINX来进行反向代理。NGINX在1.13.9版本已经开始支持GRPC代理。有了对 GRPC 的支持,NGINX 就可以代理 GRPC TCP 连接,还可以终止、检查和跟踪 GRPC 的方法调用。


image.png

GRPC NGINX 配置

在nginx的配置文件中配置GRPC代理即可。

简单代理配置:

server{
    #nginx 监听8888接口
    listen  8888    http2; 
    location / {
        #转发请求至实际服务侧
        grpc_pass grpc://localhost:9999;
    }
}

通过grpc 调用代理端口

DetectClient client = new DetectClient("localhost",8888);

观察NGINX的access.log,可以看到相应的代理记录

223.71.238.51 - - [07/Nov/2019:15:40:55 +0800] "POST /detect.DetectService/decode HTTP/2.0" 200 111 "-" "grpc-java-netty/1.19.0" "-"
223.71.238.51 - - [07/Nov/2019:15:40:55 +0800] "POST /detect.DetectService/decode HTTP/2.0" 200 111 "-" "grpc-java-netty/1.19.0" "-"
223.71.238.51 - - [07/Nov/2019:15:40:55 +0800] "POST /detect.DetectService/decode HTTP/2.0" 200 111 "-" "grpc-java-netty/1.19.0" "-"

代理多个路由配置&负载均衡

server{
    #nginx 监听8888接口
    listen  8888    http2; 
    location / {
        #转发请求至实际服务侧
        grpc_pass grpc://grpcservers;
    }
 
    location /helloworld.decodeService {
        grpc_pass grpc://grpcservers;
    }
 
    location /detect.DetectService {
        grpc_pass grpc://grpcservers;
    }
}
 
upstream grpcservers {
    server localhost:9999;
    server localhost:10000;
    server localhost:10001;
}

负载原理

首先GRPC是建立在HTTP2.0的基础上进行数据传输,HTTP2.0的优势就不用多说了。因此NGINX负载均衡同样也是建立在HTTP2.0的基础之上。并且NGINX新增了GRPC模块。用于负载GRPC请求。
需要注意以下几个NGINX的参数配置:
nginx_http2模块
http2_max_requests:在一个tcp连接上默认通过的最大数据包数,默认1000个
http2_max_concurrent_streams:在一个tcp连接上默认最大并发流,默认128个
nginx_grpc模块
grpc_send_timeout:将请求传输到gRPC服务器的超时时间,如果超过这个时间,NGINX会断开连接。
grpc_read_timeout:接收gRPC服务器数据的超时时间,如果超过这个时间,NGINX会断开连接。
grpc_socket_keepalive:NGINX与gRPC服务器长连接配置设置。

你可能感兴趣的:(GRPC负载均衡)