JavaJava实战

【微服务】注册中心的设计和实现

2020-06-29  本文已影响0人  不孤独的字符串

当项目由单体结构拆分成一个个的服务,服务之间由本地调用转变成远程调用的时候,我们可以看成是通过一个个的url去获取数据。调用方和被调用方需要知道彼此的状态才可互相通信,而注册中心正是屏蔽了他们之间的状态信息,使得服务之间不需要维护彼此的数据信息,可专注于业务实现。

服务的注册和发现是注册中心最基本的功能,注册中心实现服务治理,管理所有的服务信息和状态,定时检查注册的服务,使得调用方不用去关心有多少提供方。常见的注册中心有Eureka,Zookeeper,Consul,Naco,文章内容基于Eureka实现。


在这里插入图片描述
1. Eureka单节点实现

pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

application.yml

eureka: 
  client:
    #是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息
    register-with-eureka: false
    #是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
    fetch-registry: false
    #设置服务注册中心的URL,用于client和server端交流
    service-url:                      
      defaultZone: http://localhost:7900/eureka/

最后在启动类增加注解,至此便完成了Eureka注册中心的搭建。

@EnableEurekaServer
2. 服务注册

pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.yml

#注册中心
eureka: 
  client:
    #设置服务注册中心的URL
    service-url:                      
      defaultZone: http://localhost:7900/eureka/

#不想被注册,可以禁止暴露
spring: 
  cloud:
    service-registry:
      auto-registration:
        enabled: false

注册成功可以在Eureka的控制台看到服务的信息。服务将自身的信息和状态注册到注册中心上,以方便其他服务的调用,同时会定时从注册中心拉取注册列表。每个服务既可能是生产者,也可能是消费者。

3. 服务调用

此时可以通过服务名拼接一个url去发起请求。但基于Feign和Ribbon组件,远程调用在编码方式上更像是本地调用,方便维护和管理,这里其实也表现了注册中心的另一个用处:可以通过注册中心获取的服务注册列表,从而通过一些负载均衡的策略去实现划分流量服,避免单台服务压力过大。关于服务调用,后续另外说明,这里就不继续展开。

4. Eureka高可用

Eureka高可用的实现主要是采用运行多个Eureka server实例并相互注册的方式实现,节点彼此之间会通过增量的方式同步数据,从而确保注册服务数据的一致性。跟单节点的差别主要在于配置上。

节点1:

#是否将自己注册到其他Eureka Server,默认为true 需要
eureka.client.register-with-eureka=true
#是否从eureka server获取注册信息, 需要
eureka.client.fetch-registry=true
#设置服务注册中心的URL,用于client和server端交流
#此节点应向其他节点发起请求
eureka.client.serviceUrl.defaultZone=http://localhost:7902/eureka/
#主机名,必填
eureka.instance.hostname=localhost
management.endpoint.shutdown.enabled=true
#web端口,服务是由这个端口处理rest请求的
server.port=7901

节点2:

#是否将自己注册到其他Eureka Server,默认为true
eureka.client.register-with-eureka=true
#是否从eureka server获取注册信息
eureka.client.fetch-registry=true
#设置服务注册中心的URL,用于client和server端交流
#此节点应向其他节点发起请求
eureka.client.serviceUrl.defaultZone=http://localhost:7902/eureka/
#主机名,必填
eureka.instance.hostname=localhost
management.endpoint.shutdown.enabled=true
#web端口,服务是由这个端口处理rest请求的
server.port=7902

高可用下,对于服务的注册来说也是比较简单,只需要在配置中指明所有的Eureka地址即可。

eureka: 
  client:
    service-url:                      
      defaultZone: http://localhost:7901/eureka/,http://localhost:7902/eureka/
小结

文章以Eureka为例说明了微服务下注册中心相关的一些内容,实际上其他注册中心组件的原理也都很类似。如果觉得文章可以,不妨点个赞,你的支持是我最大的动力。后续我也会逐渐更新微服务相关的一些知识,感兴趣的可以关注我,一起学习~

上一篇 下一篇

猜你喜欢

热点阅读