Maglev 一致性Hash调研

dpvs中conhash实现

原理

● 一个RS对应的虚拟节点(副本)的个数 
replicas = Weight * REPLICA

● 虚拟节点的 hash_key
    hash_key= rs的地址信息(af,addr,port) + vnode_index
(vnode_index 为 虚拟节点的索引,范围为 [0, replicas- 1] )
hash完后,基于hash_value,将虚拟节点插入到红黑树中。

● 调度选择RS
从数据包中提取hash因子(sip/cid/ktp等),hash后得到 hash_value,在svc的红黑树中查找,返回键值大于等于hash_value 的最接近的节点。

● 增删改VS
    ○ 添加VS
在每个线程(master/slave)中,创建一个红黑树,将VS下的每个RS对应的虚拟节点添加到红黑树中。
    ○ 删除VS
将红黑树删除,删除VS下的RS以及VS自身。
    ○ 更改VS调度算法
基于旧的调度算法,清理对应的数据结构;基于新的调度算法,初始化对应数据结构。

● 增删改RS
    ○ VS下添加RS
        一个RS对应多个虚拟节点,添加到VS的红黑树中;
    ○ VS下删除RS
        将RS对应的多个虚拟节点,从红黑树中摘除;
    ○ 更改RS权重
将RS对应的旧的虚拟节点从红黑树中摘除,再基于新的虚拟节点个数,重新将新的虚拟节点插入到红黑树中。
如果RS健康检查不通过,Keepalived 会将RS的权重设置为0,所以不会将不健康的RS的虚拟节点插入到红黑树中。

分析

优缺点

● 优点
    ○ 增删改RS生效速度快
        ■ 在原有红黑树的基础上,增删虚拟节点,而不需要重新构建红黑树;
● 缺点
    ○ 占用内存较大
        ■ 同一个SVC在每个线程都有一个调度结构(红黑树)
        ■ 每个虚拟节点需要申请一次内存,占用较多内存空间
    ○ Slave线程中生成/更新红黑树占用时间较多
        ■ Slave线程中生成/更新红黑树会进行多个虚拟节点的申请/释放(rte_malloc/rte_free调用),如果消耗时间过长可能会导致网卡出现Imiss问题。

内存占用分析

(gdb) p sizeof(struct util_rbtree_node_s)
$1 = 48
(gdb) p sizeof(struct conhash_node)
$2 = 96
(gdb) p sizeof(struct virtual_node_s)
$3 = 16
(gdb) p sizeof(struct dp_vs_dest)
$4 = 256
(gdb) p sizeof(struct dp_vs_service)
$5 = 384

由于cache line对齐,rte_malloc 申请 struct util_rbtree_node_s 结构时, size 部分为 64B,每个申请的结构会额外申请 elem_header, 其也是cache_line对齐,占用64B, 所以一共消耗 128B。
同理,rte_malloc 申请 struct virtual_node_s,共占用 128B;

其他

1) svc中增加、删除 rs:
红黑树的插入,删除虚拟节点都是 O(lgn) 的时间复杂度; n为 svc下 所有真实rs 的虚拟rs的个数;


2)调整 rs的 权重
调整 rs  weight 则会将 之前的 rs 的虚拟节点都给删除了,然后基于新的 rs的 虚拟节点的个数,重新加入到 红黑树中;
如果 rs 的 健康检查失败,weight 设置为0,则红黑树中不会存在 rs 的 虚拟节点;
所以:红黑树中存在的节点都是 rs 的 weight 不为0 的 rs 的 虚拟节点;


3) RS调度:
红黑树的查找的时间复杂度为: O(lgn);
从红黑树中查找到某个节点,对应rs的虚拟节点,进而得到rs;
找到 rs 后,判断 rs 是否有效,有效则直接返回 rs,不可用则返回 null, 没有进而 fallback (即找到的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 写一个用强化学习在MATLAB中实现磁悬浮列车速度跟踪控制的代码。 要写一个用强化学习控制磁悬浮列车速度的代码,您需要了解以下内容: 1. 强化学习的原理:它是一种机器学习方法,通过不断的试错来学习如何解决问题。 2. 磁悬浮列车的运动学:您需要了解磁悬浮列车的动力学模型,以便更好地控制它的速度。 3. MATLAB:您需要熟悉MATLAB编程语言,以便写出代码。 在编写代码之前,您需要先对强化学习算法和磁悬浮列车运动学进行研究,以确保您有足够的知识和技能来完成此任务。推荐使用Q-learning或SARSA算法。 如果您有任何具体问题,请提出,我将尽力帮助您。 ### 回答2: 使用强化学习编写MATLAB中的代码来实现磁悬浮列车速度跟踪控制。 首先,我们需要定义一个磁悬浮列车的速度跟踪控制问题。速度跟踪控制的目标是使磁悬浮列车的实际速度尽可能接近给定的目标速度。我们可以使用强化学习中的一种算法,如深度强化学习(Deep Q-Learning),来解决这个问题。 在MATLAB中,我们需要定义一个环境(Environment)来模拟磁悬浮列车的行为。这个环境包括磁悬浮列车的初始状态,比如初始速度和位置,以及列车的物理特性,如最大加速度和制动力等。我们还需要定义一个动作空间,包含磁悬浮列车可以采取的控制动作,比如加速度值或制动力值。 接下来,我们可以使用强化学习中的Q-Learning算法来训练一个智能体(Agent)。智能体通过与环境的交互来学习如何根据当前状态选择最优的控制动作。训练过程中,智能体会根据环境的反馈,比如奖励或惩罚,来调整自己的决策策略。一次完整的训练过程可以包括多个迭代轮次(Episodes),每个轮次中智能体在环境中执行一系列动作并不断更新自己的Q-函数。 训练完成后,我们可以使用学习到的Q-函数来进行磁悬浮列车的速度控制。智能体将根据当前的状态选择最优的控制动作来调整磁悬浮列车的速度,并与环境进行交互。通过不断的迭代,智能体可以逐渐优化控制策略,使得磁悬浮列车的速度更加接近目标速度。 最后,通过对代码进行调试和优化,我们可以在MATLAB中实现一个高效的磁悬浮列车速度跟踪控制系统,帮助磁悬浮列车实现精准的速度控制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值