此篇介绍一下微服务架构中经常遇到的一些维护方面的问题。

微服务带来的新问题

微服务架构虽然解决了一些单体应用的旧问题,但也引入了新的问题:

  1. 微服务架构将整个应用分散成多个服务,定位故障点变得困难;
  2. 服务数量变多,导致稳定性下降,并且其中一个服务故障可能导致整个系统挂掉;
  3. 服务数量变多,部署和管理的工作量变大;
  4. 开发方面:如何保证各个服务在持续开发的情况下仍然保持协同合作;
  5. 测试方面:服务拆分后,几乎所有功能都会涉及多个服务,测试变得更加复杂。

微服务的维护手段

监控:发现故障

全链路跟踪:定位故障

要实现链路跟踪,每次服务调用会在HTTP的HEADERS中记录至少记录四项数据:

  1. traceId:traceId标识一个用户请求的调用链路,具有相同traceId的调用属于同一条链路。
  2. spanId:标识一次服务调用的ID,即链路跟踪的节点ID。
  3. parentId:父节点的spanId。
  4. requestTime & responseTime:请求时间和响应时间。

关于链路跟踪的理论依据可详见Google的 Dapper。

日志:分析问题

网关:权限控制,服务治理

服务注册发现:动态扩容

熔断、服务降级、限流

测试粒度

微服务框架

Service Mesh

Serverless、FaaS