随着云计算技术的发展,无服务器架构越来越受到前端开发者的青睐。在无服务器架构中,开发者不再需要管理服务器的硬件和软件资源,而是将重心放在业务逻辑开发上。
在实际应用中,我们通常需要使用消息队列来实现异步处理,以及通知。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