Skip to main content

Serverless 101

·1185 字·3 分钟
云 & 云原生 serverless
Table of Contents

serverless what, why, how

Serverless 是什么 #

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

more code, less infra

简单讲 Serverless 就是:

Serverless = FaaS + BaaS

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

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

FaaS

Serverless 的特点 & 优点 #

  • 编程模式(典型分布式特点)

    • event-driven 事件驱动
    • sharing nothing
    • stateless
  • 运维模式

    • 无运维:无需开通,没有服务器,没有虚机,也没有容器,基础设施方面是完全 0 代价维护
    • 实时弹性收缩:按需自动扩展,内置扩展性(云服务商支持)
    • 全球部署:全球到达,内置分布式架构(云服务商支持)
  • 收费模式

    • 按量付费:完全按使用多少收费,闲置状态不收费

Serverless 的挑战 #

  • 厂商绑定
  • 无法依赖特定的底层硬件
  • 本地开发,并可靠的发布到云端
  • 调试和错误诊断
  • 和已有的应用集成(包括云端和非云端)
  • 启动延时
  • 监控

针对最后一点,随着各厂商支持 k8s,k8s 上的 Knaive 就提供了统一的 serverless 基础框架,同时 CNCF 着手知道统一的 cloudeventworkdlow

Serverless 的应用场景 #

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

Serverless 的响应模式 #

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

execution model

Serverless 的托管平台 #

厂商AWSGCPAzureAlibabaIBM Cloud
免费1M reqs
400K Gb/s
2M reqs
400K Gb/s
1M reqs
400K Gb/s
1M reqs
400K Gb/s
Unlimited
400K Gb/s
价格$0.20/1m req
$0.0000025 Gb/s
$0.40/1m req
$0.00001667 Gb/s
$0.20/1m req
$0.000016 Gb/s
$0.40/1m req
$0.00001668 Gb/s
$0.000017 Gb/s
语言JS,Go,Python,
Ruby,Java,C#
JS,Go,PythonJS,C#JS,Python,Java,PHPJS,Go,Python,
Ruby Java,C#
内存128-3008128-2048?-1536128-2048
响应速度15m9m10m10m10m
请求大小6M10MUnlimited?6M5M
响应大小6M10MUnlimited?6M5M
数量Unlimited1000 func/projUnlimited
执行次数1000 parallel exec/account/region1000 parallel execUnlimited
执行时长900 secs540 secs600 secs
部署zip or jar upload, AWS SAMzip upload, Google Cloud storage,
repositories, GCloud CLI
Git, Dropbox, VS,
Kudu console, One drive, zip deployment, Azure CLI
扩展方式AutomaticAutomaticManual or metered scaling
事件源S3, SNS, SQS, SES, DynamoDB Kinesis, CloudWatch, HTTPCloud Pub/Sub, Cloud Storage, Firestore/Firebase, HTTPIoT, Hub Service Bus, HTTP Event grid/hub, Cosmos DB Storage
编排AWS StepAzure Logic + Durable
安全AWS IAM,
VPC support
Cloud IAMOAuth providers(Azure Active Directory, etc.)IBM Cloud IAM, OAuth providers(Google, GitHub, etc.)
日志/监控AWS CloudWatchStackdriver MonitoringAzure Application InsightsIBM Cloud Functions Dashboard
审计AWS CloudTrailCloud Audit LoggingAzure Audit Logs
报警AWS CloudWatch AlarmsStackdriver MonitoringAzure Application Insights, Log Analytics, and Azure MonitorIBM Cloud Functions Dashboard
开发工具AWS CodePipeline,
AWS CodeBuild
gcloud CLI for functionsAzure Portal, Azure Powershell,
Azure CLI, Azure SDK
IBM Cloud Functions UI, IBM Cloud Functions CLI, OpenWhisk Shell
调试AWS X-RayStackdriver DebuggerAzure CLI(local), Azure App Service(remote)wskdb: The OpenWhisk Debugger openwhisk-light
其它限制AWS 链接GCP 链接Azure 链接Alibaba 链接OpenWhisk 链接

Serverless 的开源框架 #

CNCF serverless 框架一览:

CNCF serverless

对比如下:

框架IronFunctionsFissionFnKnativeKubelessNuclioOpenFaaSOpehWhisk
licenseApache 2.0Apache 2.0Apache 2.0Apache 2.0Apache 2.0Apache 2.0MITApache 2.0
始于2016.22016.82016.52018.12016.112018.72016.122016.2
厂商ironPlatform9OracleGoogle, RedhatBitnamiIguazioVMWareIBM, Adobe
Github Star2.8k5.1k4.6k3k5.7k3.3k17.7k4.7k
Github Commits9041,1513,3934,4351,0081,3601,8942,780
Github 贡献者3295851748555147177
Google 热度---73/10027/100-31/10027/100
StackOverflow 热度(posts)27261108328197
当前版本0.2.721.9.00.3.7490.15.01.0.61.3.270.18.170.9.0
开发语言GoGoGoGoGoGoGoScala
代码行数~25K~87K+25K~12K~64K
底层技术Postgres, Redisfluentdsqlite Postgres MySQL, Bolt Redis PrometheusAlertManager, Prometheus, NatsCouchDB, Kafka, Nginx Redis, Zookeeper
Serverless 部署
特性原生/依赖 k8s支持多语言,多环境原生/依赖 k8s原生/依赖 k8s性能简单、轻巧, 社区庞大庞大社区,成熟