Serverless 如何实现持久化存储?

阅读时长 9 分钟读完

在现代 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

纠错
反馈