从 PaaS 切入 Serverless:架构设计的演变及最佳实践

前言

近年来,云计算技术的快速发展推动了 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


猜你喜欢

  • RxJS 的 debounceTime 操作符原理解析

    在前端开发中,RxJS 是一个流行的响应式编程库。RxJS 中的 debounceTime 操作符往往用于限制用户频繁触发一个事件的次数。本文将解析 debounceTime 操作符的原理,帮助开发者...

    1 年前
  • 在 Sass 中怎样处理 CSS3 的渐变效果

    CSS3 的渐变效果是 web 开发中常用的一个功能,它可以让页面元素呈现出流畅的过渡效果,让网站更加美观与生动。在 Sass 中,我们可以使用 mixin 来处理 CSS3 渐变效果,使得我们的代码...

    1 年前
  • LESS 中的伪类选择器详解及示例代码

    前言 LESS 是一种动态样式语言,它扩展了 CSS 语言,使我们可以使用变量、函数、运算符等特性,使得样式表更加灵活,易于维护。在 LESS 中,使用伪类选择器是经常用到的技巧之一。

    1 年前
  • 利用 Swagger 工具实现 RESTful API 文档自动生成

    随着 RESTful API 的广泛应用,对于开发者来说,编写 RESTful API 文档已经成为一项必要的工作。然而,手动编写文档不仅费时费力,而且容易因疏忽而出现错误。

    1 年前
  • Mongoose 中的增删改查查询详解

    前言 Mongoose 是 MongoDB 的一种 Node.js 的 ORM 工具,它可以帮助我们更方便地在 Node.js 项目中操作 MongoDB 数据库。

    1 年前
  • 如何在 Tailwind CSS 中创建自定义下划线样式?

    Tailwind CSS 是一种现代化的 CSS 框架,可以帮助开发者更快捷地构建 UI。但是,尽管 Tailwind CSS 提供了多种类似下划线的样式,但有时候我们还需要自定义一些下划线样式来满足...

    1 年前
  • 如何使用 Node.js 和 Oracle 进行数据库操作

    在前端开发中,许多项目都需要使用数据库进行数据存储和管理。而 Node.js 和 Oracle 是两个非常流行和有用的工具,它们可以很好地协同工作,实现数据库操作的目的。

    1 年前
  • Java 技术中使用 Socket.io 的一种实现方式

    前言 在 Web 开发中,Socket.io 是一个非常流行的实时通信框架,它支持多种平台和语言的实现,提供了很多灵活的配置选项,使得开发者可以快速构建高效、可靠的实时交互系统,因此被广泛应用在实时通...

    1 年前
  • Redis 实现分布式限流的方法与原理

    在高并发场景下,为了保护系统稳定性,我们通常会对请求进行限流。而在分布式系统中,需要将这种限流机制进行扩展,从而使其适用于不同的实例和节点。Redis 是目前比较流行的 NoSQL 数据库之一,支持分...

    1 年前
  • Vue.js 如何在组件中使用指令

    什么是 Vue.js 指令 Vue.js 是一款流行的 JavaScript 框架,它提供了很多内置指令和可以自定义指令。指令是 Vue.js 在模板语法中提供的特殊属性,用于添加 DOM 操作和事件...

    1 年前
  • Material Design 中使用 CheckBox 实现勾选效果

    在前端开发中,实现勾选效果是一个常见的需求。在 Material Design 中,CheckBox 作为勾选的标准元素,为用户提供了一种直观、美观且易于操作的勾选方式。

    1 年前
  • Hadoop 性能优化实战,加速大数据处理

    Hadoop 性能优化实战,加速大数据处理 Hadoop 是处理大数据的最佳选择之一,但是在实际应用中,Hadoop 的性能往往不如预期。本文将介绍 Hadoop 性能优化的实战经验和技巧,帮助开发者...

    1 年前
  • Web Components 中的数据库操作实践

    Web Components 是一种用于构建可重用 Web 应用程序的 API 和编程技术,它可以用于实现自定义元素和 Shadow DOM,使得 Web 应用程序更加灵活和可维护。

    1 年前
  • PWA 实践:缓存策略及其优化

    什么是 PWA? PWA(Progressive Web Apps)指的是渐进式 Web 应用,是一种通过现代 Web 技术提供类似原生应用体验的 Web 应用。PWA 没有应用商店的限制,用户可以直...

    1 年前
  • 如何在 Promise 中实现参数传递

    引言 在前端开发中,我们经常会遇到需要异步获取数据并在获取结果后进行后续操作的情况。 Promise 是一种为处理异步操作而生的解决方案,它能够使异步编程更加优雅和容易,然而在实践中,我们会经常遇到需...

    1 年前
  • 使用 Node.js 和 Express.js 实现基于 WebSocket 的即时通讯

    引言 随着科技的不断发展,人们越来越注重实时通讯的重要性。而且,现代 Web 应用程序需要在用户与应用程序之间进行实时数据交换。在过去,这种交互是通过使用轮询和长轮询实现的。

    1 年前
  • 如何在 Deno 中实现汉字转拼音?

    随着中文应用的普及,汉字转拼音的需求也越来越大。本文将介绍如何在 Deno 中实现汉字转拼音,以及一些关于拼音转换的知识。 拼音转换 拼音转换主要分为两种:全拼和首字母缩写。

    1 年前
  • 制作 3D Gallery 效果的 CSS Grid 方案

    在前端开发中,我们经常需要制作各种各样的网站和应用。其中,3D Gallery 效果是一种非常炫酷且实用的效果,可以非常生动地展示图片和音视频资源。本文将介绍如何使用 CSS Grid 来制作一个 3...

    1 年前
  • MongoDB 性能问题:如何使用 readConcern()

    MongoDB 是当前最流行的 NoSQL 数据库之一,拥有良好的可扩展性和灵活性。然而在实际使用过程中,也存在着一些性能问题。其中一个比较常见的问题是读写一致性。

    1 年前
  • 在 ES9 中使用 Asynchronous iteration 管理你的 promise 链

    在 ES9 中使用 Asynchronous iteration 管理你的 promise 链 在 Web 应用程序开发中,我们经常需要处理一系列异步操作。过去,我们是通过使用回调或Promise来解...

    1 年前

相关推荐

    暂无文章