无服务器架构中使用 SNS 与 SQS 的优缺点

随着云计算技术的发展,无服务器架构越来越受到前端开发者的青睐。在无服务器架构中,开发者不再需要管理服务器的硬件和软件资源,而是将重心放在业务逻辑开发上。

在实际应用中,我们通常需要使用消息队列来实现异步处理,以及通知。AWS 的 SNS(简单通知服务)与 SQS(简单队列服务)是目前最为流行的消息服务体系,本文将探讨无服务器架构中使用 SNS 与 SQS 的优缺点。

优点

异步处理

在传统服务器架构中,异步处理需要考虑的问题非常多,例如线程安全、队列溢出等。无服务器架构中使用 SNS 与 SQS,将异步处理转化为消息的发布与消费。当应用程序需要执行异步操作时,只需向 SNS 发布消息,然后由 SQS 处理这些消息。

例如,我们有一个应用程序需要生成用户报告,这个操作可能需要一段时间,不能阻塞主线程。我们可以将用户报告的请求作为消息发送给 SNS,然后 SQS 订阅这些消息,然后异步的生成报告并发送给用户。

高可靠性

在传统的服务器架构中,消息队列需要手动部署、管理,并软件上做好硬容量对应。SNS 与 SQS 在 AWS 管理面板上一键创建即可,而且系统可以自动伸缩。在 AWS 的数据中心网络故障时,SNS 和 SQS 会在不同的数据中心进行复制同步,保证业务不会中断。

隔离性

SQS 防止了系统内单一应用程序的资源竞争,隔离了生产者和消费者之间的不同步和崩溃。同时,选择特定的 SQS 队列可以有不同的延迟时间和最大重试次数。如果应用程序向 SNS 发布一条消息,然后由 SQS 处理,如果 SQS 受损或者繁忙,那么消息将保留在队列中,并按照设置的延迟时间重试。当重试次数达到最大值的时候,消息将转移到“死信队列”,开发者可以观察到这些问题,并进行修补。

易扩展性

SNS 和 SQS 可以轻松地进行伸缩,系统可以自动添加更多的消息处理器。这种伸缩性也可以提高系统的性能。如果应用程序需要处理大量的消息,仅需增加 SQS 的消费者和生产者即可。

缺点

复杂性

相对于常规的阻塞式编程,使用 SNS 和 SQS 需要学习和实现异步编程。另外,消息队列的 Debug 和监控也需要经验。应用程序必须被设计认可并配合传送的消息规范。

延迟

因为 SNS 和 SQS 只能接收 JSON 格式的消息,应用程序需要将执行所需的参数已经组成的对象中,然后将 JSON 格式的对象发送给 SNS。这种转换可能需要一些时间。同时,SQS 的延迟时间可能会导致消息到达时间延迟。

示例

使用 Lambda 函数和 SNS 进行异步处理示例:

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

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

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

使用 Lambda 函数和 SQS 进行异步处理示例:

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

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

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

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

结论

综上,SNS 与 SQS 是在无服务器架构中实现异步处理的理想方案。在使用 SNS 和 SQS 时,开发者可以将注意力集中在业务逻辑上,同时仅需要处理简单的 JSON 格式的消息。应用程序不需要考虑应用服务器的部署和资源管理,系统可以自动伸缩。此外,SNS 和 SQS 都支持负载均衡,并提供高可靠性和隔离性。但是,传入 JSON 格式的消息会引起一定的延迟。开发者在选择 SNS 和 SQS 时,需要仔细评估自身需求。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671ef0642e7021665efa9b17