以下内容来自华章微课堂,感谢EMC李三平博士对文字稿的技术审校。
嘉宾
简介
孙宇熙
现任EMC中国研究院院长、卓越研发集团CTO、技术委员会主席,中国电子学会云计算专家委员会专家委员,哈尔滨工业大学计算机与软件学院客座教授。
在EMC集团主要负责大数据、软件定义的数据中心、云计算、超融合架构、高性能计算、高校科研合作等领域的研发、战略合作与创新工作。
具有在硅谷和国内十余年工作和创业的经验:既有在大型跨国公司(微软、Yahoo!)的工作经历,也有过成功的创业经历。在Web2.0、无线网络优化管理、混合云架构、大数据快数据基础架构、软件定义存储等领域有着多年的工作经验、专利及业界的影响力。近年专业著作有:《软件定义的数据中心——技术与实践》、《大数据——战略、技术、实践》等。
清华大学计算机科学与技术系学士,美国SCU计算机工程系硕士。
大家晚上好!我是孙宇熙,非常高兴能来到华章线上课堂。今天晚上跟大家聊一聊大数据时代的程序员生存之道。我主要谈五个方向,一个是大数据所蕴含的价值;接下来,谈一谈大数据的来龙去脉,它的现状跟未来。还有一部分是云计算与大数据。在这个过程当中,会穿插一些我们程序员应该获得的一些技能,最后聊一聊程序员的职业生涯规划。
我们先来看一看大数据时代的催化剂。这里显示催化剂其实有三样:社交媒体、移动互联网和物联网。我们先从社交媒体开始,大家知道从20世纪90年代开始,一直到当下,社交媒体生成了大量的数据,有各种各样的社交媒体,有了社交媒体之后整个数据结构的形式都在发生改变,从原来单一的数据、可以在关系型数据库当中存储的一些数据变成了更加丰富类型的数据,特别是半结构化、类结构化跟非结构化的数据,像各种各样的视频、音频、文档、文件等等,这是催化剂之一,数据量爆发式的增长。
第二个催化剂就是移动互联网。我们知道,苹果跟谷歌分别推出iOS跟Android这两大类设备几乎已经变成了我们所使用的移动设备的主体。它们极大的丰富了数据传输,包括生活当中联网的方式,同时也产生了大量的数据。
大数据时代的第三类催化剂,我们称之为物联网,有人也管它叫工业互联网,它其实是在移动互联网的基础之上的一次延伸。据IDC和Gartner的统计,预计年全球范围内有大概亿,甚至有人预测大概有亿种联网的设备,也就是平均每个人有几十个不同的设备,包括各种各样可穿戴的设备、包括原来移动互联网的一些设备,它们会生成更多类型的数据,而且数据的生成通常以流数据,或者快数据的形式产生。所以,这三大催化剂其实要求我们要有新的大数据的设计的架构,包括设计的理念,然后它要能去对这种丰富的数据类型进行处理。
我们现在来看一看大数据在过去的十年到二十年间整个技术架构的发展趋势。“大数据”这个名词最早被准确地提出是年在硅谷SGI公司的首席科学家。在20世纪90年代,我们见证了整个关系型数据库,包括数据仓库的高速发展,幻灯片2的最左边所示的产品,包括IBM的DB2、Oracle、SAP、开源的MySQL、PostgreSQL,它们是这个时代赫赫有名的关系型数据库,当然也有一些MPP的,后面我们会提到所谓大规模并行处理的数据库架构。
那么,时间往前推进到-年,过去的十年之中出现了两大阵营——Hadoop跟NoSQL。Hadoop非常具有代表性,它的底层是一个Hadoop的分布式的文件系统,上面实际上是MapReduce,虽然雅虎最早推出开源的Hadoop,随后被业界大肆追捧,但雅虎实际上是受到谷歌GFS跟谷歌的MapReduce的启迪,Hadoop是其中一大阵营,非常适合尤其做批处理。
NoSQL是NotonlySQL的简称,也可以理解为它不仅仅是SQL,SQL的强项其实是对结构化数据的处理。如果不仅仅是SQL意味着它可以很大程度上处理更丰富的数据类型,也就是非结构化、半结构化、类结构化的数据,那么就涉及到各种各样的数据库了,有键值数据库Redis、GemFire,宽表类的数据库Cassandra,比如像MongoDB所谓的文档数据库,还有一些所谓的图数据库Neo4j等等。NoSQL的阵营里面的东西也非常丰富,和Hadoop类似,也有大量的开源架构。
我们知道,Hadoop非常适合对海量的数据进行批处理,NoSQL非常适合对数据进行交互性处理。当然,这两个阵营之间也会有一些交叉。但是,通常来说,它们并不擅长实时处理,至少这不是它们最初的设计目标之一。当然我们知道后来Hadoop向前发展,有基于内存的Spark,到后来发展成流数据SparkStreaming等等,NoSQL也是向那个方向发展。还有一点,在20年前早期的关系型数据库当中,很多都符合这种交易处理的一些原则。我们换另外一个纬度看,就是OLAP跟OLTP,即在线分析系统跟在线的事务处理,或者交易处理系统。通常来说,在NoSQL跟Hadoop设计的早期原则当中,它们或者是做OLTP,或者做OLAP,把它们兼而有之也是业界的一个发展趋势,这个时候我们引入了表中的NewSQL,无独有偶,它最早也是由谷歌公司推出的。业界最早把它叫做谷歌Spanner,它在全球范围内,可以在多个数据中心之间实现一个跨数据中心的、能保证数据的可用性、分区容忍性、强一致性,ACID的效果。
之后就是NewSQL的出现,NewSQL可以简单理解为它支持事务和交易处理的强一致性。在这个基础之上,它其实又满足了数据的可用性和分区容忍度。根据CAP理论,一致性、可用性、分区容忍度不能同时满足,但是NewSQL在很大程度上已经颠覆了这一点,最典型的就是谷歌的Spanner,在全球的数据中心之间,可以保证跨数据的可用性、一致性跟高度的分区容忍度。
不过NewSQL这个阵营当中,开源的选择非常少,不论是谷歌Spanner、SAPHANA,还是VoltDB,我们现在已知的是PivotalGemFire是非常有可能开源的。GemFire大家可能感到陌生,大家熟知的订票网站的性能改进很大程度上来自于GemFire。年的春节之后,整个系统从IBM的DB2(跑在小型机上的DB2系统),改为GemFire,用了十对PC服务器,把车票查询的速度提高了大概上千倍左右,也就是所有的查询都会变成秒出,这对业界是非常具有影响力的一件事情,但是很可惜,知道的人非常少。
准确地说,GemFire是一种键值数据库,当然它能处理的数据类型也非常复杂,跟Redis非常类似。Redis早期也被认为是键值数据库,其实它可以处理的东西变得相当相当的复杂。比如,Redis可以根据图片、多媒体的文件来作为它的主键进行哈希搜索,大家知道哈希的运算速度。简单来说,大数据架构技术的发展趋势出现了这几个不同的阵营,Hadoop、NoSQL跟NewSQL,原来老的关系型数据库也并没有死掉,都是在齐头并进。我们常说分久必合、合久必分,它们这些阵营之间其实都有一些向对方去靠拢和融合的一个趋势。换一个纬度说就是OLAP跟OLTP的这些功能在一个系统之间都会出现。
我们再来看一看大数据对我们各行各业的影响,因为这个跟我们的生活息息相关。我们知道,金融行业、互联网行业、电信行业、零售业、能源,包括*府行业,包括医疗行业,这些行业当中多多少少大家都有接触或了解,大数据对于这些行业未来的业务发展趋势将产生重大影响,对于去更贴近客户、了解客户的需求具有非常重要的意义。
我们下面再来看一看大数据所面临的,并且需要解决的问题。我总结了五大问题。大数据的存储是首当其冲的,数据从哪里来,数据存到哪里?之后大数据要如何去管理,再下一步是怎么分析大数据,要分析出什么样的结果,有什么样的目的,大数据分析过程中要应用什么样的工具做这件事情,这就升华出所谓的大数据科学的概念。最后,前面你做的所有事情,最后是为了贴近用户,要贴近结果,这种展现的形式是大数据的引用。
先看一看大数据的存储,存储历程大概可以分为四个阶段。早期的本地存储和直连的存储类型,幻灯片当中就不再体现了。我们说分布式存储,大家可以这么简单理解,就是存储并不直连到主机之上,比如NDAS等,而是分别以文件和块方式存储。分布式存储向下一步发展,发展到什么情况呢?发展到云存储。
云存储其实没有一个真正意义上的行业标准,只是有既定的标准。这就是亚马逊的S3的标准,它是一种对象存储。我们说存储的三大形式,文件类型的存储、块存储,第三大类型就是对象存储,也是最后出现的。存储再往下一步发展是什么样的形式呢?就是软件定义的存储,大家都听说过一个概念,叫做软件定义的数据中心。在软件定义的数据中心当中,第一部分是虚拟化,包括后来的容器技术,以及容器化,这都是对计算的一种虚拟化,带来速度的提高。
软件定义数据中心当中的第二块技术是网络的虚拟化。我们说它三大要素,计算、网络与存储,最后其实被虚拟化,或者被软件来定义的,通过对存储进行虚拟化与软件的定义以获得更高的灵活性,其实这是一个多层抽象的概念。目的是为了能让上层的应用,或用户以更低廉的成本去使用存储,然后更方便地对要存储的数据进行定义。
我们再来看一看大数据管理。我们采用的纬度是SaaS,就是一切以服务的形式去交付。传统情况下,从最底层的网络存储、服务器,一直到之上的虚拟化,再到上层的应用,都需要IT部门用人工的方式来进行各种各样的部署、配置和优化。云服务有三种不同的形式,我们分别叫基础架构即服务(IaaS),还有平台即服务(PaaS),以及软件即服务(SaaS)。这三种方式也是从两边向中间融合的过程。
SaaS类提供的服务其实就是从最底层的硬件,一直到最上层的应用,都是由服务提供商来提供的。比如说人力资源的一些应用,包括CRM、ERP等都是典型的SaaS。另外一个阵营就是IaaS,现在绝大多数公有云的服务提供商其实提供的都是一种IaaS的服务,当然它会向中间,或者会向上做这种融合,什么叫做向上融合?就是现在整个看大数据管理当中都是以一种技术栈的形式,底下是硬件,之上是虚拟化的层,有操作系统、中间件、运行时、数据和应用。
那么,中间出现的就是PaaS,所谓的平台即服务。平台即服务里面有很多不同的阵营,最主要的两大阵营应该是以谷歌为首推出的Kubernetes,缩写K8S,另外就是以VMware、EMC为主推出的CloudFoundry,通常称之为结构性的PaaS。K8S则称为非结构化的PaaS。开源的、创业型的公司比较喜欢K8S,大公司比较喜欢CloudFoundry。
对于程序员来说,其实带来两个很重要的概念。一个概念叫做开发与运维合二为一。传统的IT企业中,开发、测试、运维可能是不同的团队来完成的事情,而在PaaS下,现在可能是集中在一个团队,甚至一个人身上,这对程序员来说其实提出了新的要求。另外一个概念就是叫做CI/CD,它代表持续的集成和持续的交付。
在互联网的时代、大数据的时代,交付与集成的速度变得越来越快,也就是所谓迭代的速度越来越快,它包括自我迭代的速度。从原来的需要6个月(甚至更长时间)才可能做一次软件更新,到现在我们甚至是希望每天都能做更新,或者至少两周做一次更新(比如移动的应用),这对于程序员而言,意味着你要使用新的开发模式、新的工具链、新的软件开发平台,这些东西其实都是PaaS