【时间】2016年3月3日(周四)晚20:00-21:00 【地点】华章微课堂 【嘉宾】孙宇熙 【主题】大数据时代程序员生存之道 以下内容来自华章微课堂,感谢EMC李三平博士对文字稿的技术审校。如有转载,请注明出处。· 语音 Part 1 语音 Part 2 第二段语音请点击阅读原文收听 嘉宾 简介 孙宇熙 现任EMC中国研究院院长、卓越研发集团CTO、技术委员会主席,中国电子学会云计算专家委员会专家委员,哈尔滨工业大学计算机与软件学院客座教授。 在EMC集团主要负责大数据、软件定义的数据中心、云计算、超融合架构、高性能计算、高校科研合作等领域的研发、战略合作与创新工作。 具有在硅谷和国内十余年工作和创业的经验:既有在大型跨国公司(微软、Yahoo!)的工作经历,也有过成功的创业经历。在Web2.0、无线网络优化管理、混合云架构、大数据快数据基础架构、软件定义存储等领域有着多年的工作经验、专利及业界的影响力。近年专业著作有:《软件定义的数据中心——技术与实践》、《大数据——战略、技术、实践》等。 清华大学计算机科学与技术系学士,美国SCU计算机工程系硕士。 >>>>>>>>>> 大家晚上好!我是孙宇熙,非常高兴能来到华章线上课堂。今天晚上跟大家聊一聊大数据时代的程序员生存之道。我主要谈五个方向,一个是大数据所蕴含的价值;接下来,谈一谈大数据的来龙去脉,它的现状跟未来。还有一部分是云计算与大数据。在这个过程当中,会穿插一些我们程序员应该获得的一些技能,最后聊一聊程序员的职业生涯规划。 我们先来看一看大数据时代的催化剂。这里显示催化剂其实有三样:社交媒体、移动互联网和物联网。我们先从社交媒体开始,大家知道从20世纪90年代开始,一直到当下,社交媒体生成了大量的数据,有各种各样的社交媒体,有了社交媒体之后整个数据结构的形式都在发生改变,从原来单一的数据、可以在关系 型数据库当中存储的一些数据变成了更加丰富类型的数据,特别是半结构化、类结构化跟非结构化的数据,像各种各样的视频、音频、文档、文件等等,这是催化剂之一,数据量爆发式的增长。
大数据时代的第三类催化剂,我们称之为物联网,有人也管它叫工业互联网,它其实是在移动互联网的基础之上的一次延伸。据IDC和Gartner的统计,预计2020年全球范围内有大概300亿,甚至有人预测大概有2000亿 种联网的设备,也就是平均每个人有几十个不同的设备,包括各种各样可穿戴的设备、包括原来移动互联网的一些设备,它们会生成更多类型的数据,而且数据的生成通常以流数据,或者快数据的形式产生。所以,这三大催化剂其实要求我们要有新的大数据的设计的架构,包括设计的理念,然后它要能去对这种丰富的数据类型进行处理。 我们现在来看一看大数据在过去的十年到二十年间整个技术架构的发展趋势。“大数据”这个名词最早被准确地提出是1998年在硅谷SGI公司的首席科学家。在20世纪90年代,我们见证了整个关系型数据库,包括数据仓库的高速发展,幻灯片2的最左边所示的产品,包括IBM的DB2、Oracle、SAP、开源的MySQL、PostgreSQL,它们是这个时代赫赫有名的关系型数据库,当然也有一些MPP的,后面我们会提到所谓大规模并行处理的数据库架构。
NoSQL是Notonly SQL的简称,也可以理解为它不仅仅是SQL,SQL的强项其实是对结构化数据的处理。如果不仅仅是SQL意味着它可以很大程度上处理更丰富的数据类型,也就是非结构化、半结构化、类结构化的数据,那么就涉及到各种各样的数据库了,有键值数据库Redis、GemFire,宽表类的数据库Cassandra,比如像MongoDB所谓的文档数据库,还有一些所谓的图数据库Neo4j等等。NoSQL的阵营里面的东西也非常丰富,和Hadoop类似,也有大量的开源架构。 我们知道,Hadoop非常适合对海量的数据进行批处理,NoSQL非常适合对数据进行交互性处理。当然,这两个阵营之间也会有一些交叉。但是,通常来说,它们并不擅长实时处理,至少这不是它们最初的设计目标之一。当然我们知道后来Hadoop向前发展,有基于内存的Spark,到后来发展成流数据Spark Streaming等等,NoSQL也是向那个方向发展。还有一点,在20年前早期的关系型数据库当中,很多都符合这种交易处理的一些原则。我们换另外一个纬度看,就是OLAP跟OLTP,即在线分析系统跟在线的事务处理,或者交易处理系统。通常来说,在NoSQL跟Hadoop设计的早期原则当中,它们或者是做OLTP,或者做OLAP,把它们兼而有之也是业界的一个发展趋势,这个时候我们引入了表中的NewSQL,无独有偶,它最早也是由谷歌公司推出的。业界最早把它叫做谷歌Spanner,它在全球范围内,可以在多个数据中心之间实现一个跨数据中心的、能保证数据的可用性、分区容忍性、强一致性,ACID的效果。 之后就是NewSQL的出现,NewSQL可以简单理解为它支持事务和交易处理的强一致性。在这个基础之上,它其实又满足了数据的可用性和分区容忍度。根据CAP理论,一致性、可用性、分区容忍度不能同时满足,但是NewSQL在很大程度上已经颠覆了这一点,最典型的就是谷歌的Spanner,在全球的数据中心之间,可以保证跨数据的可用性、一致性跟高度的分区容忍度。 不过NewSQL这个阵营当中,开源的选择非常少,不论是谷歌 Spanner、SAP HANA,还是VoltDB,我们现在已知的是Pivotal GemFire是非常有可能开源的。GemFire大家可能感到陌生,大家熟知的12306订票网站的性能改进很大程度上来自于GemFire。2013年的春节之后,12306整个系统从IBM的DB2(跑在小型机上的DB2系统),改为GemFire,用了十对PC服务器,把车票查询的速度提高了大概上千倍左右,也就是所有的查询都会变成秒出,这对业界是非常具有影响力的一件事情,但是很可惜,知道的人非常少。 准确地说,GemFire是一种键值数据库,当然它能处理的数据类型也非常复杂,跟Redis非常类似。Redis早期也被认为是键值数据库,其实它可以处理的东西变得相当相当的复杂。比如,Redis可以根据图片、多媒体的文件来作为它的主键进行哈希搜索,大家知道哈希的运算速度。简单来说,大数据架构技术的发展趋势出现了这几个不同的阵营,Hadoop、NoSQL跟NewSQL,原来老的关系型数据库也并没有死掉,都是在齐头并进。我们常说分久必合、合久必分,它们这些阵营之间其实都有一些向对方去靠拢和融合的一个趋势。换一个纬度说就是OLAP跟OLTP的这些功能在一个系统之间都会出现。
云存储其实没有一个真正意义上的行业标准,只是有既定的标准。这就是亚马逊的S3的 标准,它是一种对象存储。我们说存储的三大形式,文件类型的存储、块存储,第三大类型就是对象存储,也是最后出现的。存储再往下一步发展是什么样的形式 呢?就是软件定义的存储,大家都听说过一个概念,叫做软件定义的数据中心。在软件定义的数据中心当中,第一部分是虚拟化,包括后来的容器技术,以及容器化,这都是对计算的一种虚拟化,带来速度的提高。 软件定义数据中心当中的第二块技术是网络的虚拟化。我们说它三大要素,计算、网络与存储,最后其实被虚拟化,或者被软件来定义的,通过对存储进行虚拟化与 软件的定义以获得更高的灵活性,其实这是一个多层抽象的概念。目的是为了能让上层的应用,或用户以更低廉的成本去使用存储,然后更方便地对要存储的数据进行定义。
SaaS类提供的服务其实就是从最底层的硬件,一直到最上层的应用,都是由服务提供商来提供的。比如说人力资源的一些应用,包括CRM、ERP等都是典型的SaaS。另外一个阵营就是IaaS,现在绝大多数公有云的服务提供商其实提供的都是一种IaaS的服务,当然它会向中间,或者会向上做这种融合,什么叫做向上融合?就是现在整个看大数据管理当中都是以一种技术栈的形式,底下是硬件,之上是虚拟化的层,有操作系统、中间件、运行时、数据和应用。 那么,中间出现的就是PaaS,所谓的平台即服务。平台即服务里面有很多不同的阵营,最主要的两大阵营应该是以谷歌为首推出的Kubernetes,缩写K8S,另外就是以VMware、EMC为主推出的Cloud Foundry,通常称之为结构性的PaaS。K8S则称为非结构化的PaaS。开源的、创业型的公司比较喜欢K8S,大公司比较喜欢Cloud Foundry。 对于程序员来说,其实带来两个很重要的概念。一个概念叫做开发与运维合二为一。传统的IT企业中,开发、测试、运维可能是不同的团队来完成的事情,而在PaaS下,现在可能是集中在一个团队,甚至一个人身上,这对程序员来说其实提出了新的要求。另外一个概念就是叫做CI/CD,它代表持续的集成和持续的交付。 在互联网的时代、大数据的时代,交付与集成的速度变得越来越快,也就是所谓迭代的速度越来越快,它包括自我迭代的速度。从原来的需要6个月(甚至更长时间)才可能做一次软件更新,到现在我们甚至是希望每天都能做更新,或者至少两周做一次更新(比如移动的应用),这对于程序员而言,意味着你要使用新的开发模式、新的工具链、新的软件开发平台,这些东西其实都是PaaS关注的。所以,我们说SaaS是非常高层的一个东西,最终交付的是完整应用。IaaS其实和底层的很多硬件、很多底层的运行时操作系统、虚拟化的技术去打交道。我认为在相当长一段时间内,PaaS是程序员最需要关注的。
我们现在再来聊一聊大数据科学。这张图大家可能没那么熟悉。我们先说一下在大数据处理的过程当中,随着数据量变得越来越大,数据的流动性,即数据产生的速率越来越高,我们经历了什么样的阶段呢?其实是三大阶段,20世纪90年代是商业智能的时代,BI的时代,那个时候我们做的工作是什么?那个时候做的主要可以概括为“后知后觉”。这时,数据已经产生了,也许是去年产生的,也许是上个月产生的,也许是昨天产生的,总之我们没有能力做实时的数据分析。 从“后知后觉”向前发展我们称之为“因地制宜”,就是对数据以近实时,或者实时的速度和能力处理大量的数据。再往下发展我们认为你可以有一种“未卜先知”的能力,当我们使用了机器学习和深度学习,当我们使用这些复杂算法和统计模型的时候,通过对现有数据的分析,能判断未来会发生什么,这是非常具有价值的。我们看到,整个大数据科学的发展,引发了一种新的职位。 《哈佛商业周刊》在前几年的时候提出了大数据科学家的说法。数据科学家是21世纪最性感的一个职业。大数据科学家和30年前开始出现的数据分析师,他们有什么本质的区别呢?我们认为大数据科学家是具有多种能力的人才。大家看PPT右面的三个圆,同心圆交汇的那部分就是大数据科学家应具有的能力。最基础的能力是“黑客”的能力,即强大的编程能力,所有的程序员都应该具备这个能力。如果大家要往这个方向转变,需要有数学和数理统计的知识。 最底下的蓝色的圆是行业知识,大数据科学家不仅要有编程的能力、数理统计能力,还需要有行业的知识。无论你进入的是医疗行业、电力行业或者是金融行业,都 需要去了解行业所具有的特点。如果大家对大数据科学家职位非常感兴趣,我对大家的建议是要进入到一个行业当中,了解它的行业的发展和商业运行的机制,再结合你的数理统计跟编程能力,我相信大家会有很好的发展。
我们现在直接看下一页——第三平台的引用,其实指的就是互联网时代、物联网时代的应用,它的一个核心的特点是MSA,也就是微服务架构。从PPT右边的部分大家能看到,微服务架构其实也是现在非常火爆的一个领域,大家如果要是希望深入了解,可以搜索相关的资料。 云应用的12要素是Heroku的一个共同创始人最早提出的,微服务架构的12个特征几乎已经成为行业的一个圣经,所有人都会去引用,大家可以到网上查一查。还有自服务的敏捷架构,指的就是PaaS,我们说PaaS提供了敏捷的架构,他让程序员、用户可以自己定制服务。还有一个第三平台引用,MSA有一个很大的特点就是基于API的协作,也就是说,传统的应用当中,其实每一个应用都是独享资源/独占资源,应用之间以程序调用的方式交互,如果改变一个程序,整个应用都需要下线。 基于微服务架构,就是把复杂的应用程序拆分为不同的服务,这些服务之间以API作为交互的接口。还有一点需要说明,在大数据、云计算的时代,做架构/应用的设计时有一个理念叫面向故障的设计。什么叫做面向故障的设计,其实指的是你的系统当中要有足够多的冗余。最典型的例子就是Netflix,Netflix所有的基础机构都跑在亚马逊的云上。 Netflix设计了一套Chaos Monkey,相当于随机在亚马逊的云上,在Netflix的架构之上,它去破坏掉一些已有的应用,已有的服务,让已有的基础架构,比如网络、存储,或者一些CPU去下线,以此来测试整个系统的健壮性。这在第三平台的应用和微服务的体系结构当中其实是非常有意义的。 我们看一看大数据的现状。右面这张图还是比较关键的。我们看到,第三平台应用发展和增长的速度非常高,是第二平台的10倍。但是,如果看应用的绝对数量,其实还是第二平台更高。如果大家已经在第二平台上工作,比如你从事的是Oracle、Java的工作,不必慌张,可以借鉴学习第三平台,但是,第三平台并不会在短期之内完全取代第二平台,因为很多公司就是因为过于激进向第三平台迁移,造成了业务的反复,这也是得不偿失的。 做一个小小的总结,云计算到今天发展了十年,改变了IT的形态、IT交付的方式。那么,大数据改变了什么?大数据改变了我们的业务、应用和管理方式,大数据是在云计算时代最重要的领域。
我们说开源的发展欣欣向荣。它也代表至少在相当长一段时间里开源技术会对程序员技能的帮助非常之大。我的建议是大家更多的去关注开源的技术。
程序员的另外一个发展方向就是管人,变成People Manager,很多程序员都愿意往这个方向作为尝试,我觉得这要看你个人的性格与兴趣。如果你非常愿意跟人打交道,非常关注内心感受和需求,我觉得你比较适合去做Manager,一步步走向管理岗位。如果你在技术上有长期的、执着的关注与发展,那么不妨更多地往构架师、系统构架师方向去培养自己。 无论是做IC,还是做Manager,大家都可以根据的自身的需求、诉求,包括你自己的意愿来做出一个明智的选择。但是无论怎么做,我们对新技术的关注是不变的。我们今天做这个分享,也是希望大家能对这些新兴的大数据的技术和它的来龙去脉有一个基本的了解。 提问1:程序员除了技术方面的储备,还需要哪些软技能? 孙宇熙:沟通的技能非常重要!无论是口头、书面还是演讲、展示、说服别人、甚至辩论的技能... 提问2:您在招聘程序员时,最关注他的哪些方面? 孙宇熙:靠谱就行 - 英雄不问出身,胆大、心细、上手快(学习能力强)、并行处理问题能力 - 一个人身上很难都汇集全了,但是碰上了一定要拿下。 提问3:作为一个大数据程序员,非要学习精通J2EE吗,不学习J2EE能走多远? 孙宇熙:这个问题其实非常有趣,Java从1994年出现到现在已经20多年了,即便是大数据的发展也没有抛下Java,它的市场份额始终雄居榜首。我个人这么认为,大数据其实有不同的门类和派别,Java只是其中一种,我得承认它是最流行的语言之一,还有比如Python, R语言、Go语言等等,还包括不同的处理框架,比如MadLib之类,如果你有兴趣、有精力,尝试了解熟悉或者上手实践Java是有意义的,如果你已经在大数据领域当中是一个高手,其实没有必要再非要去再学Java。 提问4:哪方面的统计技能在大数据时代比较需要? 孙宇熙:我应该换个角度回答这个问题,如果你是学统计学或者精算出身,其实你要去转行做大数据并不是很难。我认为你已经具有了前面所说的三个元当中的数理统计能力,你需要从基础的编程开始,至少熟悉或者了解一种编程语言,90后的同学都喜欢Python,早期可能学第一门语言很吃力,需要几个月的时间,但是我可以告诉大家,在我们研究院,我们一些同学触类旁通学一门新的语言大概就是半个下午,真正精通大概要两个星期,这取决于精通到什么程度,一边查着手册,一边学一种更为复杂的应用,也算是一种精通。 提问5:前面讲的都是面向工科背景(程序员、码农),而对于文科背景的,如何在大数据的时代分一杯羹?数据科学家是21世纪最性感的工作,文科生也可以性感一把吗? 孙宇熙:这个问题是关于文科生是不是也可以进入大数据这个行业,如果用开玩笑的方法说,我觉得文科生至少可以做现在新兴的一种职位叫做程序员鼓励师,文科同 学可以考虑一下这方面发展的机会,当然这纯属开玩笑。我认为文科的同学虽然缺少一些数理统计跟编程的知识,但是行业经验依然非常重要。举个简单例子,医疗行业的医生,取决于医生算理工生,还是文科生,我认为医生算个半文科生,医疗背景的专家,在一个公司当中,需要和大数据的程序员一起来工作,才能实现医疗 大数据的功能。这其实可以认为是一种文理结合。 提问6:作为高校老师,选用什么样的教材可以让学生能够讲练一体地学习这些大数据方面的知识,能否给一些好的学习资料? 孙宇熙:我要回答一下这位老师的这个问题。可能我的建议会有一点点偏颇,我觉得无论是云计算,还是大数据的发展,其实工业界在这个时代是领先于学术界的。所以说,我建议去参考一下工业界相关的资料和书籍。我的同事两年前曾经写过的一本《大数据——战略、技术与实践》,我觉得是一个非常好的科普,或者大数据进阶的书籍,我觉得也适合作为高校教材。 提问7:如何进入大数据这个行业? 孙宇熙:其实随着云计算跟大数据的深入人心,它其实改变的、颠覆的是所有行业,是我们生活当中所有的角落。还是回到三个圆的问题,我们说你要有一些基础的编 程经验,要有行业知识,要有数理统计知识,做好这些准备,我觉得进入大数据行业是一件水到渠成的事情,只是时间问题而已。 孙宇熙博士关于大数据时代程序员应具备的技术技能,以及程序员成长的更多建议和感悟,欢迎关注他的新作《程序员生存手册:面试篇》 相关图书推荐 我们将为大家提供与大数据相关的最新技术和资讯。 |
|