大数跨境
0
0

分布式架构实践

分布式架构实践 云容灾备份安全治理
2018-07-09
3

1.分布式存储架构

分布式存储架构现阶段有3种模式

 1.1一种是物理存储采用集中式,存储节点采用多实例的方式,如NFS挂载SAN、NAS等等


1.2第二种是带有中央控制器的分布式存储,如luster、moosefs、googlefs等等,一般特征是具备2个角色metadata server和storage node,将文件的元数据(描述数据的数据,如文件位置、大小等等)和数据块文件分开存储

其中metadata server除保存文件的元数据外,还维护存储节点的ip、状态等信息

luster的典型架构

MDS--meatadata server

MDT--metadata target

OSS--obj storage server

OST--obj starage target

其中MDT和OST是可以挂在NAS等中央存储上的;可见,luster借鉴了上面中央存储的模式,无论元数据服务还是节点服务都将服务实例和存储分离,但进化了一步,将元数据和数据块分离

luster系统很好解决了数据分布式存储,,在超级计算领域Lustre应用广泛,如美国LLNL国家实验室计算机系统、我国的天河超级计算机系统均采用Lustre搭建分布式存储系统。Lustre在全球排名前30个超级计算机系统中有15个在使用。

但有一个问题,就是metadata server的SPoF(single point of failure)问题,即单点故障;一旦metadata server挂了,整个集群也就挂了。实际应用中,是有解决方案的,如dell的官网有个pdf,就是采用heart beat和drbd网络raid的方式,启动2个实例,再如和keepalived一起组成故障转移的方案等等,可以自己试试

再来看moosefs架构

moosefs架构和luster很相似,但进化了一步,mater(也就是metadata server)可以有从机备份了,而且可以多个

而且服务实例和存储放在一起,没有像luster,自此服务和数据不离不弃了;其实luster也可以简化成不离不弃模式,moosefs也可以学他搞个后端存储,但随着云计算、追求低成本的趋势,采用SAN这样存储设备就太贵了



1.3第三种分布式存储是去中心化、全对称的架构(non-center or symmetric)

其设计思想是采用一致性哈希consistent hash算法(DHT的一种实现,关于一致性hash具体参考后面的链接)来定位文件在存储节点中的位置,从而取消了metadata server的角色



整个系统只有storage node一个角色,不区分元数据和数据块;

典型系统如sheepdog,但sheepdog是为满足kvm镜像和类EBS块存储而设计的,不是常规的分布式文件系统,架构如下

为了维护存储节点的信息,一般采用P2P技术的totem single ring算法(corosync是一种实现)来维护和更新node路由信息

对称架构有一个问题,采用totem single ring算法的存储节点数量有限,因为node数量超过1000,集群内的通信风暴就会产生(此处更正,应该是环太大,令牌传递效率下降,不会产生通信风暴),效率下降,sheepdog提出了一个解决方案,就是在一致性hash环上做嵌套处理,如图




1.4半对称结构

其实介于1.2metadata server中央控制和1.3全对称的架构之间还有一种,就是把metadata也做成对称结构,我们可以称半对称结构,典型应用如fastdfs,淘宝一大牛fishman写的,主要用作图片存储,可以实现排重存储

看图,tracker cluster就是metadata server的角色,实现了对称架构设计

国内几个大的网站都使用了fastdfs,在实际使用中,发现storage server之间同步数据较慢,一直没仔细研究





2.分布式数据库

分布式数据库一般都基于分布式文件系统实现数据的分片sharding,每中数据库都有自己的应用特性,就不做介绍,列出几个典型的应用,供参考

Google的big table,实现数据的追加存储append,顺序写入快速,不适合随机读的场景

hadoop的HBase

mongodb

hypertable 2010年以前,百度在用,今年infoq的中国qcon,百度的杨栋也讲了百度用hypertable的血泪史

3.分布式应用架构

分布式应用架构涉及具体应用场景,设计上除考虑上面的CAP和C10K等等经典分布式理论,还应根据业务进行权衡。

基本的思路是

3.1在做完需求和模块设计后,要对各模块进行解藕Decoupling

传统的企业应用设计一般是一条操作从头跑到尾(串行系统),拿视频网站的流程距离,传统应用设计是先上传是视频,然后存储,编码,最后发布一条龙

如下图



3.2在进行分布式设计时,先将各模块解藕,通过异步消息通知的方式将各模块链接,如下图



3.3最后,要考虑这个应用的压力承载点在哪,根据用户规模估算各模块的并行数量(如本例中的encode压力大,就增加encode模块的并行系统数量),如下图


以上是分布式系统构建的基本原则和实践步骤,在实际应用中,仍有很多细节要考虑。但有一点要再强调,就是要根据业务来选择各层、各模块的技术,做好业务适用、成本和难度之间的权衡

技术本无好坏,在于适当的使用和积累。


【声明】内容源于网络
0
0
云容灾备份安全治理
分享云灾备规划、实施、运营、备份与恢复、数据安全、数据治理;窥视国内外备份软件与监控软件知识前沿水平线; 越努力,越幸运!
内容 2171
粉丝 0
云容灾备份安全治理 分享云灾备规划、实施、运营、备份与恢复、数据安全、数据治理;窥视国内外备份软件与监控软件知识前沿水平线; 越努力,越幸运!
总阅读3.0k
粉丝0
内容2.2k