服务发现框架对比
– | 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外仍然没有接受到注册中心的信息,将会在注册中心,移除掉该列表内容。
启动类注解
@EnableDiscoveryClientyml文件配置:
server:port: 8888 #运行端口号
spring:application:name: test-service #服务名称
eureka:instance:appname: ${spring.application.name}prefer-ip-address: trueinstance-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: 10client:# 定时刷新本地缓存时间:5秒registryFetchIntervalSeconds: 5service-url:defaultZone: http://localhost:8761/eureka/ #配置注册中心地址register-with-eureka: false
2>服务的发现
EurekaServer
@EnableEurekaServer//本身也是一个微服务
server:port: 8761tomcat:max-threads: 5
spring:security:user:name: rootpassword: 123456 #其它服务访问密码application:name: center-service
eureka:server:# 关掉自保护enableSelfPreservation: false# 主动失效检测,5秒evictionIntervalTimerInMs: 5000# 禁用readOnlyCacheMapuseReadOnlyResponseCache: falseinstance:# 心跳间隔,5秒leaseRenewalIntervalInSeconds: 5# 没有心跳的淘汰时间,10秒leaseExpirationDurationInSeconds: 10hostname: ${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: trueclient:healthcheck:enabled: trueservice-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)功能
- service discovery
consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。 - health checking
健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。 - key/value storage
一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。 - multi-datacenter
无需复杂的配置,即可支持任意数量的区域。