黑马程序员技术交流社区

标题: 【石家庄校区】Spring Cloud-04-服务注册与服务发现-原理剖析 [打印本页]

作者: liupeng_hm    时间: 2019-8-26 16:47
标题: 【石家庄校区】Spring Cloud-04-服务注册与服务发现-原理剖析
本帖最后由 liupeng_hm 于 2019-8-26 16:50 编辑

地址硬编码问题——电影微服务中将用户微服务的地址写死,如果用户微服务地址发生变化,难道要重新上线电影微服务吗?
本节来解决该问题。
不妨先思考一下,怎样才能让服务消费者总能找到服务提供者呢?或者说,怎样才能让服务消费者感知到服务提供者地址的变化呢?
TIPS
目前市面上把服务消费者找到服务提供者的这种机制称为服务发现,又或者服务注册。下面来探索服务发现究竟是怎么回事。
服务发现原理初探
其实,服务发现机制非常简单,不妨用大家熟悉的MySQL来类比——只需一张表(图中的registry表)即可实现服务发现!

如图,如果我们能在:
这样,服务消费者不就永远都能找到服务提供者了嘛!当服务消费者想调用服务提供者接口时,只需向数据库发送SQL语句 SELECT*FROM registrywhereservice_name='user'andstatus='UP' 即可找到服务提供者的所有实例!IP、端口啥的都有了,自己拼接一下,再去调用就行了!
TIPS
看,服务发现机制是不是很简单?程序猿给图中的”MySQL“的组件起了一个牛叉的名字叫:”注册中心“,也有的书将其称为”服务发现组件“。
但,这毕竟只是一个最简陋的服务发现原理。完整的服务发现要考虑的问题有很多,例如:
那么,一个完善的服务发现组件应该具备哪些能力呢?
服务发现原理深入
不妨来看一下使用服务发现组件后的架构图,如图所示。

服务提供者、服务消费者、服务发现组件这三者之间的关系大致如下:
综上,服务发现组件应具备以下功能。
综上,使用服务发现的好处是显而易见的。Spring Cloud为我们提供多种服务发现组件的支持,例如Eureka、Consul(spring-cloud-consul)、Zookeeper(spring-cloud-zookeeper)、Aliaba Nacos(孵化中:spring-cloud-alibaba)、Etcd(孵化中:spring-cloud-etcd)等。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2