Differences between revisions 1 and 2
Revision 1 as of 2019-04-25 05:05:54
Size: 2590
Editor: twotwo
Comment:
Revision 2 as of 2019-05-09 18:13:30
Size: 6417
Editor: twotwo
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
||Back to [[CloudComputing]]|| ||Back to [[CloudComputing|Cloud Computing]]、[[Microservices|微服务]]||See Also [[Node.js]]||
Line 8: Line 8:

== 什么是 Serverless ==
使用BaaS和FaaS是Serverless应用的基本特征,符合这两个基本特征的应用可称为Serverless应用。其中:
 * 使用了公共云提供的对象存储和数据库服务,称为 '''BaaS'''(Backend as a Service,后端即服务);
 * 使用了诸如 Lambda 框架或函数沙箱服务,称为 '''FaaS'''(Functions as a Service,函数即服务)
Line 38: Line 43:
 * Standards  * '''Standards''' CNCF Serverless 白皮书/Serverless Framework 框架
Line 40: Line 45:

== Slide ==
=== 专访阿里亚顿:Serverless 正在颠覆开发模式,包括对工种的定义 ===

==== 采用 Serverless 理念对 BFF 层进行改造 ====
''在蚂蚁金服,我们更多把 Node 定位为 BFF 层实现,BFF 是 Backend For Frontend 的缩写,翻译成用户体验适配层。

BFF 模式下,整体分工很清晰,后端通过 Java 等语言负责服务实现,理想情况下给前端提供的是基于领域模型的 RPC 接口,前端则在 BFF 层直接调用服务端 RPC 接口拿到数据,按需加工消费数据,并实现人机交互。基于 BFF 模式的研发,很适合拥有前端技术背景的全栈型工程师。这种模式的好处很明显,后端可以专注于业务领域,更多从领域模型的视角去思考问题,页面视角的数据则交给前端型全栈工程师去搞定。领域模型与页面数据是两种思维模式,通过 BFF 可以很好地解耦开,让彼此更专业高效。''

[[https://mp.weixin.qq.com/s/IYddaaw2ps1wR2VT1dZWPg||target="_blank"]] 蚂蚁金服玉伯:我们是如何从前端技术进化到体验科技的?

亚顿说,在传统基于 Node.js 的 BFF 层,其痛点主要在于存在较高的发布和运维成本,而引入 Serverless 的关键目标就是要解决这两个问题。因此,为了提高发布速度、降低运维成本,团队将 BFF 层的函数全部转换为可动态执行的脚本并保存到数据库中,同时提供统一入口用于函数的路由分发,这是阿里团队改造中最核心的功能。围绕这一核心,为了能提高用户体验以及开发效率,团队还打造了针对用户的统一入口和针对开发者的控制台。

==== Serverless 架构分层设计实践 ====
{{attachment:ali-front.png||width="80%"}}

在架构分层中,主要包含运行与开发两种时态。在运行时阿里团队将其分为 FaaS 和 BaaS 这两大核心模块,即提供安全运行函数片段能力的 function sandbox runtime 和可以在函数中调用各种后端服务的 BaaS Service,其关注的重点是稳定和能力。而在开发时,主要提供了支持在线开发、配置、调试、发布、回滚、监控等能力的一站式开发者控制台及独立 CLI,使开发者可以轻松创建和管理函数,其注重的是开发者的体验。

首先,目前进行 BFF 实践的团队或公司,几乎无一例外都采用了 Node.js 来实现,其实这并不是偶然。BFF 就是 UI 的粘合层,而 UI 通常都由前端人员在开发和维护,所以 BFF 层也自然由前端人员采用了对其来说比较顺手的工具来实现。所以,这是最重要的实践理念:服务自治,即吃自己的狗食。其次,对于 BFF 层的价值,是将后端服务聚合和裁剪,为 UI 提供 API。故第二个实践理念:BFF 只处理 UI 逻辑,业务逻辑下沉至后端服务。在不同公司由于基础设施和场景不同,所以很难存在一种标准化的实践方案,但整体方案上只要不偏离上面两个理念,我们认为这就是当前场景下的最佳实践。
Line 43: Line 67:
 * [[https://www.infoq.cn/article/8JE5FgHt1PIM*eqSUMfw||target="_blank"]] 专访阿里亚顿:Serverless 正在颠覆开发模式,包括对工种的定义

Back to Cloud Computing微服务

See Also Node.js

无服务器计算

无服务器计算是一种云计算执行模型,云提供商在其中运行服务器,并动态管理机器资源的分配。定价是基于应用程序实际消耗的资源数量,而不是基于预先购买的容量单位。它可以是效用计算的一种形式。

无服务器计算可以简化将代码部署到生产环境中的过程。扩展、容量规划和维护操作可能对开发人员或操作人员隐藏。无服务器代码可以与部署在传统样式(如微服务)中的代码一起使用。或者,可以将应用程序编写为完全无服务器的,并且完全不使用所提供的服务器。

1. 什么是 Serverless

使用BaaS和FaaS是Serverless应用的基本特征,符合这两个基本特征的应用可称为Serverless应用。其中:

  • 使用了公共云提供的对象存储和数据库服务,称为 BaaS(Backend as a Service,后端即服务);

  • 使用了诸如 Lambda 框架或函数沙箱服务,称为 FaaS(Functions as a Service,函数即服务)

2. 服务类型

2.1. Serverless Runtimes

大多数(但不是所有)无服务器供应商提供计算运行时,也称为功能即服务(function as a service, FaaS)平台,它执行应用程序逻辑,但不存储数据。第一个“pay as you go”代码执行平台是Zimki,于2006年发布,但在商业上并不成功。2008年,谷歌发布了谷歌App Engine,它为使用自定义Python框架但不能执行任意代码的应用程序提供了计费功能。PiCloud于2010年发布,提供了对Python的FaaS支持。

亚马逊公司在2014年推出AWS Lambda,是最早提供这个服务的供应商。

谷歌云平台自2016年开始提供谷歌云功能。

自2016年以来,IBM在公共IBM Cloud中提供IBM Cloud功能。

2.2. Serverless Databases

最近几年出现了几个没有服务器的数据库。这些系统将无服务器执行模型扩展到RDBMS,从而消除了提供或扩展虚拟或物理数据库硬件的需要。

Azure Data Lake是一个高度可伸缩的数据存储和分析服务。该服务托管在微软的公共云服务Azure中。Azure Data Lake Analytics提供了一个分布式基础设施,可以动态分配或反分配资源,这样客户只需为他们使用的服务付费。

谷歌云数据存储是一个最终一致的文档存储。它将谷歌App Engine的数据库组件作为一个独立的服务提供。Firebase也归谷歌所有,它包括一个分层数据库,可以通过固定和即付即用计划使用。

3. 优缺点

3.1. Advantages

  • Cost
  • Elasticity versus scalability
  • Productivity

3.2. Disadvantages

  • Performance
  • Resource limits
  • Monitoring and debugging
  • Security
  • Privacy
  • Standards CNCF Serverless 白皮书/Serverless Framework 框架

  • Vendor lock-in

4. Slide

4.1. 专访阿里亚顿:Serverless 正在颠覆开发模式,包括对工种的定义

4.1.1. 采用 Serverless 理念对 BFF 层进行改造

在蚂蚁金服,我们更多把 Node 定位为 BFF 层实现,BFF 是 Backend For Frontend 的缩写,翻译成用户体验适配层。

BFF 模式下,整体分工很清晰,后端通过 Java 等语言负责服务实现,理想情况下给前端提供的是基于领域模型的 RPC 接口,前端则在 BFF 层直接调用服务端 RPC 接口拿到数据,按需加工消费数据,并实现人机交互。基于 BFF 模式的研发,很适合拥有前端技术背景的全栈型工程师。这种模式的好处很明显,后端可以专注于业务领域,更多从领域模型的视角去思考问题,页面视角的数据则交给前端型全栈工程师去搞定。领域模型与页面数据是两种思维模式,通过 BFF 可以很好地解耦开,让彼此更专业高效。

https://mp.weixin.qq.com/s/IYddaaw2ps1wR2VT1dZWPg 蚂蚁金服玉伯:我们是如何从前端技术进化到体验科技的?

亚顿说,在传统基于 Node.js 的 BFF 层,其痛点主要在于存在较高的发布和运维成本,而引入 Serverless 的关键目标就是要解决这两个问题。因此,为了提高发布速度、降低运维成本,团队将 BFF 层的函数全部转换为可动态执行的脚本并保存到数据库中,同时提供统一入口用于函数的路由分发,这是阿里团队改造中最核心的功能。围绕这一核心,为了能提高用户体验以及开发效率,团队还打造了针对用户的统一入口和针对开发者的控制台。

4.1.2. Serverless 架构分层设计实践

ali-front.png

在架构分层中,主要包含运行与开发两种时态。在运行时阿里团队将其分为 FaaS 和 BaaS 这两大核心模块,即提供安全运行函数片段能力的 function sandbox runtime 和可以在函数中调用各种后端服务的 BaaS Service,其关注的重点是稳定和能力。而在开发时,主要提供了支持在线开发、配置、调试、发布、回滚、监控等能力的一站式开发者控制台及独立 CLI,使开发者可以轻松创建和管理函数,其注重的是开发者的体验。

首先,目前进行 BFF 实践的团队或公司,几乎无一例外都采用了 Node.js 来实现,其实这并不是偶然。BFF 就是 UI 的粘合层,而 UI 通常都由前端人员在开发和维护,所以 BFF 层也自然由前端人员采用了对其来说比较顺手的工具来实现。所以,这是最重要的实践理念:服务自治,即吃自己的狗食。其次,对于 BFF 层的价值,是将后端服务聚合和裁剪,为 UI 提供 API。故第二个实践理念:BFF 只处理 UI 逻辑,业务逻辑下沉至后端服务。在不同公司由于基础设施和场景不同,所以很难存在一种标准化的实践方案,但整体方案上只要不偏离上面两个理念,我们认为这就是当前场景下的最佳实践。

5. Reference

MainWiki: Serverless_Computing (last edited 2019-05-09 18:13:30 by twotwo)