gRPC 应用指引
时间:2023-04-25 12:40:37 来源:博客园
gRPC 默认使用protocol buffers。
service HelloService { rpc SayHello (HelloRequest) returns (HelloResponse);}message HelloRequest { string greeting = 1;}message HelloResponse { string reply = 1;}
gRPC 可以定义四种类型服务:
Unary RPCs:一次请求,一次回复。
(资料图片仅供参考)
rpc SayHello(HelloRequest) returns (HelloResponse);
服务端流式请求:客户端发送一次请求,服务端流式返回一系列数据。
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
客户端流式请求:客户端流式写入一系列请求,然后发送到服务端。客户端写完请求后,等待服务端接受并返回结果。
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
双向流式请求:客户端和服务端双向发送数据流,各自独立。可以随读随写,或者一次性读完再写。
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);
2、API 使用首先在 .proto 文件中定义一个服务,然后使用 gRPC 提供的 pb 编译插件来生成客户端和服务端代码。
服务端:实现定义的服务,响应客户端请求。gRPC 框架解码请求,执行服务方法,编码返回结果。客户端:本地 stub 包含实现的服务方法,客户端可以直接调用 stub 的相应方法,以 pb 消息类型包装请求参数发送到服务器,同时返回服务器返回的结果。3、同步和异步同步 RPC 请求(发送请求,阻塞直到服务端返回结果)和我们通常所说的 RPC 定义最为接近。但是,在实际应用中,非阻塞异步请求更适合。
4、RPC 生命周期a)Unary RPC客户端发送一次请求,获取一次返回。
客户端请求本地 stub 方法,服务端获取到通知,并伴随着客户端的请求数据,包括客户端metadata、方法名及deadline。服务端可以直接返回自身的 metadata(必须在业务结果返回前返回)或者等待客户端的请求消息(自定义)。服务端收到客户端请求消息,然后执行相应的方法,组装相应的数据结果,伴随着请求状态信息(状态码及可能状态消息)返回给客户端。如果状态为 OK,则客户端可以获取到结果进行处理,完成整个调用过程。b)服务端流式 RPC服务端返回的是一个数据流。在服务端发送完业务数据后,会继续返回状态信息。
c)客户端流式 RPC客户端发送的是一个请求数据流。
d)双向流式 RPC客户端和服务端双向发送数据流,各自独立。可以随读随写,或者一次性读完再写。
5、Deadlines/TimeoutsgRPC 允许客户端声明超时(请求 DEADLINE_EXCEEDED 异常之前等待的时间)。服务端可以通过此来判定请求是否超时及剩余处理时间。
6、RPC 终止gRPC 中客户端和服务端都可以独立终止请求。比如服务端已经成功响应请求,但是客户端超时终止;服务端在接收完客户端请求数据前限频校验终止请求流程。
7、RPC 请求取消客户端和服务端都可以在任何时候取消 RPC 流程。
8、MetadataRPC 请求元数据,kv 列表形式,key 为 string 类型,value 通常为string,也可以为二进制。
key 大小写敏感,不能以 grpc- 做前缀(保留),二进制 value 的 key 以 -bin 结尾。
gRPC 不会使用用户自定义的元数据。
元数据使用,不同开发语言可能不同。
9、ChannelsgRPC channel 是客户端到服务端的链接。用以创建客户端 stub。
channel 提供相应的参数配置控制 gRPC 请求行为,例如交互数据压缩等。
channel 的状态包括已建立链接及空闲。
二、最佳实践rpc 请求初始化包括:客户端负载均衡,传输层 HTTP/2 请求创建及请求服务端相应的业务接口。
尽量重用 stubs 和 channels。
2、提供心跳机制以确保 HTTP/2 连接即使在系统业务不活跃时段仍能保持活跃,避免因 RPC 请求初始化导致的响应延迟。
3、对于可能存续长时间的数据流请求交互,适宜使用流式处理,避免频繁的 RPC 初始化。但是流式处理也存在无法动态均衡负载的及debug 困难的问题。虽然可以在小规模请求上提升性能,但是会因为负载均衡因素及复杂性降低整体扩展性。(python 除外)
4、每一个 gRPC channel 可以使用 0 个或多个 HTTP/2 链接,每个链接可以承载一定数量的的并发数据流。当链接上活跃的 RPC 请求达到上限,新进的请求会进入调用端等待队列。因此,对于高负载或持久的流式请求会因此产生性能问题。对于此,可以使用如下两种方式处理:
对于此类业务请求使用额外的 chennel。使用 gRPC 连接池来均衡处理请求(需要特定的处理来避免重复使用同一个 channel)5、对于 Java 语言
使用非阻塞 stubs 来并行处理 RPC 请求。
提供自定义连接池,根据实际的业务负载来配置相关参数。
标签:
最新文章推荐
- 陕西7名核酸检测阳性外省游客活动轨迹公布
- 万人说新疆 | 棉花朵朵赛白云,阿克苏美出新高度!
- 万人说新疆 | 孙芳红:我在新疆每天过得很充实也很快乐
- 万人说新疆 | 棉农阿卜来提开心地笑了
- 万人说新疆 | 阿迪力的棉花合作社年入300万
- 四川乐山犍为县发生4.3级地震 无人员伤亡
- 西安全面开展排查管控 目前20481人核酸检测结果均阴性
- 陕西7名核检阳性者为一旅行团同行人员 活动轨迹公布
- 西安交大举行2021级本科生迎新会 校长:学习是主动作为之事
- 【母亲河畔的中国】黄河岸边的这个村庄如何打好旅游服务牌?
资讯中心

2022-06-20

2021-10-18

2021-10-18

2021-10-18
热点资讯
-
1
gRPC 应用指引
-
2
快看点丨2023上海养老金怎么计算,上海养老金一个月大概能领多少
-
3
中消协:2023年消费维权年主题为“提振消费信心”-焦点播报
-
4
天天微资讯!直播带货问题明显,李佳琦及美腕曾因虚假广告多次被罚
-
5
全球新资讯:电脑怎么设置关机时间_电脑设置自动关机时间步骤
-
6
俄罗斯诺尔斯克镍业公司报告第一季度生产结果
-
7
从三个关键词看雄安新区的“科技范儿”_世界今日报
-
8
深圳市房屋装修升级结构安全检测
-
9
培训机构招转培诱导我签下贷款协议然而工作没解决,还要还贷款-天天快讯
-
10
全球热点评!去年苹果iPhone在翻新手机市场占比达49% 同比增长16%
-
11
世界百事通!火星全球影像图来了 听副总师讲解彩色全火图如何拼成
-
12
服装行业分析 未来牛仔裤销售渠道及市场发展分析2023_环球快消息
-
13
上海车展感染者不少,医院也证实新冠检出确有增加,首阳比例高!|视点
-
14
孝昌:推进制度创新 项目落地提速
-
15
高中只设两种班型!成都市教育局发文
-
16
把家政服务嵌入社区
-
17
今日精选:中汽协:1-3月销量排名前十位的SUV生产企业共销售168.4万辆 比亚迪股份(01211)增速最为显著
-
18
点亮航天梦想 多地开展中国航天日活动-天天快看点
-
19
婴儿高铁上哭闹女子和宝妈对骂 网友:对妈妈多一些包容 当前视讯
-
20
【环球快播报】消费呈现恢复向好态势(经济新方位·首季数据观察)