大萧条时期的野蛮生长——服务注册

152 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划·4月更文挑战」的第12天,点击查看活动详情

服务注册是微服务离不开的话题,服务注册与发现一个合格的微服务系统必备的组件。这东西真的不可或缺吗?从服务的可用性角度来说,确实。引入复杂度是有代价的,就得看这个复杂性带来的收益值不值了。

Why

为什么说这个东西重要呢?当下我负责的部分服务是没有接入注册的,只通过一个公有的网关来进行负载均衡的转发。好像也运行的挺好,不注册也不是什么大问题。这是因为我的服务比较单一,在网关中配置了固定的转发路径。假如这个时候我拆分出一个新的独立服务,或者新增了一些uri,那还要在网关中再配置一遍,重启网关才能生效。

这是第一个重要的功能,动态配置。这是注册发现所具备的。

然后当下,如果服务的某个节点挂了,网关还是会傻傻的去请求,然后返回一个500。再故障修复之前,请求还是会均衡的转发到故障节点上去。是不是不够聪明。第二个重要功能就来了,动态摘流,有动态摘流就有动态接入,比如我新增了节点,这个节点便可以自动发现。

所以理由就是要自动化,不要手动,相信机器,不要相信人。

How

市面上很非常多的服务注册与发现中间件,提供的功能也大差不差。从历史的演进来看,分为2种主要的思路。

  1. 主动探活 就是注册中心会主动向服务去发请求,获得一个HTTP 200才算该节点存活。这样首先对于老旧的物理机部署的服务不友好,可能服务多了端口不够用,每个服务要暴露一个可调用的端口给注册中心。其次是遇到了网络问题,可能这次探活的时延会很长,服务一多就会非常的慢。

  2. 心跳 主动的不行,那就被动。服务主动向注册中心发送请求,业内称之为心跳,比喻也很形象。然后注册中心设置一个阈值,比如30s还没有发送心跳的服务,我就认为不可用,然后拆除,不再向其发送请求。然后服务恢复后,再动态的接入,再切流。完全自动化处理,当然这只是个功能描述,其中细节的设计还是很复杂的。

One more thing

我们都在提优雅退出,在没有注册中心之前,实现优雅退出可太难了。但有了之后一切变的十分方便,直接给某个节点切流就行,没有新的请求进来,挤压的请求很快就处理完了。等重新部署了,心跳恢复之后再接入流量。

所以说,注册中心至于微服务的收益可太大了。