体系化认识微服务之五:服务治理

服务治理是指微服务的辅助监控手段,一般完整的服务治理包括日志、告警、调用链、服务降级和熔断、权限控制、通讯协议、序列化、异常处理、文档、配置中心、服务注册发现、负载均衡、服务集成(Cache、MQ、DB)。

先说说我们接触最多的:日志、告警、配置中心、调用链

日志:线上问题定位最直接快速的手段,如果日志监控不到位或者不完整很可能出了问题都不知道,日志监控的首要目标是即时、内容完整。日志监控主流手段是ELK(elasticsearch+logstash+kafka)

告警:通常业务系统会有很多指标,对于这些指标我们关心的某个时间点的值是多少,并且我们希望可以自定义时间段进行一些聚合查询。这些一系列时间点的数据组成了一个时间序列,并且是可以串联起来的。通常的做法是使用时序数据库,比如influxDB、opentsdb,使用grafana做一些分析展示

配置中心:项目的配置一般写在配置文件中,格式和规范不统一,如果是上线后需要紧急修改配置,响应时间会很慢,开发周期长。使用配置中心可以在生产环境动态修改配置,迅速上线。放在配置中心的可能包括项目的配置文件,比如数据库连接、缓存地址、MQ地址、dubbo配置等,还包括项目的开关配置,开关通常会在业务系统使用到,比如可以用来控制灰度发布等。

常用的开源实现包括百度的Disconf,携程的Apollo,Spring cloud的Spring cloud config

调用链:微服务体系中涉及的服务错综复杂,对一个聚合接口往往会调用若干服务,如果这个服务响应很慢则很难定位到哪里出现了问题,通过调用链监控可以迅速定位到服务的瓶颈在哪个地方,从而迅速定位问题,并作出响应措施

以上四个点如果监控到位,基本可以做到在用户无感知或者提前修复问题

再说说其他几点:

通讯协议、序列化、服务注册发现、负载均衡这几点在开发框架中已经实现了,比如Dubbo,默认是TCP + hession2 + zk + 轮询

文档:我们对外提供的API,一般需要清晰明确的声明,告诉别人这个接口的使用场景和功能,RPC 使用Javadoc ,REST使用swagger

服务降级和熔断:服务降级是指服务在某种条件下,比如可能是抛异常了或者流量快要打满了,触发的兜底机智,比如一个接口正常条件下会获取各种数据计算一个指标,然后返回,在触发服务降级后可能会直接返回一个业务上允许的默认值或者兜底值;熔断类似,只不过它更干脆,在触发某种条件中直接就不提供服务了,任何请求都进不来,达到保护自我的目的

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180630G18AO200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券