【IT168评论】全球系统架构师大会于8月10-12日在深圳万科国际会议中心隆重举行。首先给大家带来分享的是前Facebook数据基础设施团队主管,Qubole创始人,CEO Ashish Thusoo,他主要介绍了大数据架构以及怎么样不断的演进,与其说演进,不如说革命。其中主要包括三个方面的主题:
第一,大数据的需求。当今世界需要大数据,有哪些驱动因素促使我们不同方式考虑大数据?以不同方式处理数据。
第二,技术给我们带来哪些架构上的调整或者权衡。比如说新的技术和传统上90年代的数据技术有哪些变革?架构上做了哪些调整?要哪些优化?不同纬度做权衡的标准。
第三,未来。我们哪些技术问题需要解决的?
他认为:智能移动终端充分发挥了他们的GPS、摄像头和重力感应功能,把人的感官做了延伸。其他的设备也在不断的进化,智能的读表器,身体健康的检测设备等等,这些会产生很多的数据,因此我们需要管理大量的数据,发挥数据的最大价值。
▲前Facebook数据基础设施团队主管,Qubole创始人,CEO Ashish Thusoo
大数据相关的问题正在变得越来越广泛。很多公司都在面对并试图解决海量数据相关的问题。它几乎充斥了我们的耳朵:传感器和移动设备的不断涌现,产生着越来越多的数据。
从根本上说,大数据已经站住脚了,而且正在得到越来越广泛的使用。观察它的演化过程,从2007年开始到现在,应该说它颠覆了很多东西,越来越多的人开始尝试。它可以在以下5个领域产生巨大影响:创造透明度、通过实验来发现需求和增强绩效、细分人群并采取灵活行动、用自动算法代替或者帮助人工决策、创新商业模式产品和服务。
以下是演讲的详细内容:
变革的驱动因素是什么?
我们生活在不断变革的世界中,有三个技术的参数,在大数据方面带来很大的变化:第一,设备。第二,基础设施。第三,应用程序。
以上三点结合在一起,不但快速改变我们的生活,而且变革给我们带来很多的需求,这里讲了三个技术上的驱动因素。
一、设备。手持设备发展过程中,上世纪90年代的手机非常大,不可能随手拿着,放到包里才能带出去,最新的是现在看到的iphone,获得了非常大的变化。比如说PDA或者其他的智能手机,现在有一些重要的能力,以前无法设想的,永远保持与网络联系,可以查询到它的位置。
现在的终端设备拥有非常强劲的功能,可以用GPS、有摄像头,可以进行重力感应,调整现在的温度。手机从感官的角度来讲,把人的感官延伸,这些程序给我们带来很多数据,也让我们想想怎么好好管理这些大数据。
互联性,现在看到的是国际电信联盟下载的材料,是关于全球移动用户的用户数量。2004年的情况,蓝色是密度非常低,在亚洲和非洲地区。黄色密度最高,用的最多是橙色的。在一些不是特别发达的国家,甚至世界各地,手机用户数量越来越多,不仅讲得是互联性,还有带宽,新的无线传输技术,使得手机设备方面的数据传输越来越快,最大的手机传输数据100兆已经不是问题,未来会越来越高,相互联系的能力会越来越强,带宽越来越宽,以及我们说的感应设备等。这种技术上的大融合趋势,能够让我们看到了最后一个应用。所有新的技术要通过应用才能实现。
应用基于云计算
现在看到很多基于云计算的程序,很多应用化计算都是基于“云”的,在90年代关注企业里面有10个人、100人、1000人,现在规模和容量扩大,不仅几千、几万,甚至上百万、上千万,现在设备做得越来越多,联系性越强,设备越强,有更大的带宽,基于云的集中式的数据。
拿数据说话
感应式的设备生产数据,更多的联系性把数据到云端,在云端做些什么呢?这么多的数据怎么运作快速生成的大量数据。大数据意味着很多人一起做很多的事情。要关注大数据的三个特点:大容量、高速度、种类繁多。不止有一些表格、数据,应对非常多的数据。
举一个例子,在容量方面,2011年数字宇宙里面,我们所存储的数据是1.8个ZB,1个ZB相当于100万个GB,2009到2020年中间,数据总数量达到35个ZB。
再来看一看速度,数字形成的速度也让人瞠目结舌。现在的数据来自于知名的互联网应用,推测的数量每天3.4亿,而且数据不是最新的,最近数据增加非常多,另外每分钟上传的视频72小时,每秒290万封邮件,数据生成的速度非常快。另外还有视频、图片、应用、记录等,不仅仅讲得传统意义上的图表,现在还包括各种各样的文件。
现在讲得数据和过去讲得数据不一样,是大容量、高速度、种类繁多的数据。这对系统架构影响非常深远,直接关系到在过去这么多年以来,怎么样向数据不断严谨。回到上世纪90年代,我们关注的是结构性的数据,怎么样数据处理更快。现在的应用越来越繁杂,需要不同的规格以及不同的扩展,因此我们的关注在过去十年里也出现了变化。原来只是关注简单的性能,到现在可扩展性、可应用型。原来只是机械、刚性、结构性的数据,现在已经灵活半结构化的数据。我们讲得是数据结构、数据架构里面颠覆性的变化。
平台成功的标准变化体现在技术上的变化
首先从可扩展性方面,系统怎么样通过演变解决这两个要求,很重要的要求是有一个简单的解决方案来解决复杂的问题,或者简单的方法解决复杂的问题。怎么解决可扩展性呢?我们要有这样一套系统能够处理PD级的数据,每秒操作达到百万级,这也是我们所面临的问题,是可扩展性的要求。简单的方法可以采用分片方法,是很多架构所采用的分而治之的方法。可以把数据问题分成块,不放在同一个系统上,分成几个分片,这是一个很基本的理念,这种方法是所有系统当中所通用的构想,所以接到系统的时候,最核心的一点就是要用分片的设想。
简单的概念,在深入思考的话,有一些其他的复杂问题解决。比如说,一个很基本的分片问题,怎么样把某一条记录导入到不同的分片当中。很多的功能,比如说应该放到某一个分片上,怎么样快速把这条记录放在合适的记录上,确保可用是安全存放的,有很多问题。我们有各种机制解决引导的问题,用的一致性的散列、映射表也来自于这些方法。
其他也有一些应用,比如说一条记录一半放在一边分片,一半放在另外分片,怎么解决?是分布式的传送问题。很多系统以前是分别的传送,来储存不同部分,怎么确保到达不同的系统呢?
今天的系统要有可伸缩性、可扩展性,要用非常高度的简化方法来处理问题。简单的问题就是把记录的两个部分单独的看作独立的两块。这部分记录独立的看作一个部分放入某一个分片,进入这样的分类,简化了数据的分类,存储就加以简化,分片的处理把数据分成不同的部分,分到不同的分片上单独作为一个独立的部分看待。
另外一个复杂的问题,在分片当中,如果有一个分片坏了,这时有一条新的记录,记录往哪放?分片机坏了,不知道往哪放怎么办?如果一个分片坏了当然可以放到其他分片上,可用上减少,并不是减少到零,只是其中一部分坏了而已。如果整个架构坏了就完蛋了,是其中一块坏了。
我们要用很好的方法,就算是一个分片失效了,也要用到该用的分片机上。我们做不同的副本,把分片进行不同副本的存放。有一套记录,两套副本,上帝保佑不要三片全坏就行了。通过复制来解决问题,但是需要有多少个副本呢?数据进来之后应该在副本当中复制多少次呢?要确保记录安全的话,什么时候要重建一个副本呢?或者一个副本失效了,要建立另外一套副本,怎么把记录传送到新的副本当中呢?这里有很多重点,用复制的方法解决问题。同时,这个过程带来新的问题。所以我们应该在系统构建过程中一体化进行考虑。
以前系统往往是在事后考虑问题,现在在系统构建过程中就要设想到这些问题,在技术当中加以解决,这是内在的设计。这里看到很多不同种类的方法解决,有些用一致性的散列或者在一些零片上进行复制或者恢复,当然有不同方案解决的问题,可以用单一的映射表来解决。解决的方法是多种多样的,包括怎么样从一套副本恢复到另一个副本当中。这也是不同架构师的不同方法。但是最基本的一点是设想和思维是一样的,最基本的方法是要加以简化,按照这种思路来设计不同解决方法来解决不同问题。
为什么我称是颠覆式的发展,因为关注点不同,90年代是单片的效能和绩效,比如说IO结构做得最好,怎么减少IO的传送,怎么样设计出一些更加对缓存敏感的算法,这是90年代在系统设计的时候关注的重点,2000年以后有了颠覆性的变化。最基本的角度是考虑可扩展性、可用性,涉及到分片和复制。这也是我们讲到为什么是一种颠覆性的变革。
第二个层面的变化是柔性数据、灵活性以及半结构化
我们解决柔性数据的问题具体体现在:其中一个是我们的数据库并不只是记录和表格,有些数据我们可能是优化专门存放表格、数据和记录的,但是实际上还要考虑这个应用程序到底怎么样构建的。可能大家听过短跑模式,不会坐下来整个架构、整个系统,想到所有的数据、所有的构思再写应用程序,今天写应用程序非常快,快速变化,得到反馈马上调整改变,这个应用程序是不断改变的过程,我们做一些短跑式的模式,使得整个架构、记录的结构不能固定下来,固定下来不能灵活的调整程序,我们希望应用程序变化的时候,不需要改变数据的结构。这也是我们现在要解决的问题。通过现在一些系统和架构解决根本性的问题。
现在要构建这种记录有很多好处,比如说可以得到优化的计划,可以按照我们应用来优化存储的布局,包括阵列、分类、缩影、查找等。可以实现一些好处,这个系统可以带来最优的选择获取数据。可以优化数据存储,不需要把结构性的数据存放在一块,可以单独存放起来,但是有利有弊,取舍是我们优化的速度、优化了它的性能表现,但是有没有优化应用程序的更新呢?如果应用程序的应用发生了改变,数据库能不能跟的上呢?如果应用程序发生改变,数据表加了一列,结构发生调整,使到我们减速,这也是能够重建的缩影。
我们系统要怎么样应对这些挑战,最主要的问题是我们在网上的世界当中,往往在网上操作是很简单的操作,可以设想我们的前提、观点,其实要用我的数据系统,要的很简单,简单的查找、更新,并不需要去过多的担心一些非常复杂的操作,但是大部分的操作是简单操作的话,其实并不需要关注用什么样的执行计划,为什么要去把整个的架构放到某个系统当中,如果有些并不用到这些系统,关注的是应用开发速度。解决这样的诉求,必须要有一种足够的结构性,来满足要求。有足够的结构性来满足快速读取的要求。
简单的方法是把一切的数据分成键和值的关系,所有都围绕这个系统。如果应用程序发生改变,这个也随之对应。就像一个巨大的散列表。我们的操作只需要找到这个键,再看这个键对应的值是多少?再提取出来。只需要优化这一步。听起来很简单,但是要做很多的工作优化这种结构,使到这个结构运行起来很快。比如说有些经过分类的散列表、分类的文件,这样才能优化机制、快速存取、范围查找、快速更新。我过于简化了这个问题。
应用程序希望获得的能力,在更新某一个键的时候,把关联的其他数字一起更新,这是另外一个结构。这个结构要增加一部分,数据系统当中增加标签的一列。不同的系统,有的叫标签,不同的组、不同的名字。在一个服务器当中,可以进行一种关联数据同步的更新。在某几个数字用同一个标签,属于同一类、同一组的更新。最根本的是键、标签和值,这个体系使到我们真正能够响应、优化我们最常用的三种操作:查找、范围查找、更新,这是专门为企业优化的,同时也可以优化应用程序的开发,应用程序开发的时候,也可以应用短跑模式。
刚才讲得这么多对于在线的很需要,但是有没有一些分析性的应用呢?在座的各位知道,我们做分析过程非常复杂,有不同类、不同组、不同分析工具,另外,在数据上做不同数据的转换,才能了解到数据的情况。刚才讲了三类的分析是比较简化,怎么查询、存取等。在简化之余,过程非常复杂,这个方法在分析过程中能不能用得上呢?在分析的时候查询非常复杂,这些工具是否合适?有没有简单的结构解决分析查询的问题。
其实很多应用比较关注这个问题,很多数据系统也关注有没有方法解决分析的问题,其实很简单用简单的技术就可以,就是分类。
接下来看看映射和缩减,可以扩展、可以并行分类
不仅仅把它作为一个处理,而是进行更好的分析,把信息分类出来。比如说拿出一个数据集,可以分成不同的分片和分成,分成三个数据集,有红色、绿色的。我们影射不同的数据集能进行化解。怎么把绿色和红色的剔出来,放在一起。我们可以分类,非常不错。我们的用户可以自己界定所谓的影射函数和化解函数。这样的话对于用户来讲更加灵活了,不仅仅是原来要赞助的特定数据,还可以用其他类型的数据,用影射工具很快影射出来。比如说有图像信息分出来,具体的目标去提取。而且在我们所做的这些工作核心就是我们讲得可以使用并行的分类。这样的话可以把原来复杂的架构变成简单的架构,这种灵活性也是我们现在所要关注的。
除了这些好处之外,还有什么其他优势呢?在数据信息分类之后,出现故障什么问题。比如说分了几个小的数据集,如果出现问题了,怎么办?数据保留下来还是重新再做呢?在一个完全平衡有很多数据的系统里面,重新再做肯定要花很多时间才行。因此在我们的系统里面影射以及化简的过程中,可以随时重启。如果发现影射器里面有些出了问题怎么办?不需要重新启动,只要把有问题的影射器重启就行。
在数据分析过程中,不同地方加入了检查点的功能。其实我们的关注在于首先要把结构变得更加简单、更加灵活,而且有更高的可用性。就像系统还原一样,找到有问题的点重新做一下就行了。原来是中间出现小问题就要重新做,现在不用重新做。原来查询系统没有任何检查点的概念。原来我们讲得系统只是去关注性能。更多关注结构才能优化速度。进入21世纪之后,我们使用短跑的模式,不像我们原来所说的看单纯的性能,在开发构造应用程序出现很多的变化。
前面讲到设备的效率和数据的多样性,在演讲一开始就说过。
接下来看看未来的前景怎么样?往哪些方向走?
这个系统里面有一个非常关键的主题,和其他的基础一样,肯定会让我们和以前的技术分道扬镳。但是,在这里发现不能完全各走各的路,还是要把我们发展建立在这个系统之上。现在不仅是新老交替,在新老交替中,还要进一步融合。我们还需要一些旧的SQL,否则无法做影射,还需要一些相应的语言。刚才讲得这些方面已经做了很多工作,有些是用新的语言,很多用旧的语言。怎么将其他组件组合在一起呢?新的应用程序是独立的东西,自己来用非常好、非常不错,但是如何把新的东西和旧的东西加在一起,或者在新的系统上加入一些其他的组件。现在也在关注其他的情况,现在系统刚刚起步,很少一部分使用,慢慢形成主流之后看更多的结合在一起。
一开始讲到了更多关注可用性、可扩展性,效率讲得不多。如果数据越来越大、规模越来越大,效率也非常重要,怎么样能够有更好的、更高效处理大量的数据。比如说银行交易,把钱存在一个账户转到另外一个账户里面。有些人说,他能够做,但是现在情况来讲,很难把你的钱转到另外一个账户。旧的系统里面关注怎么样优化资金传输的效用。旧的系统做得很不错,新的系统无法比肩旧的系统,无法解决。
现在很多路径里面都有图形,像社交网络里面图形,有时候可以做一阶分析,二阶分析和三阶分析怎么传输出去,这是做得不足的,要解决。
新的系统里面有很多需要解决问题,但是有些解决方案已经浮出水面了。比如新的范式、新的操作界面、新的应用。新的系统为大众所接受必须要跨过的桥梁。标准让更多的人所熟知,或者界面更加简单,让一些新的用户轻松的了解到可用之处。
说到这里想再花点时间讲下面这一点。如果要高速人们了解这些信息的情况,把它部署在一键式全包的方法,通过云来做。现在具有很强的可用性,或者可以用虚拟机来操作,但是如果用虚拟机的话,不清楚到底什么时候突然有问题。现在可以通过云端来去做,通过云端来做可以有效减少采用这些部署系统的复杂程度。只要放到云端可以解决所有的问题。当然,说到这些,可以说是任重而道远,有很多的工作要做,尤其是在分析领域。
Apache就在关注这些问题,怎么按需提供系统满足客户的需求。另外,我们该使用什么结构?原来的可以继承下来,通过改进做得更快,可以直接把系统部署在里面做得更快。现在已经做了一些工作,解决了一些小问题,比如说自动扩展、高速缓存等都可以实现改变。我们讲得大数据还有很多东西期待解决。我们要让系统进入主流系统让更多人所接受。比如说分析师、数据使用者了解,需要很多工作做。
我们可以说刚刚起步,未来还有很长的路要走,非常激动人心的时代就是我们看到在整个应用、基础设施、设备方面有很多很大的变化,这些变化反过来也让我们这些系统架构师反思一下过去做得什么,该采用什么变化,改变我们所做得纬度、改变我们品牌与架构成功的标准,不仅看速度、看灵活性,看短跑模式更快部署、怎么应对更加广泛、大量的用户。