MrIronHand 2014-11-25
上次我介绍了数据库在分布式领域的一个简单的发展历程,这次我们再针对分布式数据库在技术上的新机遇和挑战,做一个概述。
要讲明白这个问题,那么从一个问题切入是最简单的:
与单机系统相比,分布式系统多了些什么?又少了些什么?
多了的部分:
网络
相信大家与我一样,第一个进入脑中的概念就是“网络”。是的,通过网络,人类第一次认识到,原来不需要把所有的软硬件系统都堆砌到一个大盒子里,通过一套协议,将多台机器链接在一起,原来也是可以完成图灵计算的。
少了的部分:
中心计算节点
如果网络内存在一个中心的计算机,所有请求都必须经过他才能进行计算,那么这个网络本身的最大吞吐量,就只能是这台计算机的最大吞吐量了,这种方式明显的限制了网络的处理能力,因此,分布式系统必须是一个去中心化的系统。
增加了网络,减少了共享,这为分布式系统带来了一些新的机遇,也带来了一些新的挑战。
第一个机遇:按需扩缩,理论上无限的处理能力
因为网络大部分都使用了 ip 协议, ip 协议就像门牌地址号码,这种号码给我们带来的最大便利其实是,只需要遵循统一的门牌号码规范,那么邮差就可以将将邮件准确的送到你的家门口,哪怕你是刚刚建好的新房子。(网络允许你随意增加或减少计算机)
这带来了一个非常重大的机遇,在分布式系统中,我们可能不再需要考虑如何才能把大量的硬件都装在一个大盒子里了。只需要通过网络,就可以实现按需的快速增加或减少计算机,从而实现计算能力的水平扩展。
第二个机遇:高数据安全
然后,因为网络从理论上可以将数据传递到很远的地方,因此,我们突然发现,原来在单机内很难做到的数据高可用,在分布式系统下似乎能够得到解决。
在一台计算机内,就算我们再如何的努力,这台计算机如果被物理毁坏了(比如突发地震,洪水等造成无法恢复性伤害)。那么我们计算机内的数据就只有被迫丢失了。
然而,通过互联网,我们甚至能够将信息保存在地球以外,以至于地球被毁灭后,我们系统内的数据都不会丢失。这对于一个在线服务的系统而言,是个很大的机遇。
第三个机遇:高可用
能够做到高可用的原因其实很简单,因为分布式系统是通过网络将大量计算机链接在一起来完成功能的,而每一台参与到网络内的计算机,都是一台全功能的计算机。因此,哪怕网络内只存在着一台计算机,从理论上来说,他也能完成全部计算,只是速度会稍微有一点影响。
这种系统能够像不死小强一样的可用性,相信是每个程序员的梦想。
挑战
第一个挑战:数据的共享和一致性
因为分布式系统是个去中心化的架构,一台机器的承载能力有限,无法承载海量数据和全部网络中的请求计算量,所以,势必需要将请求分散到大量机器中进行计算,那么这时候,如果有个信息要在多台计算机能进行共享,就会出现难题。
就像我们以前说过的,计算机就是个打字机,当我们要用打字机处理一个文件的时候,其他想看这份文件或者想继续处理这份文件的人只能在外面干等着,系统本身的性能是上不去的。
而这就是共享的最大挑战,如何能够共享一份文件给全世界的人,并允许全世界的人并行的去更新这个文件呢?
第二个挑战:系统运维和管理
如果只需要照顾一台计算机的话,哪怕这台计算机经常出现各种毛病,只要我们采取轮班倒的死盯方案,虽然人累点儿,但总归是能够勉强抗的下来的。
但如果要照顾几千台到几万台的计算机,靠人海战术就必然的搞不定了。而且,因为在网络中的计算机是分批购入的,又都有寿命限制,因此会时不时的坏掉几台,这种情况下,我们能否快速的找到网络中哪些计算机出现了故障,并作出针对性的处理,就成为了一个新的挑战。
原来的非核心矛盾,在新的场景下就成为了核心矛盾
以上就是我们在分布式系统中面对的最常见的机遇与挑战了。
而随着互联网应用与移动互联网应用如雨后春笋般的出现在世人的面前,我们面对的客户从原来的内部几百人,突然的变为了面对全中国的 13 亿用户。 传统老式应用设计和构造方案,原本就不是为了面对广域网用户服务而进行的设计,因此自然就不能匹配新时代对于系统性能,容量的可扩展性要求了。
所以,稍微做一些运营活动,传统架构的天花板效应就立刻凸显出来了。
因为传统软件商在云计算环境下缺少真实的应用场景,只能从理论的角度来认识分布式系统架构和云计算,缺少实战经验,而我们知道,软件系统是一门实践科学,闭门造车出来的系统,面对 13 亿用户的时候自然就只有无可奈何花落去了。
这里面一个最典型的案例应该就是,某传统大型卖场进行的互联网云化改造,因为找错了合作对象,投入了大量时间最后的结果却比较悲剧,令人感叹。
好了,扯远了 ~ 回到分布式数据库原理角度,这一篇我们主要在讲分布式系统的机遇与挑战,您可能会问了,这东西和分布式数据库原理有什么关系呢?
原理是非常大的,因为,分布式数据库是分布式系统中最重要的组成部分啊!
因此,分布式系统中面对的一切机遇和挑战,都一个不少的反应在分布式数据库中。
所以,我也会顺着本篇文章的脉络,来展开我后面的原理介绍,当然,也不会忘记大家对我这系列的最大期待,肯定会结合 DRDS/TDDL 在阿里内六年的实践经验进行介绍的:)
第一个部分:主要讲解分布式数据库如何实现可扩展性的
会从数据分布和按需扩展的角度来对分布式数据库系统如何实现高扩展性进行讲述,并穿插一些 TDDL 面对数据扩展性问题时候的思考和选择。
第二个部分:主要讲解分布式数据库如何实现数据安全不丢失
将从分布式数据库的数据安全维度,阐述分布式系统的数据安全领域。在这方面,无论是 DRDS/TDDL 还是外部的其他 NoSQL 系统,都在尝试各类方式
第三个部分:主要介绍高可用和一致性
这对欢喜冤家是分布式系统内最大的难题,众所周知, CAP 理论是一个已经被证明过的理论,因此,这个问题产生的原因是什么?有哪些权衡点?应该怎么解决这些难点?将在这个部分尝试进行说明。
第四个部分:系统运维
没错,既然分布式系统这么强调运维的健壮性,那么我们就一起来看看,在我们之前的实践中,到底考虑了哪些因素,为什么要考虑这些因素,实际实践起来,又出现了什么问题?
第五个部分:大综合
上面的这些挑战,掰开揉碎讲了一遍,最后我们还需要能够综合起来,看看DRDS/TDDL 的这些年,我们走过了哪些路径,里面有高兴也有悲伤,算作是对我们这套在阿里内使用最为广泛的分布式数据库体系的一次小的总结吧。