SpringCloud_004_SpringCloud服务发现组件原理介绍
技术交流qq群,交流起来方便一些:170933152
1.如何解决硬编码问题?
上次咱们说到,硬编码问题
比如:
服务发现组件01.png
用户-->购票-->电影微服务-->用户微服务
这里电影微服务要调用用户微服务的内容,那么电影微服务
会存有用户微服务的ip信息
那么如果,类似的用户微服务有很多,那么电影微服务就会需要记住很多
IP,当然可以用Nginx进行反向代理
但是如果,电影微服务同时也是,别的微服务的服务提供者,那么,
就会出现很多微服务都需要修改的情况
这样一是维护困难,另外如果用户微服务有很多的节点,那么
进行负载均衡的话,可以比如在电影微服务和用户微服务之间用Nginx
进行反向代理,但是,如果微服务很多都需要负载均衡,也就是很多微服务
都有很多节点,那么也就是为了保持多个节点有一个ip的接口,就
需要很多的Nginx反向代理.
这样也是不合适的.
所以这里需要一个服务发现的概念.
------------------------------------------
服务发现
服务发现组件02.png
1.首先,当服务启动的时候,服务消费者和服务提供者都会把自己的IP和端口
注册到服务发现组件中,当服务消费者需要使用的时候,他会从服务发现组件
的维护的表中,进行查找服务提供者的ip和端口
2.所有的服务都可能会down掉,那么这里涉及到一种心跳机制,
也就是服务发现组件会给服务发送心跳包,如果连续3次发送的
心跳包都没有得到回应,服务发现组件就认为这个服务down掉了
就把他的ip和端口,从自己维护的表中踢出,这是典型的服务发现的机制
---------------------------------
服务发现组件的功能
1.服务注册表
服务注册表是一个记录当前可用服务实例的网络信息的数据库,
是服务发现机制的核心。服务注册表提供查询API和管理API,
使用查询API获得可用的服务实例,使用管理API实现注册和注销;
其实就是一个数据库来记录微服务的ip和端口,
当然,要注册和注销微服务的ip和端口,这里就需要服务发现组件
通过相应的api来管理这个服务注册表
--------------------------------
2.服务注册
服务注册很好理解,就是服务启动时,将服务的网络地址
注册到服务注册表中;
3.健康检查
服务发现组件会通过一些机制定时检测已注册的服务,
如果发现某服务无法访问了(可能是某几个心跳周期后),
就将该服务从服务注册表中移除。
---------------------------------
服务发现的方式
1.客户端发现
Eureka
Zk
2.服务器端发现
Consul + nginx
这里springcloud对:Eureka支持的最好,然后是Consul
然后是zk
这里支持的好,指的是他跟其他模块的配合的好.
关于客户端发现和服务器端发现的区别,看下面:
blog.daocloud.io/microservices-4/
一篇文章,世界十大架构师之一的
DaoCloud,企业级容器云平台。DaoCloud成立于2014年,
以“释放持续创新的原力”为口号,
秉承“精益、融合、开放”三大理念,
基于 Docker 容器技术打造互联网化应用的持续交付、
高效运维和数据运营平台,帮助企业占领“互联网+”时代的
优势地位。[1]
Chris Richardson,是世界著名的软件大师,
经典技术著作《POJOS IN ACTION》一书的作者,
也是 cloudfoundry.com 最初的创始人,
Chris Richardson 与 Martin Fowler、
Sam Newman、Adrian Cockcroft
等并称为世界十大软件架构师。
-----------------------------------------------