Open tomoya06 opened 4 years ago
Serverless是解决BFF痛点的一种方案。介绍Serverless之前需要对整个SOA和Everything as a Service体系做个简单了解。
面向服务的体系结构(英语:service-oriented architecture)是一种分布式运算的软件设计方法。它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构件在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
SOA主张Everything as a service,据此云计算供应商也对不同层级的功能模型提供了对应的AAS。根据抽象程度由低到高,有如下服务:
下图是云计算堆栈的结构。
IaaS(Infrastructure as a Service基础设施即服务)是指把IT基础设施作为一种服务通过网络对外提供。在这种服务模型中,用户不用自己构建一个数据中心,而是通过租用的方式来使用基础设施服务,包括服务器、存储和网络等。
平台即服务(Platform as a Service)是一种云计算服务,提供运算平台与解决方案堆栈即服务。在云计算的典型层级中,平台即服务层介于软件即服务与基础设施即服务之间。 平台即服务提供用户能将云基础设施部署与创建至客户端,或者借此获得使用编程语言、程序库与服务。用户不需要管理与控制云基础设施,包含网络、服务器、操作系统或存储,但需要控制上层的应用程序部署与应用托管的环境。
软件即服务(英语:Software as a Service),亦可称为“按需即用软件”(即“一经要求,即可使用”),它是一种软件交付模式。在这种交付模式中,软件仅需通过网络,不须经过传统的安装步骤即可使用,软件及其相关的数据集中托管于云端服务。用户通常使用精简客户端,一般即经由网页浏览器来访问、访问软件即服务。
对以上三种模型,亚马逊AWS给出了他们的说明:
从维护管理的角度来看,三者的区别如下:
三者常见的案例如下:
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) |
无服务器计算(Serverless Computing)是指在构建和运行应用时无需管理服务器等基础设施。它描述了一个更细粒度的部署模型,在该模型中,应用被拆解为一个或多个细粒度的函数被上传到一个平台,然后根据当前所需执行、扩展和计费。
无服务器计算并不意味着我们不再使用服务器来承载和运行代码,也不意味着不再需要运维工程师。而是指无服务器计算的消费者不再需要花费时间和资源在服务器配置、维护、更新、扩展和容量规划上。所有这些任务和功能都由无服务器平台处理,并且完全从开发人员和IT/操作团队中抽象出来。因此,开发人员专注于编写应用程序的业务逻辑。运营工程师能够将他们的重点提升到更关键的业务任务上。
Serverless Computing通常分为以下两种类型,BAAS和FAAS,功能上两者会有重叠。
BaaS(Backend as a Service,后端即服务)是指我们不再编写和/或管理所有服务端组件。与虚拟实例和容器相比,在概念上它更接近SaaS(软件即服务)。与SaaS相比,SaaS主要是业务流程的外包——HR、销售工具,或者从技术端来讲,像Github这样的产品,而BaaS则是要把应用拆分为更小的颗粒,其中一部分完全使用外部产品实现。
BaaS 服务都是领域通用的远程组件(而不是进程内的库),可以以 API 的形式使用,通常会使用大量的第三方服务。例如借助Auth0和Amazon Cognito等产品来实现认证和用户管理。
FaaS(Function as a Service,函数即服务)是一种构建和部署服务端软件的新方式,面向部署单个的函数或者操作。AWS的Lambda是如今被采用得最广泛的FaaS实现。
传统的服务端软件部署流程如下:
FaaS改变了这种部署模式,去掉了主机实例和应用进程,仅关注表达应用逻辑的那些操作或者函数。FaaS本质上是事件驱动的服务:
BFF
BFF
BFF,全称Backend for Frontend。一种开发模式。简单来说,就是为前端应用单独开发一套后台接口。这一模式可以让同一套后台系统适配多种不同的前端应用。
上图来自BFF提出者Sam Newman的博客。
分析
参考掘金博客,BFF有以下优势:
也有以下痛点: