无服务器计算,这个乍听略显矛盾的最新的云术语,实际上表示的是一种新的编程模型。这个模型能够消除更多的复杂性——在云端,甚至在你自己的服务器上,并且为企业带来巨大的经济价值。作为一个精明的企业CIO,你需要了解以下关于无服务器计算的基本知识。
就像老笑话里说的一样:云只不过是其他人手里的一台电脑。没错,只不过这个“电脑”运行地更加良好,修补地更加频繁,也比你的电脑更加安全;你不用一定要为它付费,你也可以对它进行二次租用,并且它可以提供一些服务,让你在一个更高的水平上工作,而不用你亲自去启动一台服务器并在其上安装软件。
你可能认为云的优势在于它的规模效应和成本节约,但其实更重要的还是在于它的抽象层面:存储服务和数据服务,而非硬盘;应用程序服务,而非虚拟机;软件控制网络,而非你不得不进行连接的物理网卡和电缆。随着云从IaaS发展到SaaS,再到PaaS,随着监控、数据分析、机器学习以及开发框架和应用程序服务的添加,云的抽象级别在不断提高。
无服务器摒弃了基础架构
Azure首席技术官Mark Russinovich指出,IaaS摒弃了物理数据中心,但它不会完全去除基础架构。“在IaaS中,你还是需要去挑选和部署操作系统,合理配置虚拟服务器大小以达到最佳性能,在虚拟服务器上配置网络,向外扩展虚拟服务器,找出将软件部署到服务器上的办法,更新以及监控该软件等等。”
“即使是在PaaS上,大多数的服务都需要你去请求一些大小单元和配置级别,而这些大小单元甚至可以是一些服务器。并且你还需要弄清楚你需要多少台服务器,以及如何才能使它们的使用效果最大化,你还需要关注扩展问题。此外,在PaaS上,还有一些工作任务,如处理应用程序服务请求,与我们真正想做的并没有直接关系,但却不得不去做。”
无服务器计算使抽象化向前迈进了一大步。虽然你的代码仍在服务器上运行,但在无服务器计算环境下,你完全不必再去关注这些服务器。
Russinovich把无服务器看作是“下一代的计算”,在这个计算中,一切都会被驱动起来,去帮助想要开发一个解决方案的企业获得最大的价值,同时,企业不用担心所有的这些细节,因为无服务器计算平台可帮他们打理一切。”
无服务器是基于事件的编程与微计费
如果你不喜欢无服务器计算这个名字,你可以将它看作是基于事件的编程或功能即服务。AWS Lambda是以lambda功能(可以使用和创建其他功能的匿名功能)命名的,而微软将其无服务器计算服务命名为Azure Functions,谷歌则是Cloud Functions。
Russinovich说:“无服务器计算字面上的意思是我没有在担心服务器。”但他补充说这个定义还必须包括编程模型和微计费,这样才能完整概括无服务器计算的内涵。
“我已经将服务器抽象化了。现在,我不再考虑需要多少台服务器或单元,我只是使用这些资源并为其付费。我也不用提前付费,而只需要随用随付。因为无服务器计算编程模型,这种计费模型是可以实现的。无服务器是基于事件和触发的计算,并且它要求启动触发或事件的响应要非常快,否则的话,我倒不如把资源放在那儿,让它自己长时间运行。”
因为无服务器平台可自动进行配置和缩放,如果你想要优化你正在使用的资源,你可以通过优化代码效率来达到这个目的。这是一个不同于IaaS甚至大多数PaaS的经济模型。
触发将无服务器变成云胶水
无服务器代码并不总是处于运行状态,只有当一个触发事件与你设置的规则相匹配时,这个无服务器代码才被触发。你设置的触发可以是调用你的无服务器功能的其他代码,如一个web应用程序,也可以是发生在连接服务上的一些东西——“一切事物、事件,从进入存储账号的文件,到CRM系统中的一张工单,到一个系统中出现的一条消息,都可以引起触发。”Russinovich表示。
功能的输出也可以发送给另外一个服务,所以你可以用它来触发图像识别,去捕获图片和视频,并将捕获的结果发送到一个数据库,或者通过Twitter情感分析向客户服务发送警告,或者开启一个聊天程序。“也许,当有人说他们想安排一次约会时,我就会想要开始一个工作流程了。Azure Functions可以集成云服务、数据库和存储服务,集成消息、活动中心和网关连接器,而这个网关连接器允许你集成到你的本地SQL服务器。”
使用无服务器功能以转换数据和连接不同的服务非常适合运行移动应用程序;Azure逻辑应用程序(针对开发人员)以及流程和启动应用程序(针对进阶使用者)在底层都使用了Azure Functions,并且你可以通过Amazon的移动软件开发工具包(SDK)为iOS和Android调用Lambda功能。这也是从不同云中组合出服务的一种方法,这种方法使用无服务器功能将不同的系统粘合在一起,不管它是通过将上传到Dropbox的文件拉进Dynamics 365,还是使用AWS Lambda,经过云终端API,将文件从Amazon S3移动到Google App Engine上来实现的。
开发人员可以从无服务器上获得的最大的好处是快速性和简单性。它可以使你以更快的速度进行开发,因此,它非常适合转移到开发运维以及持续的集成和部署。
“有了无服务器计算,所有的研发人员在遇到代码时,只需要关注应用程序的逻辑性。”Russinovich指出,“他们可以仅专注业务逻辑和代码编写,并且这些代码不涉及与虚拟机操作或PaaS环境相关的其他支持代码。你可以获得的优势是能够以更快的速度将产品投入市场;你可以编写一段代码,并在几秒或几分钟内的部署和运行这些代码。”
无服务器将超越云
基于事件的编程的有用性并不仅仅体现在无服务器功能上,如Lambda和AWS Functions。Russinovich说:“基于事件的编程模型是非常强大的,它不同于当下的编程模型,它可以使服务器抽象化并且它是微额级的。”他表示,随着模型的成熟,你将能够使用在PaaS上、或者甚至在IaaS上和本地部署上编写的相同的无服务器功能代码。以微软为例,你可以通过Azure Stack实现这一功能,或者现在你也可以通过在Windows容器里运行这些功能来实现它。
“在Azure Functions中,你会对一些情况失去控制。” 他解释说,“在某些场景中,这种微型计费付费模式可能会使我花费更多。如果让我的代码运行的设置成本很高,那是因为它大量利用了在功能里没有预先提供的代码,因此我的启动时间很长。所以我想进入PaaS和预先供应库,因为在这些地方,代码和我的基于事件的触发代码可以快速做出响应。”
当下,无服务器计算在云中是最为有效的,因为在它背后有必备的虚拟机和其他基础设施,并且超大型云供应商Azure和AWS很好地对其进行了自动化,所以对企业来说无服务器并没有产生真实成本——它们可以适应其他云服务空置出来的虚拟机资源。如果你自己尝试运行无服务器框架(你可能还达不到这个规模,并且还需他人帮助运行基础设施),你可能会发现,能够最大程度获得上述好处是十分困难的。但是,这个模型最终会被广泛应用。
无服务器是一个相当新的概念,但是一些大型企业已经开始实际应用它了,如可口可乐。这家公司正在使用AWS Lambda和开源无服务器框架,以降低IT成本。无服务器等抽象化技术是Atlassian将其服务,如Jira和Confluence,从它自己的数据中心转移到AWS上的原因之一。Atlassian CTO Sri Viswanath向我们解释说:“我们的承诺是,我们会使用这些抽象化技术来加速我们的研发,并且我们计划使用更多的这些服务。如果你有异步作业需要运行,那么Lambda将是很有吸引力的。”
他指出无服务器计算仍处在不断发展的过程中。“Lambda功能现在还不够完善;对于一些只运行几毫秒的较小的服务,它是非常适合的;但是微服务需要长时间运行,所以在Lambda中,你就必须启动一个虚拟机(VM)了,这样才能满足要求。因此,这对那些需要你去进行处理的、一个接一个的异步事件是非常合适的。”从行业发展现况来看,这些技术限制正在逐步得到解决——Azure Functions允许专用应用程序为更长时间的功能进行托管。Viswanath认为这个模型因其简单性,将具有更大的吸引力。
“随着时间的推移,我认为不用再去担心服务器这个概念将变得十分重要。通过无服务器,你不必关心部署到一个服务器,你只需编写代码并进行保存,然后就大功告成了。”