前言
近年来,云计算技术的快速发展推动了 IT 行业不断向前,而 Serverless 技术的兴起更是为开发者们带来了一个新的架构设计选择。但相信很多前端开发者对 Serverless 的概念还不是很熟悉,甚至对 PaaS 的理解也不是很清晰。本文将从 PaaS 切入 Serverless,探索这一架构设计的演变,以及最佳实践和应用场景。
一、PaaS 的架构设计
1. PaaS 的概念
PaaS 即 Platform as a Service,是云计算服务的一种,提供了一种为应用程序开发和部署提供的平台,以及开发和部署应用程序所需的各种工具和服务。简而言之,PaaS 就是将应用程序开发与部署过程中不需要关注的底层基础设施交由云服务提供商处理,而让开发者关注于自身应用程序的开发和维护。
2. PaaS 的架构设计
在 PaaS 的架构设计中,服务商会提供一系列的开发服务和部署环境,而对于开发者而言,他们只需要通过 API 或者 Web 界面等方式,对服务进行简单的设置即可完成对服务的调用和管理。下面我们将以 Azure 为例,简单介绍该平台的架构。
以 Azure App Service (Web App) 为例,其架构包含以下组件:
- Azure App Service,即应用服务。它是 PaaS 的核心组件之一,为开发者提供了应用部署和托管的能力。
- Azure App Service 的部署方案,包括 Git、GitHub、FTP、Dropbox 和 VSO 等多种方案,允许开发者选择自己熟悉的工具。
- Kudu 提供了一个 Web 界面及其 API,用以允许您管理和部署托管 Web 应用程序。
- Azure Redis Cache 为托管的 Web 应用程序提供了缓存。
虽然 PaaS 在应用程序的开发和部署过程中大大降低了开发者的负担,但其中仍然存在一些问题。例如,当我们试图扩展应用程序的功能时,可能需要在不同的应用程序中编写相同的代码;另外,一些应用程序会因为中间件动态扩容而导致成本剧增,这些问题都需要开发者自行解决。
二、Serverless 架构设计
1. Serverless 的概念
相对于 PaaS,Serverless 技术是一种更为轻量级的架构设计,消除了所有关于底层基础设施的考虑。拥有了 Serverless,开发者不需要考虑应用程序的部署、扩展和管理,只需要关注自身函数的开发。所有的 Serverless 函数都是按照请求处理的规则执行的,而开发者可以根据自身的需求,灵活地使用 Serverless 函数和服务。
2. Serverless 的架构设计
在 Serverless 的架构设计中,运行环境会预定义一些处理请求的函数,每个函数都具有独立的请求和响应能力。需要使用的函数可以直接上传至云服务商服务器,并通过 API 等方式直接调用。例如,AWS Lambda 是一种使用 Serverless 架构设计的云计算服务:
AWS Lambda 的架构设计包含以下组件:
- 事件源。即函数的触发器,并根据事件源的特殊属性扩展它们的功能。
- Lambda 函数代码,部署在 AWS Lambda 上,响应来自事件源的事件,执行计算任务,并对请求进行响应。
- Lambda 运行时环境,用于执行 Lambda 函数,并为您提供执行计算任务所需的所有资源,包括 CPU、网络连接、内存和其他系统资源。
需要强调的是,Serverless 并非完全摒弃底层基础设施,而是将其隐藏并对外提供 API,开发者需通过 API 或者其他方式进行操作。
三、PaaS 和 Serverless 的比较
1. 功能比较
PaaS 和 Serverless 的功能优劣各有千秋:
- PaaS 提供了更多的解决方案,更适合需要自定义部署环境的应用;而 Serverless 更适合无需自定义环境、需要直接为函数赋能的场景。
- Serverless 可以更加灵活地应对突发流量的应对策略,而在 PaaS 的场景下,中间件动态扩容也需要考虑成本问题。
- PaaS 平台机制更为庞大完备,开发调试难度较小且支持多语言;而 Serverless 则更易于扩展,可自行封装和上传函数即可完成部署与调用。
2. 成本比较
在成本方面,PaaS 和 Serverless 存在如下差异:
- 对于 PaaS,在启动环节中会涉及额外的启动成本,但通常由于循环使用而保证了顺畅的负载均衡;而 Serverless 则需考虑连接、调用等的费用,使用期间成本极低且免费时长较长。
- PaaS 需支付固定应用程序托管费用,同样有中间件费用;而 Serverless 的计算资源会按照调用频率和持续时间自动计费,对于对计算资源要求不高的场景对成本有所优势。
需要在成本方面进行取舍,选择相应的服务。
四、Serverless 的最佳实践
1. 优化资源利用,减少成本
使用 Serverless 平台需要进行资源调度,充分利用云服务商的资源,优化资源利用较为重要;同时优化服务架构也很重要,如将请求按实际需求建立 API 网关,减少资源及费用的浪费。
2. 发现与解决 Bug
Serverless 平台上的开发或代码调试难度较大,所以我们使用一些类似于 AWS X-Ray,日志链式可追溯的 Serverless 工具,实现跨函数的异常日志跟踪,快速定位 / 解决错误,以及进行性能维护。
3. 提高安全性
Serverless 服务的可伸缩性是个优势,但同时也意味着安全性也需提前考虑;任何的系统升级、漏洞复原将会对很多系统造成影响。对于这样的问题,可利用前置知识监控,使用 API 网关和服务代理等方式和机制来监测和保护 Serverless 服务的接口,提取并处理日志,监控代码运行行为和不正常行为。
五、总结
PaaS 和 Serverless 是伴随云计算的发展而逐渐流行的两种云服务设计方案。PaaS 的优势在于给开发者精细化的可编程控制,更方便地边开发边调整性能;而 Serverless 在本质上最大化了简化代码开发流程、简化基础架构、提供按需计费并极大降低运营成本等等。不同的项目场景需要选择不同的开发服务,本文介绍的就是一个从 PaaS 切入 Serverless 的设计思路。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/647c7d0d968c7c53b0783d4b