Serverless无服务器架构是微服务架构的表现形式

2019-08-18 02:00发布


在目前主流云计算IaaS和PaaS 平台中,开发人员进行业务开发时,仍然需要掌握相关的服务端开发工作,比如缓存、消息服务、Web应用服务器、数据库,以及对服务器进行性能优化,还需要考虑存储和计算资源,考虑负载均衡和横向扩展能力,考虑服务器容灾稳定性等非专业逻辑的开发。这些服务器的运维和开发知识、经验极大地限制了开发者进行业务开发的效率。

在这种情况下,不用去了解后端服务器而直接使用服务的架构,我们称之为Serverless架构。

1. Serverless架构平台概述

2016年6月,MikeRobers在MartinFowler的博客网站上发布了一篇题为“无服务器架构”的文章,引起了业界的诸多关注。在该文章中,他指出:“无服务器先用来描述那些显著或完全依赖于第三方应用或服务(“在云端”)的应用程序。这些应用程序依赖于第三方来管理服务器端逻辑和状态,它们都是典型“富客户端”的应用程序,并采用云平台提供的生态系统,包括可访问的数据库(如Parse、Firebase)、认证服务(Auth0、AWSCognito)等。……无服务器还表示那些有服务器端逻辑的应用仍然需要由开发者来编写。”

Serverless架构与传统架构不同。Serverless 架构从字面上理解是没有服务器的架构,实际上是由开发者实现的服务端逻辑运行在无状态的计算容器中,Serverless架构是由事件触发,短暂的,完全被第三方管理。其实这是一种构建和管理基于微服务架构的基础设施架构,允许在服务部署级别而不是服务器部署级别来管理应用部署。更加强调底层VM和OS的透明化,Serverless架构还有一个类同的名词叫FaaS,全称Function Platform as a Service(功能即服务架构)。

Serverless架构实际上是一种特殊的微服务基础框架平台,不但提供了微服务基础架构平台,甚至还提供了微服务基础设施,我们把这一类归为Serverless型基础框架平台,如AWS Lambda、Azure Functions(微软)等。

下面用一个案例简单说明一下Serverless架构的内容。例如图1是一个Serverless架构的案例说明。作为Client上的应用程序可以通过三种方式来获取数据。第一种方式是通过AuthenticationService的方式来获取数据。第二种方式是通过调用API网关来获取购买和查询功能的服务。第三种方式是直接访问数据库。对于Client而言,后端就是Serverlessarchitecture(没有服务器的架构)。

无服务器计算改变了应用程序开发,将重点放在应用程序逻辑而非基础架构上。零服务器管理,自动扩展以满足任何流量需求,并管理集成安全性,开发人员可以更快地行动,保持敏捷并专注于最重要的事情——构建优秀的应用程序。


图1 Serverless架构的案例说明

Serverless架构具有如下几个特点:(1)按需使用,按需计费。(2)易扩展和高可用;(3)不需要预先分配资源。(4)实现了细粒度的计算资源分配。(5)高度扩容和弹性。

2. 基于Serverless平台的开发过程

Serverless平台的开发过程。图2是函数计算的一个开发者操作流程:



图2 Serverless平台的开发过程图

Serverless平台的开发过程如下:

(1)开发者编写代码,支持的语言包括Java、JavaScript、Python、Go、PHP等。

(2)把代码上传到函数计算上,上传的方式有通过API或者SDK上传,也可以通过控制台UI界面上传,还可以通过命令行工具上传。

(3)通过API&SDK来触发函数计算执行,同样也可以通过云产品的事件源来触发函数计算执行。

(4)函数计算在执行过程中,会根据用户请请求量动态扩容函数计算来保证请求峰值的执行,这个过程对用户是透明无感知的。

(5)函数执行结束后,可以通过账单来查看执行费用,根据函数的实际执行时间按量计费。

3. Serverless平台优势和局限性

对于开发者和使用者而言,Serverless Architecture优势如下:

  • 零服务器,无服设计最明显的好处就是不需要维护服务器,无论是物理的还是虚拟的。
  • 易扩展和高可用,可以依靠云服务供应商来扩展自己的应用。因为应用能够通过切换占用资源(如吞吐量、内存) 的单位数来调整容量,故应用程序可自动扩展。同时有云服务供应商7×24小时守护着基础设施,无服务器应用程序默认情况下都是内置可用性和容错能力。
  • 微服务友好,可以在系统中引入特定的服务以实现自定义身份认证、验证或者异步数据处理等多种服务。
  • 完全使底层透明化,应用程序只与语言运行环境交互,无需关注硬件及操作系统。
  • 采用事件驱动,服务代码开发、部署在API请求下支持
  • 运营稳定,后端伸缩计算服务提供支撑。隔离性,健壮性相对较好。无须关心DevOps。
  • 无服务器的方式更便于构建和排错。正如CAP理论所述 ,应用服务在同一个网络的节点间传递消息,限制应用服务的是实现方式。

有利就有一弊,Serverless Architecture缺点如下:

  • 供应商锁定,一旦选中了云服务供应商,后期很难更改。
  • 多样化的日志。由于没有中心化设计,日志的记录必须由每个支撑应用的不同服务来实现。这些日志格式跟大部分应用服务器日志都不同。
  • 安全模型。采用多套安全模型,应用验证逻辑和安全验证逻辑必须分开实现。
文章来源: https://www.toutiao.com/group/6725595568451633671/