这是我参与「第五届青训营 」伴学笔记创作活动的第 18 天
今天和大家分享一下 RPC 框架的在实际开发中需要注意的一些关键指标。
RPC 开发关键指标
在进行实际的微服务开发时,我们需要一些指标来权衡该框架以及该框架下的业务是否是可用的,优秀的。一般来说,我们需要关注一个微服务的安全性,稳定性,可扩展性,兼容性,和高性能等。
结合日常开发时我们使用到的一些框架基本上都是带有这些功能的,所以这里更加关注的是实际开发中,对于开发者来说更应该注意的内容。即在开发中,我们应该去利用框架带来的功能去实现什么必要的微服务特征来保证我们的微服务是更好的。
稳定性
降级措施:
- 熔断:当某一个服务出现问题的时候,其他服务访问该服务时快速返回结果。避免等待,出错等防止服务雪崩;
- 限流:防止大流量将服务压垮;
- 超时控制:避免浪费资源在不可用节点上。
提高请求成功率:
- 负载均衡:利用负载均衡分配服务调用;
- 重试:调用不成功时,我们不直接返回错误,而是进行重试。例如我们设置次数为3,那么当我们第一次请求失败后,进行两次重试,都不成功再返回失败或错误;
- 长尾请求:一个服务的同一个请求有时候由于某些原因(例如网络抖动)相较于其他请求会时间很长,那么这种请求就是长尾请求(例如超过了99%的请求的时间)。为了防止这种请求带来的请求成功率降低,我们可以再请求时设定一个长尾请求超时时间(一般根据以前请求的记录来判断该时间设置为多少)来进行重试。当某个请求并没有出错,但是超过了该超时时间,那么我们发起重试去再次请求。
这些措施我们可以通过注册中间件的形式来融入进来。
观测性
- Log:日志服务,用来记录服务运行情况;
- Metric:监控,通过面板来检测 QPS,延迟等;
- Tracing:链路追踪,对一个请求中的一系列服务调用进行追踪并观察其性能等;
- 框架内置的观测服务(如查看 cpu,memory)。
高性能
目标:高吞吐,低延时(最重要)
手段:连接池,多路复用,高性能编解码协议,高性能网络库。