小编说:软件行业是一个飞速发展的行业,不断推出新技术,以及令人目不暇接的概念和术语。厘清各种概念和术语的含义,对于分析技术发展趋势,决定是否需要及时入坑很有必要。今天我们就来聊一聊最近被热烈讨论的Serverless,以及与之相关的两个概念BaaS及FaaS。本文编译自What’s Serverless?(O’Reilly电子书)作者:Mike Roberts,John Chapin。

  国内外的各大云厂商 Amazon、微软、Google、IBM、阿里云、腾讯云相继推出Serverless产品,Serverless实际上涵盖了很多技术,可以分为两类:BaaS和FaaS。

BaaS

  BaaS(Backend as a Service,后端即服务)是指我们不再编写和/或管理所有服务端组件。与虚拟实例和容器相比,在概念上它更接近SaaS(软件即服务)。SaaS主要是业务流程的外包——HR、销售工具,或者从技术端来讲,像Github这样的产品,而BaaS则是要把应用拆分为更小的颗粒,其中一部分完全使用外部产品实现。

  BaaS 服务都是领域通用的远程组件(而不是进程内的库),可以以 API 的形式使用,深受移动 App 或者单页Web app开发团队的欢迎。因为这些团队通常会使用大量的第三方服务,否则他们就要自己花很多精力做这些事情。我们来看一些例子。

  Google Firebase是完全由云厂商(Google)管理的数据库,可以直接在移动或者Web应用中使用,而无须经过我们自己的中间层应用服务器。这解释了BaaS的一个方面:用服务替我们管理数据组件。

  BaaS服务还允许我们倚赖其他人已经实现的应用逻辑。对于这点,认证就是一个很好的例子。很多应用都要自己编写实现注册、登录、密码管理等逻辑的代码,而其实对于不同的应用这些代码往往大同小异。完全可以把这些重复性的工作提取出来,再做成外部服务,而这正是Auth0和Amazon Cognito等产品的目标。它们能实现全面的认证和用户管理,开发团队再也不用自己编写或者管理实现这些功能的代码。

  BaaS这个词是随着移动应用开发火起来的。事实上,它有时指的是MBaaS(Mobile Backend as a Service)。然而,使用完全托管在外部的产品来开发应用,这个理念并不是移动开发,或者更一般地说,前端开发,所独有的。比如,我们可以不再管理EC2机器上的MySQL数据库服务器,转而使用Amazon的RDS服务,或者我们可以用Kinesis取代我们自己的Kafka消息总线。其他数据基础设施服务还有:文件系统/对象存储(如Amazon S3)、数据仓库(如Amazon Redshift),而更面向逻辑的服务,比如语音分析(如Amazon Lex)以及前面提到的认证,也可以直接在服务端组件中使用。这其中有很多服务都可以认为是Serverless,但并非全部都是。

FaaS/Serverless计算

  事实上,Serverless 还有一半是 FaaS(Function asa Service,也即函数即服务)。FaaS 是Compute as a Service(计算即服务)的一种形式。事实上,有些人(特别是AWS)说FaaS就是Serverless计算。当然,不可否认,AWS的Lambda是如今被采用得最广泛的FaaS实现。

  FaaS是一种构建和部署服务端软件的新方式,面向部署单个的函数或者操作。关于Serverless许多时髦的词儿都来自FaaS。很多人认为Serverless就是FaaS,其实他们是只知其一不知其二。

  我们部署服务端软件的传统方式都是这样开始的:先要有一个主机实例,一般是一个虚拟机(VM)或者容器(见图1),然后把应用部署在主机上。如果主机是VM或者容器,那么我们的应用就是一个操作系统进程。通常我们的应用里包含各种相关操作的代码——比如一个Web服务可能要收回和更新资源。

图1 传统服务端软件的部署

  FaaS改变了这种部署模式(见图2)。我们去掉主机实例和应用进程,仅关注表达应用逻辑的那些操作或者函数。我们把这些函数上传至由云厂商提供的FaaS平台。

图2 FaaS软件部署

  但是在一个服务器进程中,函数不是一直处于运行状态的,它们只会在需要的时候才运行,其他时间都是空闲状态(见图3)。我们可以对FaaS平台进行配置,让它为每一个操作监听特定事件。一旦该事件发生,平台就会实例化Lambda函数,然后再用这个触发事件来调用该函数。

图3 FaaS函数生命周期

  一旦这个函数执行完毕,FaaS平台就可以随意销毁它。或者,平台将其保留一会儿,直到有另一个事件需要处理。

  FaaS本质上是事件驱动的途径。除了提供一个平台保存和执行代码,FaaS供应商还会将各种同步和异步事件源集成起来。比如 HTTP API Gateway 就是一个同步源;而托管的消息总线、对象存储,或者协调的事件就是异步源。

  2014年秋 Amazon 发布了 AWS Lambda,经过3年时间,该产品已经逐渐成熟,开始被一些企业采纳。有些Lambda函数的使用量非常少,一天就几次,而也有些公司使用Lambda每天处理数十亿事件。截至本文写作之时,Lambda已经集成了15种以上的不同事件源,可以满足各种不同应用的需求。

  除了大家所熟识的 AWS Lambda 之外,微软、IBM及Google等大公司,以及一些更小的厂商比如Auth0,也提供商业FaaS。正如各种Computer-as-a-Service平台(IaaS、PaaS、Container-as-a-Service)一样,现在也有一些开源FaaS项目,你可以在自己的硬件或者公有云平台上运行。目前这类私有FaaS还处于混战时代,并没有明显的冒尖者。Galactic Fog、IronFunctions及Fission(使用的是Kubernetes),以及IBM公司自己的OpenWhisk均属于开源系的FaaS。

Serverless的关键

  从表面上看,BaaS和FaaS是两码事——前者是把应用中的各个部分完全外包出去,后者是一种新的运行代码的托管环境。那么,为什么要把它们都划归为Serverless呢?关键在于,它们都不需要你管理自己的服务器主机或者服务器进程。一个完全Serverless的app不需要你考虑架构中的任何东西。你的应用逻辑——不管是自己编程实现,还是使用第三方服务集成——运行在一个完全弹性的操作环境里。你的状态也是以同样弹性的形式存储的。

  Serverless并不意味着没有服务器,而是你不需要操心服务器相关的事情。

跨越式变革

  Serverless是变革。过去十年来,我们已经把应用和环境中很多通用的部分变成了服务。Serverless也有这样的趋势——如把主机管理、操作系统管理、资源分配、扩容,甚至是应用逻辑的全部组件都外包出去,把它们都看作某种形式的商品——厂商提供服务,我们掏钱购买。这是云计算向纵深发展的一种自然而然的过程。

  但是,Serverless给应用架构带来巨大的变化。直到现在,大多数云服务并没有从根本上改变我们设计应用的方式。比如,使用Docker时,把一个小“箱子”放到应用边上,但是它仍然是一个箱子,而我们的应用也没有显著改变。当我们把自己的MySQL实例托管到云上时,还是要思考需要怎样的虚拟机来处理负载,考虑故障转移问题。

  Serverless带来跃进式的变化。Serverless FaaS开启的是一种全新的应用架构,完全由事件驱动。更细粒度的部署,需要在 FaaS 组件外面持久化状态。Serverless BaaS把我们从编写逻辑组件中解放出来,但是我们必须将应用与云厂商提供的特定接口与模式集成。

  说一千道一万,Serverless应用如此特别,它长什么样呢?有什么优缺点,适合什么样的场景呢?只有自己做一个应用来亲身体会一下,才有发言权。

  以上内容节选自《Serverless架构:无服务器单页应用开发》,点此链接可在博文视点官网查看此书。
                  
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                    

BaaS、FaaS、Serverless都是什么馅儿?相关推荐

  1. 深入理解无服务器架构(Faas/Serverless)

    摘要 无服务器架构(Faas/Serverless),是软件架构领域的热门话题. AWS,Google Cloud和Azure - 在无服务器上投入了大量资金,已经在看到了大量专门针对Faas/Ser ...

  2. 离开字节跳动的年轻人,不是所有人都适合“字节范儿”

    散落在字节系之外的社交平台上的吐槽和经验,成为了字节崛起的另外一面镜子,不是所有人都适合"字节范儿". "字节一年,人间三年." 这是小红书里的一条高赞评论.在 ...

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

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

  4. IT行业中,APaaS、SaaS、BaaS、DaaS都是什么

    时下,随着云计算.大数据.移动.社交.智能等新一代计算技术的应用,生态成为to B市场的热点话题,甚至很多企业表现出无生态不发展的感觉,然而面对众多的"生态",众多的技术术语概念. ...

  5. IaaS, PaaS, SaaS, BaaS, Faas

    aaS 是 As-a-Service 即为服务 的意思. IaaS (Infrastructure as a Service) wikipedia:基础设施即服务 服务商提供底层/物理层基础设施资源( ...

  6. Java游戏心得 - 一口咬不到馅儿

    假期1个月时间,差不多有一半都花在了做Java游戏程序上面.到现在,虽然说能做些小东西出来了吧,有一些心得,但还是感不太透彻,写不出什么东西来. 高中时学习物理,超级有感觉.每一个章节就那么些东西,只 ...

  7. FaaS — Serverless — 实现原理

    目录 文章目录 目录 请求驱动(Request-driven)技术 分布式运行时技术 请求驱动(Request-driven)技术 请求驱动(Request-driven),就是支持基于请求的动态弹性 ...

  8. 让业务感知不到服务器的存在——基于弹性计算的无服务器化实践

    导读:2018年7月6 - 7日,一年一度的技术圈盛会ArchSummit全球架构师峰会在深圳华侨城洲际酒店举办.100余位国内外技术专家将齐聚深圳,分享各类技术架构最佳实践.来自腾讯技术工程事业群架 ...

  9. Serverless 是什么?BaaS 和 FaaS 是什么?

    前言 本文隶属于专栏<大数据理论体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据理论体系 概览 Serverless ...

  10. Serverless 在大厂都怎么用?

    点击可观看精彩演讲视频 主持嘉宾: 中国信息通信研究院 云计算部副主任.腾讯云TVP,陈屹力 圆桌嘉宾: - Amazon Web Services 首席开发者布道师,费良宏 - 阿里集团 Serve ...

最新文章

  1. datanucleus mysql_DataNucleus Access Platform 3.1.2发布
  2. error: unknown host service 的详细解决办法
  3. 在lamp环境实现nfs中的wordpress使用
  4. Google论文解读:轻量化卷积神经网络MobileNetV2 | PaperDaily #38
  5. 2018.5.5信息安全铁人三项赛数据赛复现
  6. 生成下拉框的几种方法总结——数据来源:枚举
  7. 解决Linux Fedora 虚拟机root用户登录提示鉴定故障的问题
  8. Linux运维日常命令
  9. Grasshopper 0.9汉化版下载 【Rhino5.0参数化插件】
  10. re2020 bt2020_如何在2020年选择最佳博客平台(比较)
  11. ## STAMP使用中数据上传注意事项
  12. java俄罗斯方块旋转_java俄罗斯方块旋转算法,求解
  13. 筛选两张表中id不同的数据
  14. PHP 记录访客的浏览信息
  15. 军团要塞2正版服务器,Team Fortress 2
  16. QT——开发入门简介
  17. PMP考试关键字和黄金法则大全
  18. unity urp 实现衣服绒毛效果
  19. matlab三相短路电流计算程序_电力系统三相短路计算的MATLAB代码
  20. 使用软碟通软件制作U盘启动盘

热门文章

  1. 基于微信电影播放小程序系统设计与实现 开题报告
  2. 国内的 App 推广渠道有哪些?
  3. 了解Xcelsius2008系统
  4. kodi没有中文设置_超详细带你解决KODI找不到中文的问题(XB0X ONE/安卓通用)
  5. 【NOIP2016提高A组五校联考4】ksum
  6. 统一网关Gateway
  7. html css 画梯形,css怎么画梯形?
  8. 高并发场景设计与解决方案
  9. 微博、微信和QQ OAuth2.0开发记录
  10. Netty从使用到源码7_粘包半包协议与实战项目