什么是服务注册与发现?
服务注册/发现是微服务架构中不可或缺的重要组件,起初服务都是单节点的甚至是单体服务,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问(HttpClient/RestTemplate),直到后面出现了多个节点的分布式架构,起初的解决手段是在服务端负载均衡,同时在网关层收束接口,使不同的请求转发到对应不同端口上,这也是前后分离防止前端跨域的手段之一:
要命的是,nginx并不具有服务健康检查的功能,服务调用方在调用一个服务之前是无法知悉服务是否可用的,不考虑这一点分布式的架构高可用的目标就成了一个摆设,解决手段也很简单:对超时或是状态码异常的请求进行重试尝试,请求会被分发到其他可用节点,或者采用服务注册与发现机制察觉健康的服务。
Consul中的服务发现
consul在Java开发者眼中只有一个会被用到的功能:服务注册与发现,即Service Discovery,其核心流程如下:<br consul在java开发者眼中只有一个会被用到的功能:服务注册与发现,即service discovery,其核心流程如下:
在consul中,假使是B服务调用A服务,其大致流程即为:<br 在consul中,假使是b服务调用a服务,其大致流程即为:
A服务调用consul的API注册自己 -> consul定时检查A服务状态(默认)或A服务本身与consul维持心跳请求 -> B服务通过consul提供的DNS调用A服务(默认)或从consul获取健康的服务列表并通过某种算法选择合适的服务调用。