腾讯云首席架构师黄希彤:云时代的编程模式

2016-05-13 21:39:42

5月13日-15日,由全球最大中文IT社区CSDN主办的“2016中国云计算技术大会”(Cloud Computing Technology Conference 2016,简称CCTC 2016)在北京举行。本次大会以“技术与应用、趋势与实践”为主题,聚焦最纯粹的技术干货分享,和最接地气的深度行业案例实践,汇聚国内外顶尖技术专家,共论最新的云计算技术实践与发展趋势。腾讯云首席架构师黄希彤带来的分享是《云时代的编程模式》。

腾讯云首席架构师 黄希彤

                                                          腾讯云首席架构师 黄希彤

以下为演讲实录:

大家好,我是来自腾讯云的黄希彤,我最早是CSDN论坛上面一个小开发,今天来到CSDN这样一个大会上面的时,有一种回娘家的感觉。在此我更想不是以一个腾讯人来打广告的方式,而是以开发者的身份跟大家聊一下关于开发的事情。

今天要聊的题目会有一点大,先从云时代前的编程模式讲起,最早编程是用机器码,人的大脑不像电脑,无法处理0101;后来汇编语言还是太费解,又出现了高级语言;然后因为我们需要更加接近人类语言的方式描述问题,开始出现结构化编程或者模块化编程的方式;但我们要面对的问题还是太复杂,所以就需要把他切割成小问题,即模块化;模块化出现之后,我们又开始追求高内聚低耦合,因人脑仍然没有办法思考太多的模块之间错综复杂的关系,所以需要高内聚低耦合,分层次的看待这些问题;但就算把这些功能都充分的去模块化、高内聚低耦合,发现数据流还是太复杂了,所以需要把数据也给高内聚低耦合,这个时候我们开始去做面向对象的编程,当面向一个对象的时候编程就会比较高效。面向对象就是帮助我们把数据对数据的操作分装到模块里面,同时提供新的思考问题的方式,这样子我们本来只是比较简单的大脑,居然一下子就可以驾驭非常复杂的业务逻辑,做很庞大的软件系统。

人类是不会满足的,永远都试图驾驭更大更复杂的系统,目前我们发展出了23种设计模式,发展出CS、BS、MVC、MVP各种各样神奇的架构模式之后,开始用这些概念“吵架”,或者做成面试题。整个发展的路线很明显的趋势是:不断地追求更好的高内聚低耦合。相信可预见的未来仍然会继续去寻找更好的一个高内聚低耦合的编程模式,我们总是在追求更好的可重用性,尽量地减少重复的工作。但最重要的一个本质化的趋势是,我们总是试图追求一个更容易被理解的编程模式。近几年大家都在讨论微服务,朋友圈经常被各种微服务实践刷屏,但是我并不完全认同大家讲的微服务的实践,在我看来这些微服务的实践是各种各样的新的技术名词的堆砌,不应该讲到微服务就想怎样去实现分几层架构,有没有什么高端大气上档次的技术和运用,能不能够快速开发持续交付等。

微服务应该是:面对系统的时候,能不能用很多重复自治的子系统来完成。这些子系统应该可以独立于大系统独立存在,每一个子系统应该可以管理好自己、保证自己是健壮的、可处理好异常情况、面对压力时候扩容负载均衡、没有压力时应该缩容。同时子系统无需担心被用,被越多的使用方使用,越说明该子系统有很好的可重用性,使用量越大越说明可能会产生规模效应,那就可用更低的平均成本来提供更好的服务。

讨论微服务时,之前我们仅仅是在讨论一个系统怎么被拆成几个微服务,然后再用新形式来做新的系统。但这样做与以前做的模块化编程毫无区别。在云时代之前,本人是做QQ空间,做了10年,那时候也有很多类似于今天微服务在讲的这些,其中有独立的相册服务、留言板服务等等。但我不认为是真正在云时代讲的微服务,因为从未尝试过能不能把QQ空间的留言板拿出来独立于QQ空间。在云的时代我们需要的是一种编程模式:原来设计的系统可以拆分成几个通用的微服务,进而再将其变成一种云服务,不但原来的系统可以使用它,而且微服务在其他有类似需求的系统都可以重用,不只是我的项目,不只是我的公司的效率会得到提升,而是所有需要这个能力的项目都可以从中获益。未来的软件开发才有可能像今天的实体制造业一样,在全球范围内进行充分地分工合作,然后最大限度的提高人类的生产效率,而不仅只是我今天开发的项目的生产效率。

举一个制造业的例子,大家都知道中国一年生产400亿支圆珠笔却造不出圆珠笔的笔珠,就有人说这是中国作为一个制笔大国的悲哀。今年在总理的关怀下有关部门拨了六千万去研制这个小球怎么做,真的做出来了,这从打破市场垄断格局上面可能是有道理的,但是抛开国家主义,全球分工角度看,圆珠笔的笔珠其他很多国家都不造,还有很多东西中国造美国不造,全球只有一个国家甚至只有一家工厂可以生产,其他的国家就不需要造,这不就是微服务的理想境界吗?现在需要开发一个新系统,和开一个新的圆珠笔厂一样,把圆珠笔的设计分成几个模块设计生产每一个组件,这不一定是有必要的,可能我们的创新点是在于这个笔的外形或者把这个笔头伸进来缩进去的节能系统的设计,如果这个系统设计的特别好,在其的基础上去设计更好的圆珠笔,只要跟我购买这个设计专利,然后授权合法的使用,我就不会吃亏;与此类似,今天如果要开发一个社交产品,结构与创新点就是新的社交形态,但是要做社交系统的时,需要的一个笔珠可能就是图片上传、下载、裁减、缩放甚至人脸识别这样的能力,这些我们都可以做,因为我们自己是码农。如果产品形态真的很创新,很多用户喜欢你的系统的时候,你的笔珠反过来就有可能成为制约你发展的命门,很多人下载图片的时候你的系统架构可能会出问题,甚至有可能你用了这样的一个处理图片,然后前两天被黑客脱库,中国有些公司已经把这个打造的无比精致,还把这个服务变成云服务开放出来,那我们为什么非要自己去造这么一个笔珠呢?

回到云时代的编程模式上面,在云时代基于微服务的设计理念开发软件,首先要考虑的是有没有一个现成优秀的云服务可以作为一个系统需要的微服务,直接可用,比如刚刚讲的图片上传、下载、裁剪、缩放等功能;如果没有,那系统需要的服务,把它开发出来有没有可能变成一个通用的服务,然后开放出去,这样的话除了有可能去交付系统之外,还可能通过售卖我的微服务获利,其他相同的需求的开发者也可以用很低的成本去跟我购买这个笔珠去造他自己的圆珠笔。这个社会的软件开发效率因此也就可以得到提升,创新的成本也就可以得到降低。但这个开发出来售卖的微服务应该是充分自治的,很多人使用的时候可以自己扩容,很少人使用的时候应该只使用很少的计算资源,所以很明显,它应该运行在云上面。

把它独立成一个充分自治的服务之后,可以在交付系统之外的其他系统上存活,去发挥价值,来为我们带来新的机会的。

总结,软件开发历史上走过了结构化、面向对象,还有各种各样的开发模式,这些所有的发展模式共同的发展方向是越来越高的高内聚低耦合,越来越好的可重用性,越来越容易被我们的大脑理解。在云时代,微服务是符合这三个大方向的全新软件开发模式,所以个人认为下一代流行的软件开发模式应该就是微服务。但是我不认为微服务应该是在目前经常做的在一个大系统里面用微服务的思想去架构设计开发完成大的系统,否则开发出来只是对我们的系统有用。微服务不是原来的组件换个面目出现,它应该被设计成为跟使用者无关的,一个微服务设计出来之后应该追求被更多的项目、更多的公司重用;甚至在与我们基于微服务架构设计出来大的系统消亡之后,还可以继续的为更多的系统发光发热,不会跟着大的系统一起死掉。

未来我们基于微服务开发的软件系统交付后,这些微服务不但有可能被更多的系统去重用,还有可能成为软件公司或者程序员新的创业项目或者新的获取收入甚至财务自由的机会。现在在开发软件系统和改造旧系统,除了要考虑用微服务这样的一个理念去重新设计,还应该更加多的去考虑这个微服务能不能够被更多的人重用,有没有可能开放出来,然后去造福更多的项目和更多的程序员。


收藏 举报

延伸 · 阅读