SpringCloud实战微服务之——服务发现与服务注册(一)
服务发现与服务注册——基本概念
(一)服务发现与服务注册
如何解决硬编码问题?
上次的实例中是采用的硬编码,实际上是不可取的。因为在实际开发中,服务组件的端口和IP都是动态变化的。一旦一个组件的访问地址发生变化 如果采用的是硬编码就要将所有依赖于此组件的服务组件进行停止-修改-部署 等一系列的操作,如果采用的是Nginx对同一组件的多个副本进行负载均衡 其工作量也是很大的。
为了解决这种硬编码造成的问题,引入了服务发现的概念:
服务发现:所谓的服务发现就是服务消费者和服务提供者在启动的时候就会将自己的网络IP和端口注册到服务发现组件里面去,当服务消费者调用服务提供者的时候会从服务发现组件中进行查询IP和端口 然后进行调用,被注册的组件会每隔一段时间向服务发现组件发送一次心跳,如果连续几次没有发送心跳,服务发现组件就会将其节点移除。
服务发现组件的功能:
- 服务注册表:服务注册表是一个记录当前可用服务实例的网络信息的数据库,是服务发现机制的核心。服务注册表提供查询API和管理API,使用查询API获取可用的服务实例,使用管理API实现注册和注销。
- 服务注册:服务注册很好理解,就是当服务启动时,将服务的网络地址注册到服务注册表中。
- 健康检查:服务发现组件会通过一些机制定时检测已注册的服务,如果发现某服务无法访问了(可能是某几个心跳周期后),就将该服务从注册表中移除。
服务发现的方式:
① 客户端发现:通过Eureka 或ZK。
② 服务器端发现:通过Consul+nginx
其实Spring Cloud对Eureka支持是最好的,其次是Consul,支持最差的是ZK。
其原理可以参考:http://blog.daocloud.io/microservices-4/
术语解释:目前市面上的书籍,服务注册、服务发现、注册中心,在很多场景下,都可以理解为是服务发现组件。