暴捶营销:微信小程序目前并不是Serverless!

在InfoQ中文网站看到Serverless 最佳实践:如何在两周内开发出用户量过亿的微信小程序,这篇营销文章很显然认为Serverless=BaaS+FaaS,BaaS是后端即服务,FaaS是函数即服务,Serverless不简单是这两种服务的组合,关键是服务这个字眼,Serverless其实重新定义了服务这个词语!根据Martin Fowler网站无服务器架构定义:

  1. BaaS:无服务器首先用于描述显着或完全包含第三方云托管应用程序和服务的应用程序,以管理服务器端逻辑和状态。这些通常是“富客户端”应用程序 - 认为单页网络应用程序或移动应用程序 - 使用庞大的云可访问数据库生态系统(例如,Parse,Firebase),身份验证服务(例如,Auth0,AWS Cognito),以及等等。这些类型的服务以前被描述为“ 后端即服务 ”。
  2. FaaS:无服务器也可以指服务器端逻辑仍然由应用程序开发人员编写的应用程序,但是,与传统体系结构不同,它在无状态计算容器中运行,这些容器是事件触发的短暂的(可能只持续一次调用)

关键问题是在FaaS,FaaS不同于普通API,更不同于服务或微服务,在服务、微服务与无服务器之函数的区别?一文中就提到,服务是一直驻留运行的,因为一直在运行,所以你要给云厂商付费,不管在运行时空闲情况如何,或者说只有一两次调用;而FaaS的函数是只在请求调用运行时付费。因此为了做到这点,这个函数是即用即加载的,有所谓热启动的问题,用完就退出内存,不再消耗云计算平台资源,这样才能实现即用即付钱;云平台厂商为了实现即用即加载,一般使用容器Docker之类加载你的函数代码,由你的客户端通过事件触发这些函数的调用。

所以,无服务器架构不只是Paas云平台,不只是BaaS,也不只是FaaS,特别是FaaS,不是普通的API的Http调用,如果真是这样,其实没有必要无服务器,现在云平台PaaS+BaaS就能实现没有后端服务器管理的美好愿望。

根据MF网站的无服务器架构定义,FaaS是:

  1. 从根本上说,FaaS是关于运行后端代码而无需管理自己的服务器系统或您自己的长期驻留long-lived的服务器应用程序。与容器和PaaS(平台即服务)等其他现代架构趋势进行比较时,第二个子句 - 长期驻留(long-lived)的服务器应用程序是一个关键的区别。(FaaS不是长期驻留的普通API
  2. FaaS产品不需要对特定框架或库进行编码。FaaS函数是语言和环境的常规应用程序。例如,AWS Lambda函数可以在Javascript,Python,Go,任何JVM语言(Java,Clojure,Scala等)或任何.NET语言中实现。但是,Lambda函数还可以执行与其部署工件捆绑在一起的另一个进程,因此您实际上可以使用任何可以编译为Unix进程的语言。
  3. 部署与传统系统有很大不同,因为我们没有自己运行的服务器应用程序。在FaaS环境中,我们将函数功能的代码上传到FaaS提供商,提供商执行配置资源,实例化VM,管理流程等所需的一切。
  4. 水平扩展是完全自动的,弹性的,并由提供者管理。如果您的系统需要并行处理100个请求,则提供商将处理该请求而无需您进行任何额外配置。函数的执行是一个“计算容器”,运行是短暂的,FaaS提供者实现容器的创建和销毁完全是由运行时需求驱动。最重要的是,使用FaaS ,供应商可以处理所有底层资源配置和分配 - 用户根本不需要集群或VM管理。(容器+FaaS是Serverless重要的机制,只有容器或FaaS都是片面的,两者分别是静态和动态的)
  5. FaaS中的函数通常由提供程序定义的事件类型触发
  6. 大多数提供程序还允许触发函数作为对入站HTTP请求的响应; 在AWS中,通常通过使用API​​网关来实现这一点。函数也可以通过平台提供的API直接调用,无论是在外部还是在同一个云环境中,但这是一种相对不常见的用法。