当前位置:网站首页 > 编程语言 > 正文

kubelet怎么发音(kubeadm怎么读)



lab2应该是824的四个lab中最简单的一集,提前看了下后面两个,包括lab1的MapReduce,只有lab2的两个task全都是easy。

实现一个简单的KV Server键/值服务器,主要包含以下三个操作

  1. Get (key)
    • 根据给定的key,去查询key对应的value并返回给客户端。
    • 如果不存在key,则返回空字符串
  2. Put (key, value)
    • 如不存在,则创建key,并将对应的值设置为value。
    如已经存在key,将key对应的值更新为value,返回旧值。
    (注:实验手册并没有指明Put操作返回新值还是旧值,根据lab提供的测试来看,对Put操作的返回值也 没有要求,这里和Append操作保持一致)
  3. Append (key, arg)
    • 如已经存在key,将key对应的值后面加上arg,返回旧值。
    • 如果不存在,创建key,并将对应的值设置为value。(即:假装已经有这个key了,这个key对应的value是长度为0的空串。)

如果有网络不稳定等情况导致有消息丢失,要保证每次请求要返回正确的结果。我们需要做的操作有如下三个:

重复请求

如果一次请求并没有收到服务端的确认消息,我们认为这次请求出现了消息丢失的情况,要重新发送请求,直到收到了服务端的确认消息。

缓存结果

出现请求丢失的情况,重复请求后得到的结果应当和第一次请求应当得到的结果保持一致,这就需要定义一个数据结构来缓存每次请求的结果。

释放内存

对于前一个步骤中的缓存结果,要定期释放,不能占用太多内存。

示例

下面这张图的流程就说明了一种可能出现问题的情况

  1. client1向server发送Get请求,假设键为k1,对应的值为v1。
  2. server接收到请求并回复,但回复丢失。
  3. 在client1重新发送请求前,client2发送Put请求,键为k1,对应的值为v2。
  4. server接收到请求并更新k1对应的值为v2,回复client2。
  5. 此时server接受到了client1发送的重复请求,此时k1对应的值已被修改成v2,但正确的回复应该是v1。

在Server中维护一个map即可,Get、Put、Append操作都比较直观,不细说了。

以Get为例,

 
  

没有ok一直循环就好

对每次消息使用nrand()方法生成一个id,服务端每次收到请求,将返回的结果和对应请求的id缓存。

 
  

采用的方法是每次请求后增加一个确认请求。即增加一个bool参数Confirm,如果Confirm为false则按正常流程走;如果为true代表这是一个确认请求,server收到确认请求后删除对应请求id的缓存。

 
  
 
  
 
  
 
  

释放内存这一步,看实验手册里面这样写:

以为是对于每个client,第二次请求时释放第一次请求的缓存,这样对于每个client,server同时最多只保留一个请求的缓存。然而这样还是过不了测试用例,看了测试用例的源码发现好像server里一点缓存都不能有的感觉。于是按照2.4里面所说的方法增加了一个confirm请求。

到此这篇kubelet怎么发音(kubeadm怎么读)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 公司的阶级制度(公司阶级制度特别严重)2025-05-24 11:45:09
  • 电脑剪辑视频教学视频(怎么在电脑上剪辑视频?用什么工具最好?)2025-05-24 11:45:09
  • pdfView 怎么删除其中一页(pdf怎样删除其中一页)2025-05-24 11:45:09
  • modbus485协议(modbus协议40001)2025-05-24 11:45:09
  • wifi字典破解密码(wifi字典破密码成功率)2025-05-24 11:45:09
  • jvm内存模型图(jvm内存结构 内存模型 区别)2025-05-24 11:45:09
  • udp广播(udp广播需要端口号吗)2025-05-24 11:45:09
  • 颜色代码对应表转换(颜色代码如何转换)2025-05-24 11:45:09
  • 网页即时聊天(网页即时聊天有哪些)2025-05-24 11:45:09
  • py文件如何保存(py文件保存不了)2025-05-24 11:45:09
  • 全屏图片