1 rpc框架原理
rpc調(diào)用原理框架如圖:
2 業(yè)內(nèi)比較成熟的rpc框架
支持多語言的主要分為3類
-支持多語言的rpc框架脚曾,例如Google的grpc,facebook thrift判导, 百度的brpc
-支持特定語言的rpc框架, 例如新浪微博的Motan
-支持服務(wù)治理微服務(wù)化特性框架,其底層仍是rpc框架隔盛,例如 阿里的Dubbo
目前業(yè)內(nèi)主要使用基于多語言的 RPC 框架來構(gòu)建微服務(wù),是一種比較好的技術(shù)選擇拾稳,例如netflix 吮炕,API服務(wù)編排層和后端微服務(wù)之間采用微服務(wù)rpc進(jìn)行通信
3 GRPC框架介紹
-支持C java js
-git地址 https://github.com/grpc/grpc-java
-原理圖:
4 GRPC服務(wù)端創(chuàng)建流程
- NettyServer的創(chuàng)建,gRpc服務(wù)端的創(chuàng)建访得,初始化nettyServer龙亲,nettyServer負(fù)責(zé)監(jiān)聽socket地址陕凹,實(shí)習(xí)基于HTTP2協(xié)議的寫入
- 綁定IDL定義服務(wù)接口實(shí)現(xiàn)類,grpc和一些RPC框架的不同是鳄炉,服務(wù)的接口實(shí)現(xiàn)類并不是同過反射實(shí)現(xiàn)的杜耙,而是通過proto工具生成的代碼,服務(wù)啟動(dòng)后拂盯,將服務(wù)的接口實(shí)現(xiàn)類注冊到gRpc內(nèi)部的服務(wù)注冊中心上佑女,請求消息來后,便可以通過服務(wù)名和方法名調(diào)用 谈竿,直接調(diào)用啟動(dòng)的時(shí)候注冊的服務(wù)實(shí)例团驱,bu不需要反射進(jìn)行調(diào)用,性能更優(yōu)
-
ServerImpl 負(fù)責(zé)整個(gè) gRPC 服務(wù)端消息的調(diào)度和處理榕订,創(chuàng)建 ServerImpl 實(shí)例過程中店茶,會(huì)對服務(wù)端依賴的對象進(jìn)行初始化,例如 Netty 的線程池資源,gRPC 的線程池劫恒、內(nèi)部的服務(wù)注冊類(InternalHandlerRegistry)
4.1 gRpc消息接入流程
-
gRPC消息由netty /http/2 協(xié)議負(fù)責(zé)接入贩幻,通過grpc 注冊的Http2Framelister將解碼后的Http header和Http body 發(fā)送到gRPC的NettyServerHandler ,實(shí)現(xiàn)netty http/2的消息接入
gRPC 請求消息接入流程如下:
4.2 gRPC消息響應(yīng)模型
4.3 Netty Server 線程模型
gRPC 的線程模型遵循 Netty 的線程分工原則两嘴,即:協(xié)議層消息的接收和編解碼由 Netty 的 I/O(NioEventLoop) 線程負(fù)責(zé)丛楚;后續(xù)應(yīng)用層的處理由應(yīng)用線程負(fù)責(zé),防止由于應(yīng)用處理耗時(shí)而阻塞 Netty 的 I/O 線程
不過正是因?yàn)橛辛朔止ぴ瓌t憔辫,grpc 之間會(huì)做頻繁的線程切換趣些,如果在一次grpc調(diào)用過程中,做了多次I/O線程到應(yīng)用線程之間的切換贰您,會(huì)導(dǎo)致性能的下降坏平,這也是為什么grpc在一些私有協(xié)議支持不太友好的原因
gRpc 的線程模型
1. BIO線程模型 ,例如tomcat的BIO線程模型
缺點(diǎn)
改進(jìn):
優(yōu)化后BIO線程模型采用了線程池的做法但是后端的應(yīng)用處理線程仍然采用同步阻塞的模型锦亦,阻塞的時(shí)間取決對方I/O處理的速度和網(wǎng)絡(luò)I/O傳輸?shù)乃俣?/p>
2 異步非阻塞的線程模型
grpc的線程模型主要包含服務(wù)端線程模型舶替,客戶端線程模型
服務(wù)端線程模型主要包括
- 服務(wù)端的寫入,客戶端的接入線程(HTTP/2 Acceptor)
- 網(wǎng)絡(luò)I/O的讀寫線程
- 服務(wù)接口調(diào)用線程
客戶端線程模型主要包含
- 客戶端的鏈接 (HTTP/2 Connector)
- 網(wǎng)絡(luò)I/O讀寫線程
- 接口調(diào)用線程
- 響應(yīng)回調(diào)通知線程
2.1服務(wù)調(diào)度線程模型
2.1.1 I/O 通信線程模型
gRPC的做法是服務(wù)監(jiān)聽線程和I/O線程分離Reactor多個(gè)線程模型 其工作原理如下:
2.1.2 服務(wù)調(diào)度線程模型
2.2客戶端線程模型概述
gRPC 客戶端線程模型工作原理如下圖所示(同步阻塞調(diào)用為例)
2.2.1 I/O 通信線程模型
相比于服務(wù)端杠园,客戶端的線程模型簡單一些顾瞪,它的工作原理如下:
2.2.2 客戶端調(diào)用線程模型
grpc 線程模型