新老朋友好久不见,我是大彬,本来计划在7月份连续发几篇垃圾回收的文章,结果一到下半年,事情多了不少,周末就只能看看源码,写写笔记了,要整理成文章,就还有点距离了,关于GC的文章各位大佬再等等吧。
为了证明本号还活着,江湖救急,发几篇其他的笔记吧,这篇文章就介绍etcd/raft的宏观结构,目录先走起。
序言raft服务etcd raftraft应用架构http APIkv storeraftNoderaftNode与raft交互raft架构node结构体raft结构体几个存储相关的概念一个写请求的处理过程总结
Etcd提供了一个样例contrib/raftexample,用来展示如何使用etcd raft,这篇文章通过raftexample介绍如何使用etcd raft。
raftexample是一个分布式KV数据库,客户端可以向集群的节点发送写数据和读数据,以及修改集群配置的请求,它使用etcd raft保持各集群之间数据的一致性。
etcd raft实现了raft论文的核心,所有的IO(磁盘存储、网络通信)它都没有实现,它做了解耦。
它是一个状态机,有数据作为输入,经过当前状态和输入,得到确定性的输出,即每个节点上都是一样的。
raft集群会由多个节点组成,客户端的请求发送给raft leader,再由raft leader通过网络通信在集群之中对请求达成共识。
集群中的每个节点从架构上都可以分为两层:
共识层由etcd raft负责,应用层要负责业务逻辑,数据存储和网络通信不需要应用层实现,而是由不同的模块负责,应用层负责起衔接存储存储和网络通信即可。
每个节点都会启动一个http API用来接受客户端请求,它只是接收请求,不对请求做处理。它会把客户端的写入请求PUT和查询请求GET都交给kv store。
对于修改raft集群配置请求,它会生成ConfChange
交给raftNode。
一个kv数据库服务,它保存有一个kv db,用来存储用户数据。
raftNode用来跟etcd raft交互,他需要:
对于写请求,它会把请求数据编码后发送给etcd raft,etcd raft会把写请求封装成raft的Propose消息MsgProp
,编码后的数据成为log Entry。因为raft并不关心具体的请求内容,它只需要保证每个集群节点在相同的log index拥有相同的log Entry,即请求即可。
raftNode还会启动1个http server,用来集群节点之间的通信,传递raft消息,让集群节点达成共识。它与http api是不同的,http api用来接收用户请求。
raft模块内部定义了一个Node
接口,它代表了raft集群中的一个raft节点,它是应用层跟共识层交互的接口。
其中有几个与数据传递相关函数的是:
还有一个ApplyConfChange函数,当Ready结构体中包含修改raft集群配置的log entry时,应用层会调用此函数,把配置应用到raft。
瞄完raft应用架构,可以从宏观角度看一下raft是如何跟应用层对接的。
raft包内部有2个很重要的结构体:node和raft。
node结构体(后续称为raft.node)实现了Node
接口,负责跟应用层对接,raft.node有个goroutine持续运行,应用层raftNode也有goroutine持续运行,raftNode调用raft.node的函数,每个函数都有对应的一个channel,用来把raftNode要传递给raft的数据,发送给raft.node。比如Propose函数的通道是proc,Step函数的通道是recvc。
raft结构体(后续称为raft.raft)是raft算法的主要实现。
raft.node把输入推给raft.raft,raft.raft根据输入和当前的状态数据生成输出,输出临时保存在raft内,raft.node会检查raft.raft是否有输出,如果有输出数据,就把输出生成Ready结构体,并传递给应用层。
raft.raft应用层有一个storage,存放的是当前的状态数据,包含了保存在内存中的log entry,但这个storage并不是raft.raft的,是应用层的,raft.raft只从中读取数据,log entry的写入由应用层负责。
WAL是Write Ahead Logs的缩写,存储的是log entry记录,即所有写请求的记录。
storage也是存的log entry,只不过是保存在内存中的。
kv db是保存了所有数据的最新值,而log entry是修改数据值的操作记录。
log entry在集群节点之间达成共识之后,log entry会写入WAL文件,也会写入storage,然后会被应用到kv store中,改变kv db中的数据。
Snapshot是kv db在某个log entry被应用后生成的快照,可以根据快照快速回复kv db,而无需从所有的历史log entry依次应用,恢复kv db。
有了上面架构层面的了解,我们从宏观的角度看一下一个写请求被处理的过程。
本文从宏观角度介绍了:
这是Go语言充电站的第 29 期分享。
本文由哈喽比特于4年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/TKt1tXVEKjDo1BovKT-zqg
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。