AWS云计算架构策略副总裁:飙速开发又有新方向,Serverless是容器和微服务的下一步

早在2015年冬天AWS年度大会一场演讲中,AWS云计算架构策略副总裁Adrian Cockcroft就预言,Serverless将是下一阶段的云计算架构方向。当时,Docker崛起才2年,正是红遍半边天的IT明日技术。但Adrian Cockcroft从IT飙速的角度来看,他当时就指出,可以提供毫秒级部署能力,也只需存活数秒钟的AWS Lambda(这是AWS率先推出的Serverless服务),将比容器化部署更有速度力。当时他还没进入AWS,而是在技术创投担任技术评估者和推广者。

Serverless的发展也如Adrian Cockcroft所预言的,越来越兴盛,甚至不只AWS,其他云计算巨头也相继推出Serverless服务,近年更结合了边缘运算架构和AI认知服务,扩大了Serverless服务的运用形态。

Adrian Cockcroft后来更进一步从商业逻辑的发展变化,将近10年来企业IT架构演进分为三个阶段,分别是Monolith分裂(大部头架构分裂)、Microservice(微服务架构)和Functions(功能架构)。

Monolith架构是早期大型主机时代的架构,将所有功能和服务都集中到一个庞大、复杂的系统中,但在十年前,因为单一系统过于复杂、缓慢,这个主流架构开始分裂。不过,他解释,当时CPU速度和网络性能还不够快,只能依赖XML和SOAP协议来传输消息,因此只能将大部头系统切割成规模较小的服务,一个服务仍旧包含了大量不同类型功能,依旧是大部头式的复合式服务。

5年前,微服务架构开始崛起,开始分门别类地更进一步来切割服务的用途,而不同类型服务之间也更容易进行双向沟通,也容易通过服务架构来访问各类存储服务或缓存机制,应用系统和存储硬件间容易通过服务串接。

2014、2015年,企业开始拥抱云计算,愿意把自家应用搬上云计算,这更促成微服务架构的普及,因为Restful API开始成为微服务架构的消息传递方式后,不只可以串接内部各种微服务,也很容易串接到云计算上的专用型服务。而“容器技术的出现,让微服务架构变得更容易也更快导入。”他解释,因为容器技术带来新的应用程序部署模式。

Adrian Cockcroft用笔记本计算机软件升级过程来比喻。过去,得不断更新笔记本计算机中的软件,才能享受到新功能。但是,若笔记本计算机价格非常便宜时,甚至是只要几百美元就可以拥有一部低价Chromebook,一旦发生问题,直接换一台新的笔记本计算机更省事。容器技术降低了应用程序部署和封装的时间成本,也带来了新的部署作法,就是“直接换新免升级”,这就是Docker所能提供的Immutable打包更新作法。一旦将微服务容器化之后,一来更容易跨平台、跨云、跨不同环境来部署相同的微服务,要更新时,也不用关闭正在执行的微服务,修改完再重上线,而是直接部署新版微服务,再关闭旧版微服务,就像是直接换一台新笔记本计算机,就可以获得新功能,而旧笔记本计算机就直接作废,不用来进行软件更新。

不过,经过这几年,许多常用服务都已经标准化,也成为云计算服务平台提供的基础服务组件,彼此再通过API来沟通,这也是许多企业开始用云计算平台提供的服务来组合出自己的微服务架构,而不会全部自建。而实现应用程序商业逻辑的程序,其实会反映在串接这些常用服务之间的程序上,而且这些串接常用服务的机制,往往不用永久存在,只有需要的时候才执行,执行完成了,就可以下线。因此而出现了像AWS Lambda这类的Serverless服务。

而Serverless服务就是一种Functions架构的服务,是将微服务打破成更小的单位,也就是按照功能来打包成最基本的程序单位或程序积木。 “Functions很简单,一次只做一件事,但微服务还是要提供一个接口。Functions等于是更小型也更专注的微服务。”Adrian Cockcroft指出,你可以将一个Functions转变成一项服务,这就是一个只提供单一功能的微服务,但有些微服务更加复杂。

微服务和Serverless其实不冲突,而是可以组合运用的架构。举例来说,容器化的微服务,可以负责那些低延迟而需长久存在的功能,例如即时控制、硬件驱动等,但通过API接口,不同应用程序的商业逻辑则可通过Serverless的功能来实现,再通过API串接两者。 “这正是打造现代应用程序该有的方式。”Adrian Cockcroft表示。

他建议,现在若要开发新应用,最好优先采用Serverless架构,快速完成需要的App,再持续根据顾客需求来优化。例如服务网络流量很大,可以改租用PaaS来分摊部分Serverless上的服务。或先需要有能快速回应的Ap,再来专注于优化网络延迟。 “使用Serverless服务,设计出你的应用系统的第一个版本,只需要几天。”

不过,想要利用标准化的微服务或功能性的Serverless来打造应用程序,“得先适应Serverless服务可提供的功能。”他说,但可以更容易实现新的飙速开发模式(Rapid Development)。

Adrian Cockcroft以打造玩具航天飞机来比喻新旧开发模式的差异。传统作法是,你得先设计航天飞机玩具的原型,再用黏土来复制每一个零件模型,接着用黏土模型来铸造出每个零件的模具,就可以大批铸造生产零件,再来组出一个个航天飞机玩具,这就是传统的瀑布式开发流程,得花上几个月才能开发一套系统,在部署到不同环境或各地据点中。

而新的飙速开发模式截然不同,是改用乐高积木来组合航天飞机,几个小时就能组装出一个航天飞机玩具。这台乐高航天飞机仍旧可以玩,颜色搭配也可以长得像是当初设计的原型,但精细程度比不上铸造组装的版本。这类积木可以自己开发,或用容器技术来打包出容易再利用的常用程序积木,也可以使用Serverless提供的功能。 “使用Serverless好处是,最后组装出来的航天飞机玩具,可用(依旧可玩)、可靠(坚固)、容易局部调整,但最重要的是能够快速完成。”他说。

不少企业担心,系统架构改用微服务架构和容器技术后,长期维护工作将会越来越困难?不过,Adrian Cockcroft认为,服务种类和数量变多了,就像乐高积木越出越多款,组合工作不会变得太难,“只有一开始找对积木得费一番功夫”他更进一步指出,拆碎后的微服务,每一个都独立运行,可以掌握且限制其权限和用途,因此“微服务架构反而Monolithic架构更简单,因为微服务的复杂度可以被看见。”他说。