serverless 101

serverless 是什么

serverless 就是让开发近最大可能的关注在代码上,而不是 infra,代码以 function 为基本单元进行部署和运行:

more code, less infra

$$ [email protected] = Function-as-a-Service + Backend-as-a-Service $$

serverless 和数据库的存储过程很像,把存储过程搬到了云端,由数据库触发事件变成云端触发事件,由数据库支持变成云平台支持,简洁直接,但能发挥的功效依赖所属平台的支持。

FaaS 具体和 IaaS,PaaS 的比较如下:
FaaS

serverless 的特点

  • 编程模式(典型分布式特点)
    • event-driven 事件响应
    • sharing nothing
    • stateless
  • 运维模式
    • 无需开通,没有服务器,没有虚机,也没有容器,基础设施方面是完全 0 代价维护
    • 按需自动扩展,内置扩展性(云服务商支持)
    • 全球到达,内置分布式架构(云服务商支持)
  • 收费模式
    • 完全按使用多少收费,闲置状态不收费

serveless 的挑战

  • 启动延时
  • 监控
  • 调试和错误诊断
  • 本地开发,并可靠的发布到云端
  • 厂商绑定
  • 和已有的应用集成(云端和非云端)

serveless 的应用场景

  • web 应用:静态网站
  • 后端自动化服务:移动应用后台,IOT/edge computing
  • 后台应用:会话机器人(chatbot),语音处理
  • 数据流处理:实时数据处理,批处理,MapReduce
  • 基础设施自动化服务

serveless 的响应模式

  • 同步/推模式: 响应 http 的 url
  • 异步/事件模式:响应来自某个服务的事件,如 S3
  • 基于数据流:数据流来自数据库,如 Amazon DynamoDB,或者数据流中心,如 Amazon Kinesis

execution model

serveless 的托管平台

FaaS AWS Lambda Azure Functions Google Cloud Functions IBM Cloud Functions
语言支持 Node.js, Java, C#, Python Node.js, C#, F#, Python, PHP Node.js Node.js, Python, Java, Swift, Docker
触发事件 Amazon S3, DynamoDB, Kinesis Streams, Congnito, CloudFormation, CloudWatch Logs, CloudWatch Events, CodeCommit, Scheduled Events, Config, Echo, Lex, API Gateway, Simple Notification Service HTTP request, Cloud Pub/Sub, Cloud Storage HTTP Request, Schedule, Azure Storage blob storage & queues, Azure Event Hubs, Azure Service Bus queues & topics HTTP request, Schedule, GitHut events, IBM Cloudant, IBM Message Hub, IBM Push Notifications, custom events via triggers
安全 AWS IAM, VPC support OAuth providers (Azure Active Directory, Facebook, Google, Twitter, Microsoft Account, etc.) Cloud IAM IBM Cloud IAM, OAuth providers (Google, Facebook, GitHub, etc.)
监控 AWS CloudWatch Azure Application Insights Stackdriver Monitoring IBM Cloud Functions Dashboard
日志 AWS CloudWatch Azure Application Insights Analytics Stackdriver Logging IBM Cloud Functions Dashboard
审计 AWS CloudTrail Azure Audit Logs Cloud Audit Logging
报警 AWS CloudWatch, Alarms Azure Application Insights, Log Analytics, and Azure Monitor Stackdriver Monitoring IBM Cloud Functions Dashboard
开发工具 AWS CodePipeline, AWS CodeBuild Azure Portal, Azure Powershell, Azure CLI, Azure SDK gcloud CLI for functions IBM Cloud Functions UI, IBM Cloud Functions CLI, OpenWhisk Shell
调试 AWS X-Ray Azure CLI - local debugging, Azure App Service - remote debugging Stackdriver Debugger wskdb: The OpenWhisk Debugger openwhisk-light
费用 详情 … 详情 … 详情 … 详情 …
其它限制 详情 … _ only 10 concurrent executions per function
_ No limitations on max. execution time limit
详情 … _详情 …_
生态 Step Functions Logic Apps Cloud Functions for Firebase Apache 开源社区

费用/价格是个坑,这里有个简单比较:

price

免费餐比较:

free-tier

还有一些限制,使用前一定要了解清楚。

这里没有包括国内的云平台,如阿里云,腾讯云,华为云

FaaS 由 AWS 首先发布(Lambda 发布于 2014 年 11 月),由于 AWS 的成熟和众多功能,AWS 是 serverless 目前最好的平台。AWS 的 Lambda 目前占据了七成的市场:
AWS Lambda

AWS 事件集

AWS Events

Azure 事件集

Azure Events

serverless 的基本现状

  • 全球使用方面美国占了近七成

global usage

  • 开发语言方面PythonJavascript/Node.js领衔:

programming language

  • 从 Function 的规模看,1-5个的占了一半:

function size

开源 FaaS 框架

目前有众多 FaaS/Servless 的开源框架和工具,目前CNCF Serverless Working Group规范着这方面的技术:

serverless landscape

FaaS 框架清单: FaaS on Kubernetes

FaaS 框架 支持者 特性 始于
Apache OpenWhisk ASF, Adobe, IBM, Red Hat 庞大社区,成熟 2015
Azure Functions Runtime Microsoft 易用 late 2017
Dispatch VMware meta-framework late 2017
Fission Platform9 性能 2016
Fn Oracle 支持多语言,多环境 late 2017
Funktion Red Hat/Fabric8 集成 2017
Kubeless Bitnami UX,监控 2017
Nuclio iguazio 性能 mid 2017
OpenFaaS VMware 庞大社区,UX late 2016
Riff Pivotal 事件中心 late 2017

serverless 例子

两个 AWS Lambda step-by-step 的例子:

由于云端的复杂性,即使是 AWS,实际项目的开发体没有那么简单和完美。

  • tagging,update,resources,roles,……
  • state,rollback,error handling,debugging,……
  • testing,security,legacy integration,……
0%