Serverless 101

Jan 30, 2018 • 预计阅读时间 3 分钟

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 的托管平台

厂商AWS LambdaGCP FunctionsAzure FunctionsAlibaba FunctionIBM Cloud Functions
免费1M reqs
400K Gb/s
2M reqs
400K Gb/s
1M reqs
400K G/s
1M reqs
400K Gb/s
Unlimited
400K Gb/s
价格$0.20/1m req
$0.0000025 G/s
$0.40/1m req
$0.00001667 G/s
$0.20/1m req
$0.000016 G/s
$0.40/1m req
$0.00001668 b/s
$0.000017 G/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 functions/projectUnlimited
执行次数1000 parallel exec
/account
/region
1000 parallel executionsUnlimited
执行时长900 secs540 secs600 secs
部署zip or jar upload, AWS SAMzip upload, Google Cloud storage, repositories, GCloud CLIGit, 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 supportCloud IAMOAuth providers (Azure Active Directory, Facebook, Google, Microsoft Account, etc.)IBM Cloud IAM, OAuth providers (Google, Facebook, 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 CodeBuildgcloud CLI for functionsAzure Portal, Azure Powershell, Azure CLI, Azure SDKIBM 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,
Redis
fluentdsqlite
Postgres
MySQL,
Bolt
Redis
Prometheus
AlertManager,
Prometheus,
Nats
CouchDB,
Kafka,
Nginx
Redis,
Zookeeper
Serverless 部署
特性原生/依赖 k8s支持多语言,多环境原生/依赖 k8s原生/依赖 k8s性能简单、轻巧, 社区庞大庞大社区,成熟
云 & 云原生serverless

给恐龙们解释一下当今的CSS - Modern CSS(译文)

给恐龙们解释一下当今的Javascript - Modern Javascript(译文)

comments powered by Disqus