【分布式学习】服务注册与发现:Eureka、zk、Nacos、Consul对比

服务发现框架对比

Nacos Eureka Consul CoreDNS Zookeeper
一致性协议 CP+AP AP CP CP
健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
负载均衡策略 权重/
metadata/Selector Ribbon Fabio RoundRobin
雪崩保护
自动注销实例 支持 支持 不支持 不支持 支持
访问协议 HTTP/DNS HTTP HTTP/DNS DNS TCP
监听支持 支持 支持 支持 不支持 支持
多数据中心 支持 支持 支持 不支持 不支持
跨注册中心同步 支持 不支持 支持 不支持 不支持
SpringCloud集成 支持 支持 支持 不支持 支持
Dubbo集成 支持 不支持 不支持 不支持 支持
K8S集成 支持 不支持 支持 支持 支持

1,Eureka

1)CAP

zk是CP的:集群故障时不提供服务。
eureka是AP的。

CAP:
C(一致性);
A(可用性);
P(分区容错)。

AP:
当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。
此时不保证C。

CP:
当网络分区出现后,为了保证一致性,就必须拒绝请求,否则无法保证一致性。
此时不保证A。

2)功能

由于服务注册中心的存在,使得微服务之间访问不需要知道其它服务的ip和端口,服务调用时只需要去注册中心的代理地址找到对应服务即可。

1>服务的注册

Eureka Client分为:Service Provider和Service Consumer。
Client向注册中心注册的时候,会提供一系列的元信息,例如主机,端口,健康检查的URL,主页等,服务会不断的发送心跳信息,进行健康检查,如果某个服务在30s外仍然没有接受到注册中心的信息,将会在注册中心,移除掉该列表内容。

启动类注解
@EnableDiscoveryClient

yml文件配置:
server:
  port: 8888  #运行端口号
spring:
  application:
    name: test-service #服务名称
eureka:
  instance:
    appname: ${spring.application.name}
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${LOCAL_IP:127.0.0.1}
    ip-address: ${LOCAL_IP:127.0.0.1}
    # 心跳间隔:5秒
    lease-renewal-interval-in-seconds: 5
    # 没有心跳的淘汰时间:10秒
    lease-expiration-duration-in-seconds: 10
  client:
    # 定时刷新本地缓存时间:5秒
    registryFetchIntervalSeconds: 5
    service-url:
      defaultZone: http://localhost:8761/eureka/ #配置注册中心地址
    register-with-eureka: false

2>服务的发现

EurekaServer

@EnableEurekaServer

//本身也是一个微服务
server:
  port: 8761
  tomcat:
    max-threads: 5
spring:
  security:
    user:
      name: root
      password: 123456  #其它服务访问密码
  application:
    name: center-service
eureka:
  server:
    # 关掉自保护
    enableSelfPreservation: false
    # 主动失效检测,5秒
    evictionIntervalTimerInMs: 5000
    # 禁用readOnlyCacheMap
    useReadOnlyResponseCache: false
  instance:
    # 心跳间隔,5秒
    leaseRenewalIntervalInSeconds: 5
    # 没有心跳的淘汰时间,10秒
    leaseExpirationDurationInSeconds: 10
    hostname: ${EUREKA_INSTANCE_HOSTNAME:${spring.application.name}}
    instance-id: ${EUREKA_INSTANCE_HOSTNAME:${spring.application.name}}:${server.port}
    ip-address: ${spring.cloud.client.ip-address}
    prefer-ip-address: true
  client:
    healthcheck:
      enabled: true
    service-url:
      defaultZone: ${CENTER_SERVICE_CLUSTER:http://${spring.security.user.name}:${spring.security.user.password}@${spring.application.name}:${server.port}/eureka}
    register-with-eureka: ${REGISTER_WITH_EUREKA:true}
    fetch-registry: ${FETCH_REGISTRY:true}

3>服务的熔断

4>服务的负载

5>服务的降级

2,zk

3,Nacos

几乎支持所有的主流的服务发现,配置和管理。

1)功能

服务发现和服务健康监测
动态配置服务
动态 DNS 服务
服务及其元数据管理

4,Consul

分布式的、高可用、横向扩展的注册中心。

1)功能

  1. service discovery
    consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
  2. health checking
    健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
  3. key/value storage
    一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
  4. multi-datacenter
    无需复杂的配置,即可支持任意数量的区域。

5,etcd

你可能感兴趣的:(linux与大数据组件,分布式,学习,eureka)