【分布式】路由配置服务

在之前我们将路由表以及分组信息一直存储在网关中,如下图:
在这里插入图片描述

显然这样设计并不合理:

  1. 网关应该只负责对用户的信息进行解析并根据类型进行转发,最大限度减少其他的负荷
  2. 网关作为一个单点,在出现故障后,我们希望可以直接重启就能处理请求,不需要有数据的恢复,也就是第一点,网关只负责转发功能。

因此在这里我们引入路由配置服务器,专门负责处理集群路由管理,可以理解为这是一个简单的Zookeeper.

显然,为了防止单点的出现,我们使用raft来做为该服务的高可用的保障,此后我们只需要关注业务层的拓展即可。
在这里插入图片描述

那么配置服务器里存储了什么呢?

字段解释举例
Version记录配置版本1 (启示为1)
Buckets桶列表,或者叫哈希槽(slots),存储服务器编号是一个数组,自由设置长度
Addr记录存储服务器编号对应的服务器地址1–> 47.89.34.234

同学们,可以在体验界面实际操作理解一下,并不复杂。


此时我们的业务逻辑发送变化(假设Buckets长度为15):

  • 用户上传kv
  1. 网关收到 put请求,输入为(key,value), hash(key)%15达到一个[0,14]的数字X,即bucketX
  2. 发送请求信息到路由配置服务器组,得到bucketX对于的存储服务器A的地址
  3. 与存储服务器A进行通信,写入数据
  • 用户下载kv
  1. 网关收到 get请求,输入为key, hash(key)%15达到一个[0,14]的数字X,即bucketX
  2. 发送请求信息到路由配置服务器组,得到bucketX对于的存储服务器A的地址
  3. 与存储服务器A进行通信,查询数据并返回结果

那为什么说我们的这个配置服务像zookeeper呢,这是因为除了网关与configserver通信之外,存储服务器也会和configserver进行通信。

存储服务器为了能够及时获取最新的配置进行数据效验和可能的桶迁移操作,会不断从configserver拉取最新配置,这里有两种方案:

  1. 存储服务器按一定的时间间隔请求配置服务器的配置信息,如果与当前版本有变化,则更新本地的配置
  2. 采用zookeeper监听通知的方式,存储服务器注册监听配置方法,配置服务器检测到配置变更,则通知存储服务器更新。

这里Dsjorney采用的是实现更简单的第一种,对于go语言,单独开一个协程去轮询访问开销并不大。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ornamrr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值