今天读了一篇加州大学伯克利分校发表的论文 Cloud Programming Simplified: A Berkeley View on Serverless Computing,文章对serverless的形成、现状以及未来进行了全面的梳理和总结。一边阅读我也记录了一些笔记,方便自己回顾。

1. Serverless计算简介

早在2009年,伯克利曾针对当时兴起的云计算做过评论,并提出了以下6个潜在的优点:

  1. (理论上)无限可用的计算资源
  2. 用户再也不需要承担服务器运维的工作和责任
  3. 服务的按需付费成为可能
  4. 超大型数据中心的使用成本显著降低
  5. 通过可视化资源管理,运维操作的难度大大降低
  6. 得益于分时复用,物理硬件的利用率大大提高

2009年至今的10年里,云计算领域已经有了很大的发展,上述的诸多优势已经成为现实,但最后两点目前的实现仍然不够优秀,使得大部分的云服务使用者不得不承受复杂的运维成本和较低的硬件使用率。

采用底层硬件虚拟的方案意味着所有的运维操作都要由开发人员自己来解决,并且为了保证运行在云上的服务具有足够的稳定性,需要解决很多的问题,比如下面列出的这些:

  1. 提供冗余容错能力,保证一台机器出现故障时不会影响到整个服务
  2. 异地容灾和备份机制
  3. 能够有效利用硬件资源的负载均衡方案
  4. 响应式地调整服务的规模,实现自动缩扩容
  5. 实时监控服务是否正常运行
  6. 记录足够的日志信息,方便debug和性能调优
  7. 系统升级问题,包括安全补丁
  8. 能够快速将服务迁移到新实例的能力

注意到这些问题,亚马逊在2015年推出了AWS Lambda服务,提出了Cloud Function的概念,并引起了业界对于Serverless的广泛关注(Serverless这一词并不是说真的没有服务器了,只是开发人员不需要再关注服务器了,你的代码仍然是运行在真实存在的服务器上的)。

Cloud Function最终被平台打包成FaaS (Function as a Service, 函数即服务) 的形式,它代表着Serverless的核心理念。当然,云平台也提供以BaaS (Backend as a Service) 形式存在的Serverless服务框架。简单的说,Serverless Computing = FaaS + BaaS

2. Serverless的形成

serverless相比serverful,有以下3个显著的改变:

  1. 弱化了储存和计算之间的联系。 服务的储存和计算被分开部署和收费,服务的储存不再是它本身的一部分,而是演变成了独立的云服务,这使得计算变得无状态化,更容易调度和缩扩容,同时也降低了数据丢失的风险。
  2. 代码的执行不再需要手动分配资源。 我们再也不需要为服务的运行指定需要的资源(比如使用几台机器、多大的带宽、多大的磁盘…),只需要提供一份代码,剩下的交由serverless平台去处理就行了
  3. 按使用量计费。 serverless按照服务的使用量(调用次数、时长等)进行计费,而不是像传统的serverful服务那样,按照使用的资源(ECS实例、VM的规格等)计费。

接下来文章解释serverlss和一些相似的产品究竟有何不同。

接着文章探寻为何serverless计算能够如此吸引云提供商、用户和研究者们。

  1. 对于云服务提供商而言,serverless计算能够给他们带来商业上的增长。
  2. 对于购买云服务的客户而言,serverless计算带来的主要收益是编程生产力的提高,以及在许多场景下的支出节省。
  3. 对于专家而言,serverless节省了他们部署和运维的时间,让他们能够更加专注于解决和优化应用本身的问题。

3. 当前Serverless计算平台的局限性

为了探究是什么阻碍了serverless计算应用于更加广泛的场景,作者选择了几个例子,
分别是:

  1. ExCamera:实时视频编码
  2. MapReduce
  3. Numpywren:线性代数
  4. Cirrus:机器学习训练
  5. Serverless SQLite:数据库

尝试把他们改造成serverless的形式来发现阻碍改造的难点。

  1. 不足以支持细粒度操作的储存
  2. 缺少细粒度的任务协作方式
  3. 乏力的标准通信模式
  4. 性能瓶颈

4. Serverless计算应该是什么样的

接下来作者给出了困扰serverless计算应用于更广泛的硬件和软件范围的五大挑战:抽象、系统、网络、安全以及架构。

5. 陷阱与谬误

谬误是指人们对serverless的一些错误看法

  1. serverless云计算要比传统的serverful云计算昂贵的多 ×
  2. 在不同的serverlss计算供应商之间移植应用很简单 ×
  3. Cloud Functions无法实现那些有性能预测和低延迟要求的应用 ×

陷阱则是指那些serverless潜在的坑和隐患

  1. serverless计算可能会产生不可预测的成本
  2. serverless计算可能有着比serverful计算更强的厂商锁定
  3. 那些号称“弹性”的服务中,只有很少一部分真正符合serverless计算对灵活性的要求

6. 总结和预测

serverless现在已经取得了一定的成功,但也仍然存在一定的挑战,如果克服了这些挑战,它将能够在更广的领域里获得更大的成功。此外,serverless计算未来还将面临安全和成本问题。最后作者对serverless计算未来的表现作出了一些预测:

  • 有新形态的BaaS储存服务出现,让更多类型的应用能在serverless平台上运行地更好。
  • serverless计算未来应该能够提供比当前serverful计算更简单的方式来解决编程安全问题。
  • serverless计算的收费模型将得到很大的改进
  • 那些被证明是很难以serverless形式运行的应用(比如OLTP数据库或者队列),未来很可能会是云供应商所提供的更丰富的服务的一部分。
  • 传统的serverful在云计算中所占的相对比重将会逐渐下降。
  • serverless计算将会成为云时代默认的计算范式,大面积取代原有的serverful计算,并为传统的客户端-服务器时代划上一个句号。

感想

以上就是对这篇论文内容的概括总结,不过有很多细节,特别是第三部分的几个应用我并不了解他们的特性,以及第四部分谈到各方面挑战包括了很多我不熟悉的名词所以还没有完全读懂,只是有个模糊的概念。但至少通过阅读这篇文章以及其他的一些资料,我大致了解了serverless的概念和优点,遇到的阻碍和未来发展的可能。目前我们常用的云服务器免去了买物理服务器的麻烦,只需要去申请虚拟机就可以部署上线项目,一般是包月包年使用,但是如果没有访问我们的应用我们也依然要付钱,而且去维护项目也是需要花费挺多精力的。所以后来就有了serverless的方式,并不是没有服务器,而是说应用的装载、启动、卸载、路由是由平台来做的。我们只需要编写业务代码,然后上传到serverless的平台设定好触发规则,请求到来的时候就会创建函数实例,根据请求的多少来扩展和收缩实例,如果无人访问就会卸载函数实例。不过这种方式会牺牲“状态”,因为每次启动可能会被部署到新的服务器上,用户的会话状态无法保持,所以说serverless更适合无状态的应用。那些想持久化的东西也应该保存到外部的系统中,以“服务”的方式呈现(BaaS)。文章最后预测了这种serverless计算的方式在未来会成为趋势,大面积替代原有的serverful计算方式:)

而刚好在前端领域,serverless也是当下炙手可热的技术,所以我也浏览了一些相关的文章。通过Node来开发云函数,可以使前端开发者向全栈转型,提升整体开发效率。比如在这篇文章千万级流量业务的Serverless实践,看FaaS给前端带来的变化中讲述了手淘中的哇哦视频是如何转型成serverless的(它是淘系首个Node Faas技术的项目),获得了FaaS零运维的优势,从而达到开发者的提效。

当然,论文中所说serverless在硬件和软件上还存在着各种挑战,如果可以克服的话,serverless会在更广阔的领域取得更大的成功。

一个简单的实践

看完了文章,我们也可以来简单来实验一下,这样也会对文章内容有更好地了解。
阿里云和腾讯云都有提供函数计算的服务,也有文档可以参考。

腾讯云Serverless Framework快速入门

阿里云函数计算快速入门

我们就按照腾讯云的文档,只需要几行代码,开始部署一个Serverless 服务

一、安装 Node.js 和 NPM
我这边已经安装好了,查看一下版本

C:\Users\63406>node -v
v12.16.1C:\Users\63406>npm -v
6.13.4

二、安装 Serverless Framework CLI
这里我改用了淘宝镜像会比较快

C:\Users\63406>npm install -g cnpm --registry=https://registry.npm.taobao.org
C:\Users\63406\AppData\Roaming\npm\cnpm -> C:\Users\63406\AppData\Roaming\npm\node_modules\cnpm\bin\cnpm
+ cnpm@6.1.1
added 686 packages from 950 contributors in 141.63sC:\Users\63406>cnpm install -g serverless

安装完毕后查看下版本

C:\Users\63406>serverless -v
Framework Core: 1.64.1
Plugin: 3.4.1
SDK: 2.3.0
Components Core: 1.1.2
Components CLI: 1.4.0

三、通过模板创建服务

D:\wanshan\learn>cd serverless
# 创建一个serverless服务
D:\wanshan\learn\serverless>serverless create --template tencent-nodejs --path my-service
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "D:\wanshan\learn\serverless\my-service"_______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v1.64.1-------'Serverless: Successfully generated boilerplate for template: "tencent-nodejs"D:\wanshan\learn\serverless>cd my-service
# 安装依赖
D:\wanshan\learn\serverless\my-service>npm install
√ Installed 1 packages
√ Linked 197 latest versions
√ Run 0 scripts
Recently updated (since 2020-02-19): 5 packages (detail see file D:\wanshan\learn\serverless\my-service\node_modules\.recently_updates.txt)
√ All packages installed (209 packages installed from npm registry, used 6s(network 6s), speed 1016.14kB/s, json 198(400.77kB), tarball 5.4MB)

此时my-service下就有了serverless.yml文件
我们在里面配置触发器

service: my-service # service nameprovider: # provider informationname: tencentruntime: Nodejs8.9credentials: ~/credentials  #如不使用二维码一键登录,密钥字段需要和 credentials 文件路径一致plugins:- serverless-tencent-scffunctions:hello_world:   # 函数名称handler: index.main_handlerruntime: Nodejs8.9events:- apigw:name: hello_world_apigwparameters:stageName: releaseserviceId:httpMethod: ANY

四、部署服务

D:\wanshan\learn\serverless\my-service>serverless deploy

此时会弹出二维码,用微信来扫码登录或注册腾讯云。

看到这个就说明成功了

Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Uploading service package to cos[sls-cloudfunction-ap-guangzhou]. my-service-dev-5CeckR-2020-02-26-19-23-23.zip
Serverless: Uploaded package successful D:\wanshan\learn\serverless\my-service\.serverless\my-service.zip
Serverless: Creating function my-service-dev-hello_world
Serverless: Created function my-service-dev-hello_world
Serverless: Setting tags for function my-service-dev-hello_world
Serverless: Creating trigger for function my-service-dev-hello_world
Serverless: Created apigw trigger hello_world_apigw for function my-service-dev-hello_world success. service id service-0147bmx4 url https://service-0147bmx4-1301390953.gz.apigw.tencentcs.com/release/my-service-dev-hello_world
Serverless: Deployed function my-service-dev-hello_world successful
Serverless: Service Information
service: my-service
stage: dev
region: ap-guangzhou
stack: my-service-dev
resources: 1
functions:   hello_world: my-service-dev-hello_worldANY - https://service-0147bmx4-1301390953.gz.apigw.tencentcs.com/release/my-service-dev-hello_world

可以访问它给出的地址

五、测试服务

D:\wanshan\learn\serverless\my-service>curl -X POST https://service-0147bmx4-1301390953.gz.apigw.tencentcs.com/release/my-service-dev-hello_world
"Hello World"

六、云端调用

D:\wanshan\learn\serverless\my-service>serverless invoke -f hello_world
Serverless:"Hello World"----------
Log:
START RequestId: cb9b23f4-588b-11ea-acc2-525400c43e35
Event RequestId: cb9b23f4-588b-11ea-acc2-525400c43e35
2020-02-26T11:33:30.099Z        cb9b23f4-588b-11ea-acc2-525400c43e35    {}END RequestId: cb9b23f4-588b-11ea-acc2-525400c43e35
Report RequestId: cb9b23f4-588b-11ea-acc2-525400c43e35 Duration:1ms Memory:128MB MemUsage:61.7578MB

七、 移除服务
如果不再需要此服务,可以通过如下命令一键移除服务,该命令会清理相应函数和触发器资源。

serverless remove

Cloud Programming Simplified: A Berkerley View on Serverless Computing笔记相关推荐

  1. Cloud Programming Simplified: A Berkeley View on Serverless Computing

    云计算编程的简化:伯克利对无服务器计算的观点 Abstract 无服务器云计算几乎处理了所有的系统管理操作,使程序员更容易使用云计算.它提供了一个接口,大大简化了云计算编程,并代表了从汇编语言到高级编 ...

  2. Cloud Programming Simplifie : A Berkeley View on Serverless Computing

    Abstract 无服务器云计算几乎处理所有系统管理操作,使程序员更容易使用云. 它提供了一个极大简化云编程的接口,代表了从汇编语言到高级编程语言的过渡. 本文简要介绍了云计算的历史,包括对2009年 ...

  3. 无服务计算的未来和挑战: A Berkeley View on Serverless Computing

    加州大学伯克利分校继 2009 年发布 <The Berkeley View on Cloud Computing>一举拨开云计算迷雾,十年后又一次发布了 <A Berkeley V ...

  4. 【转】无服务计算(Serverless Computing)核心知识

    Serverless Computing概念 云原生计算基金会CNCF(Cloud Native Computing Foundation, CNCF)Serverless Whitepaper v1 ...

  5. Serverless Computing Fass $ openwhisk快速部署、应用、实例

    前一段时间接触到无服务计算,其实无服务计算在当前云计算平台中扮演很重要的作用(使用了aws lambda,发现Fass真的很好用).当时发现国内对于Fass以及Openwhisk的介绍太少了,这里把自 ...

  6. FaaS — Serverless Computing(无服务器计算)

    目录 文章目录 目录 Serverless Computing(无服务器计算) Serverful 与 Serverless FaaS 与 BaaS Serverless 的优势 免运维 极致弹性 开 ...

  7. 阿里云徐立:面向容器和 Serverless Computing 的存储创新

    *作者:徐立 云原生的创新源泉 云原生趋势下,应用容器化比例正在快速增长,Kubernetes 也已成为云原生时代新的基础设施. Forrester 预测到 2022 年,全球组织/公司在生产环境运行 ...

  8. 【论文总结】[ATC '18] SAND:A high-performance serverless computing platform

    SAND:A high-performance serverless computing platform 这是一篇来自ATC18的文章.这篇文章主要,介绍了一种高性能无服务器计算平台.有关Serve ...

  9. Serverless computing

    无服务计算 定义 无服务器计算:是一种云计算执行模型,其中云提供商代表客户管理服务器,并按需分配机器资源. 注意:Serverless 和直觉上的含义相背,在serverless computing中 ...

最新文章

  1. Levenshtein 相似度算法——Levenshtein(编辑距离)
  2. 你一定不能错过,Java视频全套
  3. 基本数据结构篇(三万字总结)
  4. 多元化思维其二:“马太效应”之道
  5. Storm编程模型总结
  6. 数学公式识别:基于编码-解码模型
  7. 【记录】PS立体透明字效果
  8. pytorch: 将一序列操作串联
  9. 保存界面cd的内容图片到本地
  10. State Street以26亿美元收购资产管理IT供应商Charles River
  11. wordpress数据字典
  12. 看Spring实战有感(一)
  13. 一文告诉你 K8s PR (Pull Request) 怎样才能被 merge?
  14. 【C进阶】之动态内存分配及内存操作函数
  15. 公寓宽带服务器无响应,学生宿舍公寓网络建设项目需求分析报告文档(8页)-原创力文档...
  16. mysql慢sql分析平台_慢SQL分析工具 - __KK的个人空间 - OSCHINA - 中文开源技术交流社区...
  17. 资深猎头:面试前要做十四件事
  18. (day9) 自学Java——常用API
  19. gitlab两种连接方式:ssh和http配置介绍 --转自 散尽浮华
  20. 什么是AIM短信?AIM短信是怎么发送的?

热门文章

  1. 加速数据读取的利器-缓存及分布式存储
  2. 字节输出流写多个字节的方法
  3. c语言指针心得6,c语言指针的学习心得
  4. 自己动手写一个 SimpleVue
  5. 大数据,大格局,大发展
  6. 【Todo】Zookeeper系列文章
  7. 安卓开源项目周报0215
  8. VS2010+WinXP+MFC程序 无法定位程序输入点于动态链接库
  9. {在头值中找到无效的字符。} 发email的时候 遇到这个问题 老师解决
  10. java 正确使用 Volatile 变量