架构思维成长系列教程(六)- Serverless架构初探

背景

技术圈中的人们一般称呼 Serverless 为“无服务器架构”。Serverless 不是具体的一个编程框架、类库或者工具。

内容

什么是 Serverless?

简单来说,Serverless 是一种软件系统架构思想和方法。

它的核心思想是:用户无须关注支撑应用服务运行的底层机制。这种架构的思想和方法将对未来软件应用的设计、开发和运营产生深远的影响。

所谓“无服务器”,并不是说基于 Serverless 架构的软件应用不需要服务器就可以运行,其指的是用户无须关心软件应用运行涉及的底层服务器的状态、资源(比如 CPU、内存、磁盘及网络)及数量。软件应用正常运行所需要的计算资源由底层的云计算平台动态提供。

Serverless 与传统架构区别

在传统的场景里,当用户完成了应用开发后,软件应用将被部署到指定的运行环境,用户会申请一定数量、一定规格(包含一定数量的 CPU、内存及存储空间)的服务器以满足该应用的正常运行。当应用上线后,根据实际的运营情况,用户可能会申请更多的服务器资源进行扩容,以应对更高的访问量。

在 Serverless 架构下,情况则截然不同。

  • 当用户完成应用开发后,软件应用将被部署到指定的运行环境,这个运行环境不再是具体的一台或多台服务器,而是支持 Serverless 的云计算平台。有客户端请求到达或特定事件发生时,云计算平台负责将应用部署到某台 Serverless 云计算平台的主机中。
  • Serverless 云计算平台保证该主机提供应用正常运行所需的计算资源。在访问量升高时,云计算平台动态地增加应用的部署实例。当应用空闲一段时间后,云计算平台自动将应用从主机中卸载,并回收资源。

Serverless 带来的价值

一项技术被广泛认可和采纳的原因,往往不是因为这项技术有多新鲜或多酷,最重要的推动力是其能为业务带来巨大的商业或经济价值。

Serverless 的价值体现在以下几个方面:

第一,降低运营复杂度

Serverless 架构使软件应用和服务器实现了解耦,服务器不再是用户开发和运营应用的焦点。在应用上线前,用户无须再提前规划服务器的数量和规格。在运维过程中,用户无须再持续监控和维护具体服务器的状态,只需要关心应用的整体状态。

第二,降低运营成本

Serverless 的应用是按需执行的。应用只在有请求需要处理或者事件触发时才会被加载运行,在空闲状态下 Serverless 架构的应用本身并不占用计算资源。

在 Serverless 架构下,用户只需要为处理请求的计算资源付费,而无须为应用空闲时段的资源占用付费。这个特点将为大规模使用公有云服务的用户节省一笔可观的开销。

第三,缩短产品的上市时间

在 Serverless 架构下,应用的功能被解构成若干个细颗粒度的无状态函数,功能与功能之间的边界变得更加清晰,功能模块之间的耦合度大大减小。这使得软件应用的开发效率更高,应用开发的迭代周期更短。

Serverless 架构应用的上市时间(Time To Market,TTM)将大大减少。

第四,增强创新能力

应用的开发和部署效率的提升,使得用户可以用更短的时间、更少的投入尝试新的想法和创意。

Serverless 的技术特点

  • 按需加载。在 Serverless 架构下,应用的加载(load)和卸载(unload)由 Serverless 云计算平台控制。这意味着应用并不总是一直在线的。只有当有请求到达或者有事件发生时才会被部署和启动。
  • 事件驱动。通过将不同事件来源(Event Source)的事件(Event)与特定的函数进行关联,实现对不同事件采取不同的反应动作,这样可以非常容易地实现事件驱动(Event Driven)架构。
  • 状态非本地持久化。应用不再与特定的服务器关联。因此应用的状态不能,也不会保存在其运行的服务器之上。
  • 非会话保持。应用不再与特定的服务器关联。每次处理请求的应用实例可能是相同服务器上的应用实例,也可能是新生成的服务器上的应用实例。因此,Serverless 架构更适合无状态的应用。
  • 自动弹性伸缩。Serverless 应用原生可以支持高可用,可以应对突发的高访问量。应用实例数量根据实际的访问量,由云计算平台进行弹性的自动扩展或收缩。
  • 应用函数化。Serverless 架构下的应用会被函数化,但不能说 Serverless 就是 Function as a Service(FaaS)。
  • 依赖服务化。在 Serverless 架构下的应用依赖,应该服务化和无服务器化,也就是实现 Backend as a Service(BaaS)。所有应用依赖的服务都是一个个后台服务(Backend Service), 应用通过 BaaS 方便获取,而无须关心底层细节。和 FaaS 一样,BaaS 是 Serverless 架构实现 的另一个重要组件。

Serverless 的应用场景

1. Web 应用

Serverless 架构可以很好地支持各类静态和动态 Web 应用。通过 FaaS 的自动弹性扩展功能,Serverless Web 应用,可以很快速地构建出能承载高访问量的站点。

举一个有意思的例子:为了应对每 5 年一次的人口普查,某国政府耗资近 1000 万美元构建了一套在线普查系统。但是由于访问量过大,这个系统不堪重负而崩溃了。在一次编程比赛中, 两个大学生用了两天的时间和不到 500 美元的成本在公有云上构建了一套类似的系统。在压力测试中,这两个大学生的系统顶住了类似的压力。

2. 移动互联网

Serverless 应用通过 BaaS 对接后端不同的服务而满足业务需求,提高应用开发的效率。开发者可以通过函数快速地实现业务逻辑,而无须耗费时间和精力开发整个服务端应用。

3. 物联网

物联网(Internet of Things,IoT)应用需要对接各种不同的数量庞大的设备。不同的设备需要持续采集并传送数据至服务端。Serverless 架构可以帮助物联网应用对接不同的数据输入源。

4. 系统集成

Serverless 应用的函数式架构非常适合用于实现系统集成。用户无须像过去一样为了某些简单的集成逻辑而开发和运维一个完整的应用,用户可以更专注于所需的集成逻辑,只编写和集成相关的代码逻辑,而不是一个完整的应用。

Serverless 的局限

1. 控制力

对于一些希望掌控底层计算资源的应用场景,Serverless 架构并不是最合适的选择。

2. 可移植性

Serverless 应用的实现,依赖于 Serverless 平台及该平台上的 FaaS 和 BaaS 服务。不同 IT 厂商的 Serverless 平台和解决方案的具体实现并不相同。

3. 安全性

Serverless 架构下,用户不能直接控制应用实际所运行的主机。不同用户的应用,或者同一用户的不同应用在运行时可能共用底层的主机资源。对于一些安全性要求较高的应用,这将带来潜在的安全风险。

4. 性能

应用的首次加载及重新加载的过程将产生一定的延时。对于一些对延时敏感的应用,需要通过预先加载或延长空闲超时时间等手段进行处理。

5. 执行时长

大部分 Serverless 平台对 FaaS 函数的执行时长存在限制。因此 Serverless 应用更适合一些执行时长较短的作业。

最后:

总的来说,这种新兴的云计算服务交付模式,为开发人员和管理人员带来了许多好处。它提供了合适的灵活性和控制性级别,因而在 IaaS 和 PaaS 之间找到了一条中间的路,由于服务器端几乎没有什么要管理的,Serverless 架构正在彻底改变软件开发和部署领域,比如推动了 NoOps 模式的发展。

 

上一章教程

架构思维成长系列教程(五)- 微服务大型复杂系统的架构实践

该系列教程

架构思维成长系列教程

我的专栏

 

 

至此,全部介绍就结束了

 

 

-------------------------------

-------------------------------

 

我的CSDN主页

关于我(个人域名,更多我的信息)

我的开源项目集Github

 

期望和大家一起学习,一起成长,共勉,O(∩_∩)O谢谢

欢迎交流问题,可加个人QQ 469580884,

或者,加我的群号 751925591,一起探讨交流问题

不讲虚的,只做实干家

Talk is cheap,show me the code

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页