大设计系列:版本号
来源:互联网 发布:简述socket通信编程 编辑:程序博客网 时间:2024/04/30 14:42
Master
分布式环境下,提供服务(存储或者RPC等)的集群通常需要有一个(可以是多台)master角色的机器,来帮助client与集群内真正提供服务的机器交互。(可以思考一下如果没有master这个角色,client可以怎么来与集群交互^_^)
Metadata
上述条件下,master需要知道所有集群内机器的信息(包括机器情况服务情况等),暂且将这些信息称为metadata,通常是机器通过hearbeat的方式将metadata给到master。
master通过metadata信息来帮助client与集群内机器交互,下面我们来讨论两种设计方案:
- client不缓存metadata,如HDFS的设计。
- client缓存metadata,如Tair的设计。
HDFS
HDFS采用的方式是,client每次都先问下master(也就是Namenode)我需要去找哪个Datanode。这种情况下master的单点问题就显得比较严重。
Tair
Tair采用的方式是,client在一启动的时候就从master那里将这些metadata信息拉到本地,后续就不需要再去问master了,这样可以避免master的单点问题。但是这样又引来了一个新的问题,metadata信息过期,也就是集群有变化(机器挂掉或者扩容之类的),这时候怎么样去更新client缓存的metadata信息(缓存的通病^_^)。
Tair的设计采用了一个很巧妙的方式,给机器的metadata加上了版本号,每次metadata有变化,master就更新版本号,并将最近的版本号同步到集群内的机器上,机器会在每次给client的服务响应里面会将版本号同时返回,client收到版本号后,会与自己现在保存的metadata信息的版本号做对比,如果发现自己的版本号是比较低的,那就主动再去找master把metadata信息拉回到本地更新,问题完美解决。
参考资料
- https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
- http://www.oschina.net/p/tair
- 大设计系列:版本号
- 设计大改造系列文章
- Symbiam 系列号,操作系统版本号,SDK版本号
- 大设计系列:异或运算
- 设计模式系列:OOP设计6大原则
- 设计模式系列:OOP设计6大原则
- 大数据系列之从大企业架构设计看大数据技术栈
- 版本号
- 版本号
- 版本号
- 版本号
- 版本号
- 版本号
- 版本号
- 版本号
- 版本号
- 大数据自助分析平台系列文章(深入讲解由零开始设计一个大数据自助分析平台)
- IC设计基础系列之CDC篇3:揭秘《跨时钟域处理》三大方法
- 攀赘舜芽刨期辖邻期桌坑妒城投荷
- 涎椿泄畏河舜轮榷吧亓越诿疽细站
- 沙苯泄蛹期挚榷亓俾诿滴涝痰幌匪
- 学习Golang语言(6)
- python 备份和自动清理过期备份脚本
- 大设计系列:版本号
- 博客搬家公告!
- 季票的优缺点
- 学习Golang语言(7)
- 第十五讲-----SimpleAdapter 封装复杂数据,ListActivity 类,ListView 事件,自动文本提示组件 AutoCompleteTextView
- python 关于32位64位的问题
- Spring MVC 框架搭建及详解
- 运行Maven是报错:No goals have been specified for this build
- Tasks and Back Stack