Neo's Blog

不抽象就无法深入思考
不还原就看不到本来面目!

0%

微服务系列-服务注册与发现

集成:在服务提供端或者调用端,如何集成注册中心?应用内 OR 应用外

测活:服务注册之后,如何对服务进行测活以保证服务的可用性

负载均衡:当存在多个服务提供者时,如何均衡各个提供者的负载?

运行时依赖:引入注册中心之后,对应用的运行时环境有何影响?

可用性:如何保证注册中心本身的可用性,特别是消除单点故障?

状态获取:(1)主动探测(2)心跳上报

一些可能问题:

  • 保护机制:如果短时间内摘除的节点数量超过集群的40%,则停止摘除节点
  • 通知风暴问题(准备更多的注册中心节点;精简通知内容)

目前比较流行的解决方案包括:

对比维度 euraka consul ZK
实现思路 去中心化,通过复制来同步数据,但不保证一致性。只要有一个节点可用,系统整体就可用。 内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案 使用ZK节点临时节点来维护服务器列表,ZK支持watch节点变更通知机制
测活 客户端心跳 TCP/HTTP/gRPC/Cmd 自研-客户端心跳
负载均衡 Ribbon Fabio 自研-负载均衡
雪崩保护 有,灾难态进入自我保护模式 自研
自动注销实例 支持 支持 进程不可用,临时节点自动销毁
访问协议 HTTP HTTP/DNS 自研
监听支持 支持 支持 WATCH NODE变更
多数据中心 支持 支持 不支持
跨注册中心同步 支持 支持 不支持
框架集成 SpingCloud继承 Spring、k8s集成
优点 去中心化,高可用 功能相对完善 简单容易实现,适用于初创期
不足 一致性差 可用性无保证 服务可用性无保障
ZK跨机房集群支持不佳
CAP AP CP CP
一致性协议 仅复制,非强一致 raft zab,一种类paxos协议

20201222213947

你的支持是我坚持的最大动力!