全链路压测如何排障调优 — 案例篇: 腾讯微服务平台TSF最佳实践
【微服务是什么】
微服务是一种架构模式,提倡将一个大型复杂的单体架构拆分成一个个微服务。服务内部是高内聚,服务之间是低耦合。
随着云原生的发展,kubernetes已经成为云上的操作系统,也为应用微服务化提供很好的底座。
【微服务框架】
做过开发的同学都知道,常用的后台模块有服务治理,网关,负载均衡,熔断等。而微服务框架就是把这些模块集成在一起,打包成一个全家桶。
常用的微服务框架有Spring Cloud,Service Mesh等,下面以Spring Cloud为例,来说明一个常用的流程:
- 请求统一通过API网关(Zuul)来访问内部服务
- 网关接收到请求后,从注册中心(Eureka)获取可用服务
- 由Ribbon进行负载均衡后,分发到后端具体实例
- 微服务之间通过Feign进行通信处理业务
- Hystrix负载处理服务超时熔断
- Turbine监控服务间的调用和熔断
而腾讯微服务平台(Tencent Service Framework,TSF)是以腾讯云容器服务(Tencent Kubernetes Engine ,TKE)为底座,全面支持Spring Cloud,Service Mesh等主流框架,可以通过yaml文件方便接入,还能提供一个非常优秀的拓扑图,可以直观的看到流量的洪峰。
【微服务特点】
【压测问题汇总】
下面是实际项目进行上量压测的过程中遇到的问题,有非常强的实战经验。
【优秀案例实践】
下面以一个具体的案例,来讲讲腾讯微服务平台TSF是如何排查问题的。
【问题表现】
KA项目在生产环境进行全链路压测的过程中,发现某个接口的错误率很高。
时间段:20:34-20:39
错误率:7.17%,错误代码504(腾讯标准:错误率<=1%)
【排障思路】
整体排查思路请参考全链路压测如何排障调优 — 先导篇,主要从如下两个方面展开。
【查看机器负载】
1.首先要全链路查看机器负载,这里有必要推荐云监控,可以配置dashboard,以更好的视图查看机器负载。经排查,微服务所在所在的某个节点(10.0.112.25)CPU使用率高达100%,从凌晨01:22:00开始内存有断层,也没有收到相关告警。
2.想登陆到机器10.0.112.25上去看相关进程信息,看看是哪个进程占用CPU最高。无法登陆,登陆界面报filebeat相关的OOM。
3.既然无法登陆,只能通过kubernetes describe的命令查看Pod的状态。发现好多pod处于驱逐状态(Evicted),其原因是DiskPressure,表示可用磁盘空间很少。
4.根据上面的错误信息,我们发现系统盘太小,压测带来的压力一上来,日志量太多,就把节点打爆了。这个一方面需要有策略控制日志的量,比如只保留最近3天的日志;另一方面也是对系统盘进行扩容,挂载新的数据盘。
除了从机器负载去定位问题外,我们也从日志入手排查问题,也有一些收获。
【查看错误日志】
1.首先从TSF里面查看日志。微服务网关连接后面的服务(172.30.11.29:8891)超时,但看不到更多的信息。
2.为了能查看更多的日志信息,需要打开tomcat日志开关。重新编包部署后,有些容器一直重启失败。
3.排查集群的状态,发现有些Pod一直处于Terminating状态,报错DeadlineExceeded
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedSync 3m (x451 over 2h) kubelet, 10.0.112.38 error determining status: rpc error: code = DeadlineExceeded desc = context deadline exceeded
4.集群报错DeadlineExceeded,一开始怀疑是docker 17版本的问题,因为之前TKE遇到类似的问题(更多TKE的问题请参考:K8S问题排查)。但查看当前运行版本,已经是docker 18版本。
5.没有办法,找了一台可以登录的节点机器,发现docker在内核被hang住。
6.最后找来TKE的研发参与排查,他们建议优化容器的OS。TKE Optimized CenOS7.6是基于tlinux定制的内核,有内部团队维护保障,也是TKE主推的OS。
除了升级OS,我们也把TSF agent的CPU和内存调大,保证了了日志正常上报,最终解决了问题。
一开始的默认配置比较小。
【后记】
docker在内核被hang住的问题,其实是应该深入分析。但因为没有当时的kdump文件,后面没有继续。
最后,底层原理是必备技能,调参是门艺术。上面说的内容可能都是错的,看看排查思路就好。
更多的案例,请订阅【云原生压测团队】后,慢慢欣赏。