一个大系统一般都有超过 30 个环节(串行):如果每个环节都做到 99% 的准确率,最终系统的准确率是 74%; 如果每个环节都做到98%的准确率,最终系统的准确率 54%。一个 74% 的系统是可用的(有商业价值的),一个 54% 的系统仅比随机稍好一点,不可用。这就是做大系统的魅力和挑战!
分布式系统架构的实践
1.分布式存储架构
分布式存储架构现阶段有3种模式
<wbr>1.1</wbr>一种是物理存储采用集中式,存储节点采用多实例的方式,如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模块的并行系统数量),如下图
以上是分布式系统构建的基本原则和实践步骤,在实际应用中,仍有很多细节要考虑。但有一点要再强调,就是要根据业务来选择各层、各模块的技术,做好业务适用、成本和难度之间的权衡。
技术本无好坏,在于适当的使用和积累。
参考:
luster<wbr><a target="_blank" href="http://wiki.whamcloud.com/display/PUB/Wiki+Front+Page" style="text-decoration:none; color:rgb(79,160,0)">http://wiki.whamcloud.com/display/PUB/Wiki+Front+Page</a></wbr>
一致性hash<wbr><a target="_blank" href="http://baike.baidu.com/view/1588037.htm" style="text-decoration:none; color:rgb(79,160,0)">http://baike.baidu.com/view/1588037.htm</a><wbr>&<wbr><a target="_blank" href="http://stblog.baidu-tech.com/?p=42" style="text-decoration:none; color:rgb(79,160,0)">http://stblog.baidu-tech.com/?p=42</a></wbr></wbr></wbr>
fastdfs<wbr><a target="_blank" href="http://code.google.com/p/fastdfs/wiki/Overview" style="text-decoration:none; color:rgb(79,160,0)">http://code.google.com/p/fastdfs/wiki/Overview</a></wbr>
相关推荐
对于想要深入了解分布式系统架构的设计者和开发者来说,这是一本非常有价值的参考书。通过学习本书,不仅可以获得理论知识,还能了解业界的最佳实践,从而更好地应对实际工作中遇到的各种挑战。
《人人都是架构师:分布式系统架构落地与瓶颈突破》是一本深入探讨IT系统架构的书籍,旨在帮助读者理解和掌握分布式系统的设计与优化。书中详细阐述了如何从传统的单体架构过渡到分布式架构,并解决在这一过程中可能...
无论是对于刚接触分布式系统的初学者还是已经有实践经验的技术人员来说,都是一本非常有价值的参考书籍。通过学习本书,读者可以更好地理解分布式架构的核心思想,并将其应用于实际项目中,解决复杂系统设计中的难题...
总的来说,《大型分布式网站架构设计与实践》是一本全面解析分布式系统设计的宝典,它不仅介绍了各种核心技术,还分享了实际项目中的经验教训,对于想要提升分布式架构设计能力的IT从业者来说,具有极高的参考价值。...
### 分布式系统架构经典资料知识点详述 #### 基础理论 ##### CAP定理 CAP定理是分布式系统设计领域中一个极其重要的概念,它揭示了在分布式环境中一致性和可用性之间的权衡关系。根据CAP定理,任何分布式系统都...
从给定的信息来看,本文档将重点...通过对上述内容的学习,我们不仅能够了解到构建此类系统的基本思路,还能掌握一些关键技术和最佳实践。未来,随着技术的不断进步和发展,分布式网站架构将会面临更多新的挑战和机遇。
《大型分布式网站架构设计与实践》是一本深入探讨如何构建高效、可扩展的大型...通过学习,读者不仅可以理解分布式架构的基本原理,还能掌握如何根据具体业务场景设计和优化系统架构,从而应对不断变化的互联网挑战。
CAP理论指出,分布式系统无法同时满足一致性、可用性和分区容忍性这三个基本属性。因此,我们需要根据业务需求选择合适的一致性模型,例如强一致性和最终一致性。此外,分布式事务处理也是一个挑战,常见的解决方案...
在互联网行业中,随着用户量的急剧增长和业务需求的复杂化,传统的单体架构已无法满足需求,分布式系统成为了主流。本书主要涵盖了以下几个核心知识点: 1. 分布式系统基础:介绍分布式系统的概念、特点和挑战,如...
在当今互联网行业中,随着用户数量的急剧增长和业务复杂度的不断提升,传统的单体架构已无法满足需求,因此,转向分布式系统成为必然选择。本章节将依据书中的内容,详细阐述分布式网站架构设计的关键知识点。 1. ...
首先,分布式系统的核心原则包括:容错性、透明性、一致性、可扩展性和高效性。容错性意味着系统能够在部分节点失效的情况下仍能正常运行;透明性则要求用户不感知系统的分布式特性;一致性涉及到多个副本间数据的...
针对软件复用的需求,分布式系统架构设计可以有效地扩展和复用软件系统。在实际案例中,例如某学校信息管理系统的开发,通过采用B/S架构风格,可以建立起包含多种功能的校园共享资源库,不仅涵盖学生档案管理,还能...
本书详细阐述了从概念到实施,从理论到实战的分布式系统设计原则和最佳实践。 分布式系统是通过网络连接的多台计算机协同工作,共同完成一个任务。这种架构的关键在于如何有效地分解任务、管理数据一致性、处理故障...
以上只是大规模分布式系统架构与设计的一些基本概念和关键技术点。在实际项目中,还需要根据业务需求、团队能力和资源来灵活选择和定制方案。通过学习和实践,我们可以更好地理解和应对分布式系统的挑战,构建出高效...
因此,分布式系统架构应运而生,并逐渐成为构建大型网站的基础。本文将深入探讨大型分布式网站架构的设计原则与最佳实践,帮助读者更好地理解和应用这一复杂但至关重要的技术领域。 #### 一、分布式系统概述 ...
CAP理论指出,在一个分布式系统中,Consistency(一致性)、Availability(可用性)和Partition tolerance(分区容忍性)这三个特性不可能同时完全满足,最多只能同时满足其中两项。BASE理论则是对ACID(原子性、...
6. **数据一致性**:分布式事务处理和CAP定理是分布式系统中的难题。ACID特性在分布式环境中可能难以保证,需要理解最终一致性的概念,以及如何使用2PC、TCC、Saga等补偿事务策略。 7. **容错与故障恢复**:断路器...