通过 Serverless 架构构建在线广告推荐系统

阅读时长 20 分钟读完

Serverless 架构是一种新型的云计算架构,它可以帮助开发者构建高可用、高可扩展性的应用程序,同时也能够节省服务器成本。在这篇文章中,我们将探讨如何使用 Serverless 架构构建一个在线广告推荐系统,该系统可以帮助广告主更好地定位目标受众,提高广告投放效果。

架构设计

我们的广告推荐系统将使用 AWS Lambda、Amazon API Gateway、Amazon S3 和 Amazon DynamoDB。其中,AWS Lambda 是一种无服务器计算服务,可以在没有服务器的情况下运行代码;Amazon API Gateway 是一种服务,可以帮助开发者构建、部署和管理 API;Amazon S3 是一种对象存储服务,可以存储和检索任意类型的数据;Amazon DynamoDB 是一种非关系型数据库服务,可以存储和检索任意类型的数据。

整个系统的架构如下图所示:

在这个架构中,我们将使用 AWS Lambda 来处理请求,并将结果存储在 Amazon DynamoDB 中。我们还将使用 Amazon S3 存储广告素材,并使用 Amazon API Gateway 提供 RESTful API 接口。

数据模型设计

在开始编写代码之前,我们需要设计我们的数据模型。我们的广告推荐系统将包含三个数据模型:用户、广告和广告投放记录。

用户

用户数据模型将包含以下属性:

  • 用户 ID
  • 年龄
  • 性别
  • 地理位置
  • 兴趣标签

广告

广告数据模型将包含以下属性:

  • 广告 ID
  • 广告名称
  • 广告素材 URL
  • 广告类型
  • 广告投放位置
  • 广告投放时间段
  • 广告投放预算

广告投放记录

广告投放记录数据模型将包含以下属性:

  • 投放 ID
  • 用户 ID
  • 广告 ID
  • 投放时间
  • 投放地理位置

代码实现

创建 DynamoDB 表

首先,我们需要创建 DynamoDB 表来存储我们的数据。我们将创建三个表:users、ads 和 ad-deliveries。

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

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

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

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

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

创建 Lambda 函数

接下来,我们需要创建 Lambda 函数来处理请求。我们将创建两个函数:一个用于存储用户数据,另一个用于推荐广告。

存储用户数据

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

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

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

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

推荐广告

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

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

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

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

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

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

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

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

创建 API Gateway

最后,我们需要创建 API Gateway 来提供 RESTful API 接口。我们将创建两个资源:一个用于存储用户数据,另一个用于推荐广告。我们还将为推荐广告资源创建一个路径参数,用于指定用户 ID。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总结

通过使用 Serverless 架构,我们成功地构建了一个在线广告推荐系统。该系统可以帮助广告主更好地定位目标受众,提高广告投放效果。在这个过程中,我们使用了 AWS Lambda、Amazon API Gateway、Amazon S3 和 Amazon DynamoDB,这些服务可以帮助我们构建高可用、高可扩展性的应用程序,并且可以节省服务器成本。我们还设计了数据模型,并提供了示例代码,以便读者可以更好地理解如何使用 Serverless 架构构建应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65c81b60add4f0e0ff1fb377

纠错
反馈