tomoya06 / web-developer-guidance

Actually it's just a notebook for keeping down some working experience.
4 stars 0 forks source link

BFF & Serverless #32

Open tomoya06 opened 4 years ago

tomoya06 commented 4 years ago

BFF

BFF

BFF,全称Backend for Frontend。一种开发模式。简单来说,就是为前端应用单独开发一套后台接口。这一模式可以让同一套后台系统适配多种不同的前端应用。

image

上图来自BFF提出者Sam Newman的博客

分析

参考掘金博客,BFF有以下优势:

  1. 可以降低沟通成本:后端同学追求解耦,希望客户端应用和内部微服务不耦合,通过引入BFF这中间层,使得两边可以独立变化
  2. 多端应用适配

也有以下痛点:

  1. 重复开发:每个设备开发一个 BFF 应用,也会面临一些重复开发的问题展示,增加开发成本
  2. 维护问题:需要维护各种 BFF 应用。以往前端也不需要关心并发,现在并发压力却集中到了 BFF 上
  3. 链路复杂:流程变得繁琐,BFF引入后,要同时走前端、服务端的研发流程,多端发布、互相依赖,导致流程繁琐
  4. 浪费资源:BFF层多了,资源占用就成了问题,会浪费资源,除非有弹性伸缩扩容
tomoya06 commented 4 years ago

Serverless

Serverless是解决BFF痛点的一种方案。介绍Serverless之前需要对整个SOA和Everything as a Service体系做个简单了解。

1. SOA

面向服务的体系结构(英语:service-oriented architecture)是一种分布式运算的软件设计方法。它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构件在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。

2. Everything as a service

SOA主张Everything as a service,据此云计算供应商也对不同层级的功能模型提供了对应的AAS。根据抽象程度由低到高,有如下服务:

下图是云计算堆栈的结构。

image

IAAS

IaaS(Infrastructure as a Service基础设施即服务)是指把IT基础设施作为一种服务通过网络对外提供。在这种服务模型中,用户不用自己构建一个数据中心,而是通过租用的方式来使用基础设施服务,包括服务器、存储和网络等。

PAAS

平台即服务(Platform as a Service)是一种云计算服务,提供运算平台与解决方案堆栈即服务。在云计算的典型层级中,平台即服务层介于软件即服务与基础设施即服务之间。 平台即服务提供用户能将云基础设施部署与创建至客户端,或者借此获得使用编程语言、程序库与服务。用户不需要管理与控制云基础设施,包含网络、服务器、操作系统或存储,但需要控制上层的应用程序部署与应用托管的环境。

SAAS

软件即服务(英语:Software as a Service),亦可称为“按需即用软件”(即“一经要求,即可使用”),它是一种软件交付模式。在这种交付模式中,软件仅需通过网络,不须经过传统的安装步骤即可使用,软件及其相关的数据集中托管于云端服务。用户通常使用精简客户端,一般即经由网页浏览器来访问、访问软件即服务。

比较

对以上三种模型,亚马逊AWS给出了他们的说明:

image

从维护管理的角度来看,三者的区别如下

image

三者常见的案例如下:

Platform Type Common Examples
SaaS Google Apps, Dropbox, Salesforce, Cisco WebEx, Concur, GoToMeeting
PaaS AWS Elastic Beanstalk, Windows Azure, Heroku, Force.com, Google App Engine, Apache Stratos, OpenShift
IaaS DigitalOcean, Linode, Rackspace, Amazon Web Services (AWS), Cisco Metapod, Microsoft Azure, Google Compute Engine (GCE)

3. Serverless Computing

无服务器计算(Serverless Computing)是指在构建和运行应用时无需管理服务器等基础设施。它描述了一个更细粒度的部署模型,在该模型中,应用被拆解为一个或多个细粒度的函数被上传到一个平台,然后根据当前所需执行、扩展和计费。

无服务器计算并不意味着我们不再使用服务器来承载和运行代码,也不意味着不再需要运维工程师。而是指无服务器计算的消费者不再需要花费时间和资源在服务器配置、维护、更新、扩展和容量规划上。所有这些任务和功能都由无服务器平台处理,并且完全从开发人员和IT/操作团队中抽象出来。因此,开发人员专注于编写应用程序的业务逻辑。运营工程师能够将他们的重点提升到更关键的业务任务上。 

Serverless Computing通常分为以下两种类型,BAAS和FAAS,功能上两者会有重叠。

BAAS

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

BaaS 服务都是领域通用的远程组件(而不是进程内的库),可以以 API 的形式使用,通常会使用大量的第三方服务。例如借助Auth0和Amazon Cognito等产品来实现认证和用户管理。

FAAS

FaaS(Function as a Service,函数即服务)是一种构建和部署服务端软件的新方式,面向部署单个的函数或者操作。AWS的Lambda是如今被采用得最广泛的FaaS实现。

传统的服务端软件部署流程如下:

  1. 先要有一个主机实例,一般是一个虚拟机(VM)或者容器
  2. 把应用部署在主机上,应用以一个操作系统进程的形式运行在实例上

FaaS改变了这种部署模式,去掉了主机实例和应用进程,仅关注表达应用逻辑的那些操作或者函数。FaaS本质上是事件驱动的服务:

  1. 开发者把这些函数上传至由云厂商提供的FaaS平台。
  2. 函数只会在需要的时候才运行,其余时间保持空闲。开发者可以在平台上配置对应的触发事件。
  3. 一旦该事件发生,平台就会实例化这些函数,然后再用这个触发事件来调用该函数。
  4. 待这个函数执行完毕,FaaS平台就可以销毁这个实例