微服务学习之路(六)——微服务治理

微服务治理背景,服务消费者A需要通过注册中心查询服务提供者B的地址,然后发起调用,可能会发送如下情况:

  注册中心宕机

  服务提供者B由节点宕机

  服务消费者A和注册中心之间的网络不通

  服务提供者B和注册中心之间的网络不通

  服务消费者A和服务提供者B之间的网络不通

  服务提供者B有些节点性能变慢

  服务提供者B短时间内出现问题

对此,我们需要相应的服务治理手段。

  

  节点管理

  服务调用失败,一般由两类原因引起,一类时服务提供者自身出现问题,如服务器宕机、进程意外退出等;一类时网络问题,如服务提供者、注册中心、服务消费者这三者任意两者之间的网络出现问题。主要有如下两种节点管理手段:

  1、注册中心主动摘除机制

  要求服务提供者定时向注册中心汇报心跳,注册中心根据服务提供者节点最近一次汇报心跳的时间与上一次汇报心跳时间作比较,如果超出一定时间,就认为服务提供者出现问题,继而把节点从服务列表中摘除,并把最近的可用服务列表推送给服务消费者。

  2、服务消费者摘除机制

  虽然注册中心主动摘除机制可以解决服务提供者节点异常的问题,但如果是因为注册中心与服务提供者之间的网络出现异常,最坏的情况是注册中心会把服务节点全部摘除,导致服务消费者没有可用的服务节点调用,但其实这时候服务提供者本身是正常的。所以,将存活探测机制用在服务消费者这一端更合理,如果服务消费者调用服务提供者节点失败,就将这个节点从内存中保存的可用服务提供者节点列表中移除。

  负载均衡

  一般情况下,服务提供者节点不是唯一的,多是以集群的方式存在。由于机器采购批次的不同,不同服务节点本身的配置也可能存在很大差异,新采购的机器CPU和内存配置可能要高一些,同等请求情况下,性能要好于旧的机器。对于服务消费者而言,在从服务列表中选取可用节点时,如果能让配置较高的新机器多承载一些流量的话,就能充分利用新机器的性能。

  常用的负载均衡算法主要包括如下几种。

  1、随机算法

  从可用的服务节点随机选取一个节点。

  2、按照固定的权重,对可用服务节点进行轮询,如果所有服务节点的权重都是相同的,则每个节点的调用量也是差不多的。但可以给某些硬件配置好的节点的权重调大一点。

  3、最少活跃调用算法

  该算法在服务消费者这一段的内存里动态维护着同每一个服务节点之间的连接数,当调用某个服务节点时,就给与这个服务节点之间的连接数加1,调用返回后,就给连接数减1。然后每次在选择服务节点时,根据内存里维护的连接倒序排列,选择连接数最小的节点发起调用,也就是选择了调用量最小的服务节点,性能理论上时最优的。

  4、一致性Hash算法

  指相同参数的请求总是发到同一服务节点。当某个服务节点出现故障时,原本发往该节点的请求,基于虚拟节点机制,平摊到节点上,不会引起剧烈变动。

  服务路由

  对于服务消费者而言,在内存中的可用服务节点列表中选择哪个节点不仅由负载均衡算法决定,还由路由规则决定。

  路由规则:通过一定的规则如条件表达式或者正则表达式来限定服务节点的选择范围。

  为什么要制定路由规则?由如下两个原因

  1、业务存在灰度发布需求

  服务提供者做了功能变更,只希望部分人先使用。

  2、多机房就近访问需求

  不同IDC之间的访问由于要跨IDC,有些对时效性高的业务,应该尽量在同一个IDC内部。一般可以通过IP段规则来控制访问。

  服务容错

  背景:对于服务调用失败的情况,需要手段自动恢复,保证调用成功。常用方法如下:

  FailOver:失败自动切换。服务消费者发现调用失败或者超时后,自动从可用的服务节点列表中选择下一个节点重新发起调用,也可以设置重试次数。要求服务调用的操作必须是幂等的。

  FailBack:失败通过。就是服务消费者调用失败或者超时后,不再重试,而是根据失败的详细信息,来决定后续的执行策略。

  FailCache:失败缓存。就是服务消费者调用失败或者超时后,不立即发起重试。

  FailFast:快速失败。就是服务消费者调用一次失败后,不在重试。

  

  

猜你喜欢

转载自www.cnblogs.com/gzhcsu/p/11413432.html