为了做到微服务的高可用,鬼知道我出了多少张牌( 五 )


熔断跟高可用的关系是什么?上面说了微服务是一个错综复杂的调用链关系,假设模块 A 调用模块 B,模块 B 又调用了模块 C,模块 C 调用了模块 D 。
这个时候,模块 D 出了问题出现严重的时延,这个时候,整个调用链就会被模块 D 给拖垮 。
A 等 B,B 等 C,C 等 D,而且 A B C D 的资源被锁死得不到释放,如果流量大的话还容易引起雪崩 。
熔断,主动丢弃模块 D 的调用,并在功能上作出一些降级才能保证到我们系统的健壮性 。熔断是对模块的隔离,是保证了最大功能的可用性 。
服务治理

为了做到微服务的高可用,鬼知道我出了多少张牌

文章插图
 
①服务模块划分
服务模块与服务模块之间有着千丝万缕的关系,但服务模块在业务中各有权重 。
例如订单模块可能是一家电商公司的重中之重,如果出问题将会直接影响整个公司的营收 。
而一个后台的查询服务模块可能也重要,但它的重要等级绝对是没有像订单这么重要 。
所以,在做服务治理时,必须明确各个服务模块的重要等级,这样才能更好的做好监控,分配好资源 。
这个在各个公司有各个公司的一个标准,例如在电商公司,确定服务的级别可能会更加倾向对用户请求数和营收相关的作为指标 。
为了做到微服务的高可用,鬼知道我出了多少张牌

文章插图
 
可能真正的划分要比这个更为复杂,必须根据具体业务去定,这个可以从平时服务模块的访问量和流量去预估 。
往往更重要的模块也会提供更多的资源,所以不仅要对技术架构了如指掌,还要对公司各种业务形态了然于心才可以 。
服务分级不仅仅在故障界定起到重要主要,而且决定了服务监控的力度,服务监控在高可用中起到了一个保障的作用 。
它不仅可以保留服务崩溃的现场以等待日后复盘,更重要的是它可以起到一个先知,先行判断的角色,很多时候可以预先判断危险,防范于未然 。
②服务监控
服务监控是微服务治理的一个重要环节,监控系统的完善程度直接影响到我们微服务质量的好坏 。
我们的微服务在线上运行的时候有没有一套完善的监控体系能去了解到它的健康情况,对整个系统的可靠性和稳定性是非常重要,可靠性和稳定性是高可用的一个前提保证 。
服务的监控更多是对于风险的预判,在出现不可用之间就提前的发现问题,如果系统获取监控报警系统能自我修复则可以将错误消灭在无形,如果系统发现报警无法自我修复则可以通知人员提早进行接入 。
一个比较完善的微服务监控体系需要涉及到哪些层次?如下图,大致可以划分为五个层次的监控:
为了做到微服务的高可用,鬼知道我出了多少张牌

文章插图
 
基础设施监控:例如网络,交换机,路由器等低层设备,这些设备的可靠性稳定性就直接影响到上层服务应用的稳定性 。
所以需要对网络的流量,丢包情况,错包情况,连接数等等这些基础设施的核心指标进行监控 。
系统层监控:涵盖了物理机,虚拟机,操作系统这些都是属于系统级别监控的方面,对几个核心指标监控,如 CPU 使用率,内存占用率,磁盘 IO 和网络带宽情况 。
应用层监控:例如对 URL 访问的性能,访问的调用数,访问的延迟,还有对服务提供性能进行监控,服务的错误率 。
对 SQL 也需要进行监控,查看是否有慢 SQL,对于 Cache 来说,需要监控缓存的命中率和性能,每个服务的响应时间和 QPS 等等 。
业务监控:比方说一个电商网站,需要关注它的用户登录情况,注册情况,下单情况,支付情况 。
这些直接影响到实际触发的业务交易情况,这个监控可以提供给运营和公司高管他们需要关注的数据,直接可能对公司战略产生影响 。
端用户监控:用户通过浏览器,客户端打开连到到我们的服务,那么在用户端用户的体验是怎么样,用户端的性能是怎么样,有没有产生错误,这些信息也是需要进行监控并记录下来 。
如果没有监控,有可能用户因为某些原因出错或者性能问题造成体验非常的差,而我们并没有感知 。
这里面包括了,监控用户端的使用性能,返回码,在哪些城市地区他们的使用情况是怎么样,还有运营商的情况,包括电信,联通用户的连接情况 。
我们需要进一步去知道是否有哪些渠道哪些用户接入的时候存在着问题,包括我们还需要知道客户端使用的操作系统浏览器的版本 。


推荐阅读