Devean 布洛克
GRPC服务发现实现方案及存储选型
February 11, 2024

GRPC服务发现实现方案及存储选型

发布 February 11, 2024  •  1 分钟  • 169 字
Table of contents

基于GRPC、spring-boot、zookeeper实现轻量化服务发现

背景

核心痛点

需求

功能性需求

非功能性需求

方案设计

服务注册流程

grpc-server启动服务注册流程

服务发现流程

具体方案

DB存储方案

cluster_name server_name own_address heat_beat instance_hash
default user-center host:port timestamp 集群名+服务名+主机端口的hash
  1. server端启动后将服务信息写入表,并周期更新心跳,
  2. 服务启动时加载shutdownhook钩子函数,服务关闭时删除服务当前实例服务信息
  3. client端调启动时加载服务信息列表并创建rpc链接
  4. client端添加定时任务,根据服务名扫描服务实例信息,并做合并

zk存储方案

存储方案对比

DB redis zookeeper etcd Eureka Consul Nacos
一致性 CP CP AP CP CP+AP
健康检查 不支持 不支持 支持 支持 支持 支持 双向心跳
watcher支持 不支持 不支持 多次注册 一次注册 支持 支持 支持
自动注销 不支持 不支持 支持 支持 需调用其API或超过延迟时间下线 支持 支持
最少节点数 1 3 3 1 3 3
社区 活跃 活跃 不活跃 活跃 活跃
延迟 较高 较高
拓展接口注册 难度大 容易 容易 容易 容易 容易
语言 C++ C++ Java go Java go Java
缺点 可靠性低 当服务达到一定规模是,写入性能存在瓶颈
备注 依赖SDK 依赖SDK 与Registrator结合实现服务发现预注册 eureka1.x停止维护 ,2.x闭源

结论