要想深入学习HDFS就要先了解其设计思想和架构,这样才能继续深入使用HDFS或者深入研究源代码。懂得了“所以然”才能在实际使用中灵活运用、快速解决遇到的问题。下面这篇博文我们就先从一般的分布式谈起,在宏观上逐步去探究HDFS的设计思想和架构实现。
一.先谈分布式分布式是近几年非常火的技术概念,无论是云计算、大数据还是高并发的互联网架构话题都会频频出现这个词语,特别是这个大谈“大规模”的时代,分布式貌似成了高大上技术的代名词。引的许多刚入行的技术人员趋之若鹜,其实世界上不会有凭空出现的事物,都是慢慢演化的,新事物一定可以找到旧事物的影子。只要打好基础,抓住技术演进的主线,结合实践慢慢积累就可以了。但是话又说回来,分布式系统确实在实现上难度上确实要高于一般的业务系统,门槛也要高一些。
那么我们就先看看“一般的”分布式系统需要解决那些问题、这些问题的通用解决方案和特性。限于篇幅,如要深入了解某个协议和算法请参考相关文献。
1.定义
分布式系统会划分成多个子系统或模块,各自运行在不同的机器上,子系统或模块之间通过网络通信进行协作,实现最终的整体功能。比如分布式操作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。利用多个节点共同协作完成一项或多项具体业务功能的系统就是分布式系统。
举例:SolrCloud
A. 一个solrcloud集群通常有多台solr服务器
B. 每一个solr服务器节点负责存储整个索引库的若干个shard(数据分片)
C. 每一个shard又有多台服务器存放若干个副本互为主备用
D. 索引的建立和查询会在整个集群的各个节点上并发执行
E. SolrCloud集群作为整体对外服务,而其内部细节可对客户端透明
2.问题及方案
1)CAP的权衡
分布式领域有一个非常著名的CAP理论,是由 Eric Brewer 提出的分布式系统中最为重要的理论之一。其定义很好理解,CAP 三个字母分别代表了分布式系统中三个相互矛盾的属性。CAP分别代表Consistency、Availiablity、Tolerance to the partition of network即一致性、可用性、网络分区容忍性。
一致性(Consistency):在CAP理论中的一致性是强一致性,即每个节点上的数据时刻保持一致。
可用性(Availiablity):是指分布式系统在出现异常情况的时候的可用度。
分区容忍性(Tolerance...):是指分布式系统对网络分区的容错度。
CAP 理论指出:无法设计一种分布式协议,使得同时完全具备 CAP 三个属性,即该种协议下的副本始终是强一致性&服务始终是可用的&协议可以容忍任何网络分区异常;分布式系统协议只能在 CAP 这三者间所有折中。
CAP折中的实现可以体现在分布式协议中:
a. Lease 机制牺牲了部分异常情况下的 A,从而获得了完全的 C 与很好的 P。
b. Quorum 机制,即总共有 N 个副本,成功更新 W 个副本则算成功提交,读取时读 R 个副本。这种一般的 Quorum 机制,在 CAP 三大因素中都各做了折中,有一定的 C,有较好的 A,也有较好的 P,是一种较为平衡的分布式协议。
c. 两阶段提交系统具有完全的 C,很不好 A,很不好 P。
d. Paxos 协议具有完全的 C,较好的 A,较好的 P。
2)负载均衡
在某些有多个节点的分布式系统中需要对服务请求进行负载均衡,根据业务需求的不同也可以使用不同的负载均衡算法,例如一致性Hash。
3)高并发