看看顶级互联网公司都在研究的无服务器架构,看完收获满满


看看顶级互联网公司都在研究的无服务器架构,看完收获满满

文章插图
 
 
无服务器计算(Severless computing,简称 Serverless)现在是软件架构圈中的热门话题,国外三大云计算供应商(Amazon、google 和 Microsoft)都在大力投入这个领域,涌现了不计其数的相关书籍、开源框架、商业产品、技术大会 。到底什么是 Serverless?它有什么长处/短处?我希望通过本文对这些问题提供一些启发 。
一些示例
界面驱动的应用(UI-driven Applications)
我们来设想一个传统的三层 C/S 架构,例如一个常见的电子商务应用(比如在线宠物商店),假设它服务端用 JAVA,客户端用 html/JavaScript:
看看顶级互联网公司都在研究的无服务器架构,看完收获满满

文章插图
 
 
在这个架构下客户端通常没什么功能,系统中的大部分逻辑——身份验证、页面导航、搜索、交易——都在服务端实现 。
把它改造成 Serverless 架构的话会是这样:
看看顶级互联网公司都在研究的无服务器架构,看完收获满满

文章插图
 
这是张大幅简化的架构图,但还是有相当多变化之处:
  1. 我们移除了最初应用中的身份验证逻辑,换用一个第三方的 BaaS 服务 。
  2. 另一个 BaaS 示例:我们允许客户端直接访问一部分数据库内容,这部分数据完全由第三方托管(如 AWS Dynamo),这里我们会用一些安全配置来管理客户端访问相应数据的权限 。
  3. 前面两点已经隐含了非常重要的第三点:先前服务器端的部分逻辑已经转移到了客户端,如保持用户 Session、理解应用的 UX 结构(做页面导航)、获取数据并渲染出用户界面等等 。客户端实际上已经在逐步演变为单页应用 。
  4. 还有一些任务需要保留在服务器上,比如繁重的计算任务或者需要访问大量数据的操作 。这里以“搜索”为例,搜索功能可以从持续运行的服务端中拆分出来,以 FaaS 的方式实现,从 API 网关(后文做详细解释)接收请求返回响应 。这个服务器端函数可以和客户端一样,从同一个数据库读取产品数据 。我们原始的服务器端是用 Java 写的,而 AWS Lambda(假定我们用的这家 FaaS 平台)也支持 Java,那么原先的搜索代码略作修改就能实现这个搜索函数 。
  5. 最后我们还可以把“购买”功能改写为另一个 FaaS 函数,出于安全考虑它需要在服务器端,而非客户端实现 。它同样经由 API 网关暴露给外部使用 。
消息驱动的应用(Message-driven applications)
再举一个后端数据处理服务的例子 。假设你在做一个需要快速响应 UI 的用户中心应用,同时你又想捕捉记录所有的用户行为 。设想一个在线广告系统,当用户点击了广告你需要立刻跳转到广告目标,同时你还需要记录这次点击以便向广告客户收费(这个例子并非虚构,我的一位前同事最近就在做这项重构) 。
传统的架构会是这样:“广告服务器”同步响应用户的点击,同时发送一条消息给“点击处理应用”,异步地更新数据库(例如从客户的账户里扣款) 。
看看顶级互联网公司都在研究的无服务器架构,看完收获满满

文章插图
 
 
在 Serverless 架构下会是这样:
看看顶级互联网公司都在研究的无服务器架构,看完收获满满

文章插图
 
 
这里两个架构的差异比我们上一个例子要小很多 。我们把一个长期保持在内存中待命的任务替换为托管在第三方平台上以事件驱动的 FaaS 函数 。注意这个第三方平台提供了消息代理和 FaaS 执行环境,这两个紧密相关的系统 。
解构 “Function as a Service”
我们已经提到多次 FaaS 的概念,现在来挖掘下它究竟是什么含义 。先来看看 Amazon 的 Lambda 产品简介:
通过 AWS Lambda,无需配置或管理服务器(1)即可运行代码 。您只需按消耗的计算时间付费 – 代码未运行时不产生费用 。借助 Lambda,您几乎可以为任何类型的应用程序或后端服务(2)运行代码,而且全部无需管理 。只需上传您的代码,Lambda 会处理运行(3)和扩展高可用性(4)代码所需的一切工作 。您可以将您的代码设置为自动从其他 AWS 服务(5)触发,或者直接从任何 Web 或移动应用程序(6)调用 。
 
  1. 本质上 FaaS 就是无需配置或管理你自己的服务器系统或者服务器应用即可运行后端代码,其中第二项——服务器应用——是个关键因素,使其区别于现今其他一些流行的架构趋势如容器或者 PaaS(Platform as a Service) 。回顾前面点击处理的例子,FaaS 替换掉了点击处理服务器(可能跑在一台物理服务器或者容器中,但绝对是一个独立的应用程序),它不需要服务器,也没有一个应用程序在持续运行 。


    推荐阅读