微服务之注册中心对比

4,990 阅读3分钟

前言

        微服务化是当前一大趋势,注册中心则是微服务最基础的组件,是之前组内安排的任务,于是把结果分享出来,本文对当前业界比较流行的微服务组件进行了调研,并作出了总结。

正文

        当前对微服务组件的调研维度如下:社区生态热度、易用性、性能、cap分布式特性、当前组件维护状态、重点功能等。

组件介绍

  1. eureka:netflix公司产品,springcloud1.X版本集成,后续版本宣布不再开源;
  2. nacos:阿里产品,springcloud-alibaba集成,近期开源,版本0.9.0,基于springboot2.X,服务注册中心与配置中心可以集成配置。
  3. consul:HashiCorp 公司推出的开源工具。

组件使用

1. eureka

        server配置

pom引用

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

yml配置

eureka:
  instance:
    hostname: localhost
    instance-id: localhost:${server.port}
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
  server:
    renewalPercentThreshold: 0.49
    renewalThresholdUpdateIntervalMs: 180000 # 3mins
    #peerEurekaNodesUpdateIntervalMs: 500

springbootapplication启动类加入@EnableEurekaServer

        client配置

pom引用
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
 
yml配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10001/eureka

springbootapplication启动类加入@EnableEurekaServer,直接启动server即可。

2. nacos

server配置:

        server下载安装,并启动, unzip nacos-server-version.zip 或者 tar -xvf nacos-server-version.tar.gz

cd nacos/bin

sh startup.sh -m standalone

client配置:

pom引用

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 <version>0.9.0.RELEASE</version>
</dependency>

yml配置
spring:
  application:
    name: nacos-demo
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

management:
  endpoints:
    web:
      exposure:
        include: '*'

springbootapplication启动类加入@EnableEurekaClient。

3. consul

server配置:

官方地址下载,并且启动

以单节点启动 consul agent -advertise 127.0.0.1 -data-dir=/tmp/consul -server -bootstrap

client配置

pom引用
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-consul-discovery</artifactId>
 <version>2.1.1.RELEASE</version>
</dependency>

yml配置
spring:
  application:
    name: consul-provider
  cloud:
    consul:
      host: 127.0.0.1
      port: 8500
      discovery:
        register: true
        service-name: consul-provider

springbootapplication启动类加入@EnableEurekaClient。

使用对比

维度 eureka nacos consul
社区生态 社区热度高 社区热度较低、中文文档多 社区热度较高
性能 8核16G服务端定时轮询查询更新,当服务数量过多(8000-10000)时,压力过大 8核16G单个节点9000以上的连接时会出现硬件负载过高场景 暂无
cap分布式特性 AP可用性以及分区容错性;可用性:无主从节点,一个节点挂了自动切换其他节点,但可能会导致不同的注册中心节点的服务列表不一致,可以接受 AP或CP CP:作为分布式集群来说,是CP
维护状态 1.X停止维护;2.0版本闭源 近期才开源;只到0.9.0.release; 一直在跟着spring cloud维护,目前到2.1.1
重点功能,特点 1.springcloud-starter服务,开箱即用2.有控制台 1、支持springcloud 服务发现、配置管理2、有web ui控制台3、通过了大规模的性能测试4、注册中心与配置中心 有控制台;缺点:暂时没有对consul集群的配置方式,即服务无法注册多个consul节点
注册使用 service 注册时向eureka server发送自身服务信息;service每30秒向eureka server续约服务;service 每30秒拉取服务列表至本地缓存。 同样是使用服务不断上报心跳的方式保持在注册中心的活跃性;服务发现。一、不断从服务端查询可用服务实例。二、从已变服务队列中通知服务持有者的查询任务,服务发生变更时更新本地服务列表。 既支持consul主动检查服务的情况,也支持服务主动向consul发送心跳报告自己的健康状况。
其他 k8s集成,dubbo集成均支持

小结

        eureka、nacos、consul均能支持微服务注册及web ui控制台的最基础的需求,但eureka当前停止开源、consul暂时不支持client配置注册中心集群,按需选择。