在现代 Web 应用程序中,后端服务已经越来越离散化,微服务、无服务器(Serverless)架构得到了广泛的应用。Serverless 架构已经成为越来越多应用程序的标准选择。但是对于 Serverless 应用程序来说,数据的持久化存储是一个至关重要的问题。本文将介绍 Serverless 应用程序中的持久化存储的解决方案和运用场景。
Serverless 架构的核心优势之一就是无需维护基础设施。这也意味着没有服务器硬件、操作系统或数据库需要管理。然而,Serverless 服务也必须进行持久化存储,以便应用程序的状态持久存储。那么 Serverless 如何实现持久化存储呢?
在 Serverless 环境中,数据可以通过以下方式实现持久化存储:
数据库托管服务
大多数云服务提供商都有一些数据库托管服务,如 Amazon 的 AWS RDS 服务、Azure 的 SQL 数据库,腾讯云的云数据库等。您可以使用这些服务来创建数据库并在 Serverless 应用程序中访问。可以使用第三方客户端库(如 Node.js 的 Knex、Sequelize 和 Bookshelf)连接这些数据库。
云存储服务
云存储服务是一种基于网络的存储服务,适用于存储和检索数据,如音频、视频、文档、图像等数据类型。Amazon 的 S3,阿里云的 OSS、七牛云的对象存储等是常用的云存储服务。
Serverless 函数本身存储
Serverless 函数可以存储数据,并且它是一种非常简单的方式,无需使用数据库或存储服务,并且不会额外产生费用。但是,这种方式仅适用于短期存储,通常在不超过 24 小时内。如果需要长期存储数据,您需要使用其他方式。
以上三种方法都可以组合使用,在不同场景使用不同的持久化存储方式。
Serverless 中的持久化存储运用场景
数据库储存
Serverless 应用程序可以使用数据库托管服务存储和检索数据。例如,您可以在 AWS 的 RDS 中存储高度结构化的应用程序数据,并在 Lambda 函数中使用 Node.js 库将应用程序与 RDS 相连。如果您需要非常小而且迅速响应的数 据存储,DynamoDB 可以是一个很好的选择,它也是 AWS 提供的 NoSQL 数据库托管服务。
云存储
云存储可以用于存储大型文件、图像、视频和音频文件。这些文件经常存储在对象存储(Object Store)中。在云存储的帮助下,Serverless 应用程序可以轻松处理媒体文件,使其具有更高效并且快速的存储和检索属性。
服务器本身存储
当应用程序请求一个重量级的大文件,您可以使用 AWS 的 Lambda@Edge 服务将这个文件缓存到 CloudFront 端点。这将使您避免为每个应用程序请求再次下载文件,从而提高应用程序的响应时间。
示例代码
下面按照 Serverless 的场景为您介绍每个场景下的示例代码。
数据库托管服务
在 Node.js 中,使用 Sequelize 和 AWS RDS 创建表格非常容易,并使用以下代码在 Lambda 中进行连接:
---- -------- ----- --------- - --------------------- --- ---------- -- -------------------------- - -- --- ----------- -- -------- -- ------ --- --- --- -------- -------- --------- - --- ----------------------------------- - -------- ----------- --------- ----------- -------- ---- ------- -- - ---- - -- --- ----------- -- -------- -- ----- ------- --- --- ----- -- ---- ----- -------- --------- - --- --------------------- ----------- ----------- - ----- ------------ -------- ------------------------------------ ----------------- ----- --- -
云存储服务
使用 AWS S3 和 AWS Lambda,您可以轻松地自动将每个新上传的文件与 Serverless 应用程序集成起来。例如,您可以在 AWS S3 中上传要使用的图像,并使用以下代码处理它们:
---- -------- ----- --- - ------------------- ----- -- - --- --------- --------------- - ------- -------- --------- -- - --------------------- -------- --------------------- ----- ---- -- --- --- ------ ---- --- ----- --- ---- --- ------- ---- ----- ------ - -------------------------------- ----- --- - ---------------------------------------------------------------- - ---- ----- ------ - - ------- ------- ---- ---- -- --------------------- -------- ----- ----- - -- ----- - ----------------- ----- ------- - ------ ------- ------- - - ---- --------------------- -------------- - ----------- ---- ----- ---------------- -------- -------- ------ ------ --- --- - ---- - -------------------- ------- ------------------ ----- ------- - ----------- ------ ----------- -------------- - ----------- ---- ----- ---------------- -------- -------- ------------ ----------------- ------ ------ --- --- - --- --
再次提醒大家,不同服务商的 SDK 会有一些区别,以 AWS 为例,请认真阅读官方文档。
服务器本身存储
使用 AWS Lambda@Edge,您可以轻松地缓存最常请求的静态资源。以下代码演示了如何使用 Lambda@Edge 缓存绑定到 CloudFront 端点的文件:
---- -------- --------------- - ------- -------- --------- -- - ----- ------ - -------------------------------- ----- ---- - ---------------------------------------------------------------------- ----- -------- - --------- - ---- - --- - ------- -- ----------------------------------------------------------------------------------- --- ----- - ----- -------- - - -------- - ---------------- -- ---- ---------------- ------ ------------------ --- ---------- -- ---- ---------- ------ --- --------------- - -------------------------- -- - -- ----- ---- - - ------- ------ ------------------ ----- ----- ----- -- ------ ----- ---------- -------------- -------- ---------------- -- ------ -------------- ------ - -------------- - ------- ------ ------------------ ---- ------- ----- ----- --- ----- ----- ---------- -------------- -------- - ---------------- -- ---- ---------------- ------ ------------ --- --------------- -- ---- --------------- ------ ------------ -- -- --- --
结论
在 Serverless 应用程序中,持久化存储是至关重要的一部分。在这篇文章中,我们介绍了 Serverless 中三种持久化存储的解决方案。使用这些服务,你可以轻松地存储、检索和处理数据,充分利用 Serverless 架构的优势。在实际运用中,您需要根据应用程序的具体要求和场景,选择合适的存储方案。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66fa4cbf05c1e7f6085c3cca