負(fù)載均衡
負(fù)載均衡是高可用網(wǎng)絡(luò)基礎(chǔ)架構(gòu)的關(guān)鍵組件,通常用于將工作負(fù)載分布到多個(gè)服務(wù)器來提高應(yīng)用的性能和可靠性逞敷。
GRPC負(fù)載均衡
關(guān)于GRPC的負(fù)載均衡,我們選擇NGINX來進(jìn)行反向代理灌侣。NGINX在1.13.9版本已經(jīng)開始支持GRPC代理推捐。有了對 GRPC 的支持,NGINX 就可以代理 GRPC TCP 連接侧啼,還可以終止玖姑、檢查和跟蹤 GRPC 的方法調(diào)用。
GRPC NGINX 配置
在nginx的配置文件中配置GRPC代理即可慨菱。
簡單代理配置:
server{
#nginx 監(jiān)聽8888接口
listen 8888 http2;
location / {
#轉(zhuǎn)發(fā)請求至實(shí)際服務(wù)側(cè)
grpc_pass grpc://localhost:9999;
}
}
通過grpc 調(diào)用代理端口
DetectClient client = new DetectClient("localhost",8888);
觀察NGINX的access.log,可以看到相應(yīng)的代理記錄
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" "-"
代理多個(gè)路由配置&負(fù)載均衡
server{
#nginx 監(jiān)聽8888接口
listen 8888 http2;
location / {
#轉(zhuǎn)發(fā)請求至實(shí)際服務(wù)側(cè)
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;
}
負(fù)載原理
首先GRPC是建立在HTTP2.0的基礎(chǔ)上進(jìn)行數(shù)據(jù)傳輸戴甩,HTTP2.0的優(yōu)勢就不用多說了符喝。因此NGINX負(fù)載均衡同樣也是建立在HTTP2.0的基礎(chǔ)之上。并且NGINX新增了GRPC模塊甜孤。用于負(fù)載GRPC請求协饲。
需要注意以下幾個(gè)NGINX的參數(shù)配置:
nginx_http2模塊
http2_max_requests:在一個(gè)tcp連接上默認(rèn)通過的最大數(shù)據(jù)包數(shù)畏腕,默認(rèn)1000個(gè)
http2_max_concurrent_streams:在一個(gè)tcp連接上默認(rèn)最大并發(fā)流,默認(rèn)128個(gè)
nginx_grpc模塊
grpc_send_timeout:將請求傳輸?shù)絞RPC服務(wù)器的超時(shí)時(shí)間茉稠,如果超過這個(gè)時(shí)間描馅,NGINX會斷開連接。
grpc_read_timeout:接收gRPC服務(wù)器數(shù)據(jù)的超時(shí)時(shí)間而线,如果超過這個(gè)時(shí)間铭污,NGINX會斷開連接。
grpc_socket_keepalive:NGINX與gRPC服務(wù)器長連接配置設(shè)置膀篮。