为什么AWS SQS这么慢?

2024-02-25

我一直在测试发送消息和从 SQS 队列接收消息所需的时间。平均需要 800-1200 毫秒,这似乎是一个非常长的时间。这是我的测试代码,如果我做错了什么,请告诉我。

var t0;
sendMessage('hello');

function sendMessage(message){

    var params = {
        MessageBody: message,
        QueueUrl: queueUrl
    };
    t0 = now();
    sqs.sendMessage(params, function(err,data){
        if(err){
            throw err;
        } else {
            console.log("Message Send Confirmation");
        }
    });
    unbatch();
}

async function unbatch(){

    var params = {
        QueueUrl: queueUrl,
        MaxNumberOfMessages: 10
    };
    var go = true;
    while(go){
        console.log("Polling...");
        sqs.receiveMessage(params, function(err, data){
            if(data.Messages){
                console.log("Message Received");
                console.log("Total Time: " + ((now() - t0)/1000));
                go = false;
                var deleteParams = {
                    QueueUrl: queueUrl,
                    ReceiptHandle: data.Messages[0].ReceiptHandle
                };
                sqs.deleteMessage(deleteParams, function(err, data) {
                    if (err) {
                        console.log("Delete Error", err);
                    } else {
                        console.log("Message Deleted");
                    }
                });
            }
        });
        await sleep(1);
    }
}

function sleep(ms){
    return new Promise(resolve => setTimeout(resolve, ms));
}

它发送消息并立即开始尝试每毫秒接收一条消息。一旦收到,它就会计算时间。这难道不应该花费更少的时间吗?


使用任何队列的原因不是为了性能,而是为了弹性。

队列解决了许多问题,它们在断开连接的系统之间提供异步通信,它们允许您很好地扩展系统,并提供增强的弹性,确保消息在系统故障时不会“丢失”。

使用队列时,您应该考虑围绕以下概念设计系统:eventual consistency这意味着您的消息最终会到达那里并得到处理,但可能不会按您期望的时间甚至顺序进行处理。

速度、排序、重试等功能因队列实现(SQS、Kafka、RabbitMq 等)而异。

如果您正在寻找超高 IOPS,那么队列可能不是您想要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么AWS SQS这么慢? 的相关文章

  • 以编程方式在指令内添加指令

    我想将指令的另一个实例附加到父指令中 但我无法使用 apply 重新编译我的指令 我想我在某个地方错过了一些东西 我的 HTML 代码 div div div div
  • 使用S3上传但不允许公共访问

    我的想法是创建一个 S3 存储桶以允许用户上传二进制对象 下一步是确认上传 然后 API 将启动文件处理 为了使其更安全 客户端将首先请求上传位置 然后 API 会在 S3 上为此上传分配并预先创建一个一次性使用目录 并在该目录上设置访问策
  • 尝试注册 RCTBridgeModule 类 RCTFileReaderModule

    尝试为名称 FileReaderModule 注册 RCTBridgeModule 类 RCTFileReaderModule 但该名称已由类 FileReaderModule 注册 尝试使用命令react native run ios在i
  • 是否可以进行条件解构或有后备?

    我有一个具有许多深层嵌套属性的对象 我希望能够访问 MY KEY 上的属性 如下 但如果该属性不存在 则获取 MY OTHER KEY 我怎样才能做到这一点 const X Y MY KEY Values segments segment
  • 将字符串(是一个函数)转换回 Javascript 中的函数

    我在下面将此函数作为字符串 我如何将其转换回函数 我正在从 JQuery 事件中提取事件处理程序 我想将它们存储为字符串 然后将它们转换回来 因为它们将保存在 mySQL 中 function if GActiveClick return
  • 修剪日期格式 PrimeNG 日历 - 删除时间戳、角度反应形式

    我将以下内容推入我的反应形式 obj 中2016 01 01T00 00 00 000Z但我想要以下2016 01 01 有谁知道有一个内置函数可以实现上述目的 我已经搜索过文档here https www primefaces org p
  • 如何在 Angular 2 应用程序中使 DateAdapter 单例?

    我正在开发一个带有延迟加载模块的 Angular 7 应用程序 我也使用有角度的材料组件 我想在日期选择器组件中本地化并支持多个区域设置 当应用程序语言发生变化时 我想在整个应用程序中全局更改它 可以通过 DateAdapter setLo
  • Browserify:如果需要,使用 module.exports,否则暴露全局

    我正在考虑采用浏览器化 http browserify org 对于我的一些项目 但想确保其他人如果想使用 捆绑的 代码就不必使用 browserify 执行此操作的明显方法是通过以下方式公开模块导出module exports以及通过一个
  • Intro.js 2页然后返回首页

    我在用intro js http introjs com 为我的网站创建一个小介绍 我希望游览从第 1 页 主页 2 另一页 然后回到第 1 页 主页 我已经成功地从第 1 2 页开始 但不确定如何让它返回到第 1 页 我对 javascr
  • Angularjs - 将 True/False 显示为 Yes/No

    有没有一种简单的方法可以将真 假值显示为是 否 我正在从数据库检索包含以下内容的 JSON 对象 对象 WithCertification true 这是 HTML 有认证 elem WithCertification 正在显示这个 认证真
  • iPhone 点击时使 div 变暗

    当您的 div 附加了点击处理程序时 当点击该 div 时 iPhone 会使该 div 变暗 作为点击指示器 示例 在移动 Safari 上查看http jsbin com awejo3 4 http jsbin com awejo3 4
  • JavaScript 中的最短路径

    几周来我一直在寻找一种在 JavaScript 中计算最短路径的方法 我一直在玩书数据结构和算法作者 格罗纳 Groner 名字恰如其分 https github com loiane javascript datastructs algo
  • keystonejs 模型中的动态类型选择

    我想在 adminUI 中使用一个组合框 其中包含来自 Web 服务的字段 我正在考虑使用预 查找 挂钩获取数据 然后覆盖模式中 受众 属性的选项属性 Schema Compliance add title type Types Text
  • 模拟节点外部模块默认使用 jest 的链式方法

    在我们的节点 CLI 中 我们有一个简单的方法 use strict const ora require ora module exports function startSpinner textOnStart color spinnerT
  • 如何使用 Jquery .animate() 函数创建连续滚动内容? [复制]

    这个问题在这里已经有答案了 可能的重复 在jquery中实现圆形滚动条 https stackoverflow com questions 812049 implementing circular scroller in jquery 我想
  • 如何从 Node.js 中的 Http.IncomingMessage 检测 http 与 https

    给定一个Http IncomingMessage由一个创建http s Server为了响应请求 检测请求是否是 http 与 https 的正确 推荐方法是什么 一些我不知道的随机想法是否正确 检查端口 seems wrong might
  • 什么是 TinyMCE jQuery 包?

    我被要求在项目中使用 TinyMCE 编辑器 在下载页面上 有一个主包 然后是一个 jQuery 包 This package contains special jQuery build of TinyMCE and a jQuery in
  • 角度 4 单击按钮功能未触发

    我正在尝试检查文本输入是否为空或不在角度 4 中 我没有为此使用表单 这只是一个输入字段 当我在下面的按钮中执行 addLocaton 函数时 需要进行检查 我的输入字段
  • 错误:模块“html”不提供视图引擎(Express)

    我正在尝试设置一个简单的路由应用程序 但在渲染页面时不断遇到错误 Error Module html does not provide a view engine 奇怪的是我已经在 app js 文件中指定了视图引擎 但仍然收到错误 app
  • 我如何用 javascript/jquery 进行两指拖动?

    我正在尝试创建当有两个手指放在 div 上时拖动 div 的功能 我已将 div 绑定到 touchstart 和 touchmove 事件 我只是不确定如何编写这些函数 就像是if event originalEvent targetTo

随机推荐

  • 命名空间 system.windows 中不存在“Forms”

    我刚刚开始研究 c 并且正在摆弄从某个论坛获得的一些代码示例 此代码使用命名空间using system windows forms我收到错误 命名空间 system windows 中不存在 Forms 我还收到一些与未定义函数相关的错误
  • 如何使用 Azure 移动服务 API 功能

    An APIWAMS 中添加了功能 我可以在其中定义自定义脚本 这似乎反对以前创建脚本表的做法 但是 我找不到任何有关如何使用它的描述 哪些客户端可以使用此功能 可以在 iOS 或 Javascript 中使用吗 还有关于这个主题的更多帖子
  • 我可以让 valgrind 告诉我哪个值未初始化吗?

    I ran valgrind一些代码如下 valgrind tool memcheck leak check full track origins yes test 它返回以下错误 24860 Conditional jump or mov
  • 删除 Safari/Chrome 文本输入/文本区域发光

    我想知道当我使用 CSS 单击文本输入 文本区域时是否可以删除默认的蓝色和黄色发光 编辑 11 年后 不要这样做 除非您要提供后备来指示哪个元素处于活动状态 否则 这会损害可访问性 因为它本质上删除了显示文档中哪个元素具有焦点的指示 想象一
  • mysql json vs mongo - 存储空间

    我遇到了一个有趣的情况 虽然不是一个实际的问题 但我不明白为什么会发生这种情况 我们有一个 mongo 数据库 主要由存储在数组中的一些批量数据组成 由于团队中超过 90 的人熟悉 mysql 而只有少数人熟悉 mongo 再加上这不是关键
  • 钻石继承 (C++)

    我知道拥有钻石继承被认为是不好的做法 然而 我有两个案例 我觉得钻石继承非常适合 我想问 在这些情况下你会建议我使用钻石继承 还是有其他设计可以更好 Case 1 我想创建代表系统中不同类型 操作 的类 这些动作按几个参数分类 该操作可以是
  • StackExchange.Redis - LockTake / LockRelease 用法

    我将 Redis 与 StackExchange Redis 一起使用 我有多个线程 它们会在某个时刻访问和编辑同一键的值 因此我需要同步数据的操作 查看可用的函数 我发现有两个函数 TakeLock 和 ReleaseLock 但是 这些
  • Apache mod 重写简单重定向

    我希望对我的网站的请求按如下方式工作 http example com http example com 理想情况下会拉出index php文件 当前默认行为 而不显示index php http example com foo php h
  • 读取和写入长时间运行的 std::process::Child

    我有一个长时间运行的子进程 我需要读取和写入大量数据 我有一个读取器线程和一个写入器线程来操纵child stdout and child stdin分别 extern crate scoped threadpool fn main run
  • 如何通过 VBA 将选择范围扩展到整个段落

    我正在使用此代码将选择范围扩展到Word文档中的整行 现在我想将选择范围扩展到整个段落 Selection Expand wdLine 尝试使用不同的 WdUnit 例如 wdParagraph Selection Expand wdPar
  • PHP - 使图像背景透明并具有容差

    所以我将三个图像设为透明并将它们相互叠加 我按照这篇文章中的示例代码进行操作 用php删除图像背景并保存透明png https stackoverflow com questions 10751227 remove image backgr
  • C++ 带有运行路径的辅助依赖解析

    我有以下问题 我正在尝试使用默认的 gnu 编译器 gcc 7 和可用的链接器版本在 Ubuntu18 上构建软件 现在我们遇到这样的情况 一个可执行文件可以链接一个共享库 该共享库又链接另一个共享库 因此 可执行文件具有次要依赖性 但次要
  • Spring异步方法集成测试失败

    我为异步休息控制器方法创建了一个集成测试 看起来像 Test public void shouldHandleRequestsAsynchronously throws Exception MvcResult mvcResult this
  • PyInstaller 但保持 .py 文件可升级

    我已经成功地将我的 PyQt4 应用程序打包为 Windows 上的 独立 应用程序 它可以工作 然而 这个应用程序可以自我升级 这是通过用通过互联网下载的新版本替换我编写的实际代码 py 文件 来完成的 我怎样才能告诉 PyInstall
  • 如何将参数传递给通过 Assembly.CreateInstance 加载的 C# 插件?

    我现在拥有的 成功加载插件 是这样的 Assembly myDLL Assembly LoadFrom my dll IMyClass myPluginObject myDLL CreateInstance MyCorp IMyClass
  • itertools.cycle().next()?

    嗯 我正在使用itertools cycle next 方法与Python 2 6 6 但现在我更新到3 2我注意到itertools cycle 对象没有方法next 我用它来循环一个字符串spin 的方法Spinner班级 所以如果我们
  • 自定义列表定义 + 自定义内容类型 = 仅显示一个表单字段?

    尝试使用功能来部署自定义字段 内容类型和列表 到目前为止 我有一个引用自定义和内置字段的内容类型 内容类型继承 Item 0x01 现在 我创建引用内容类型和字段 内置和自定义字段 的自定义列表定义 我明确设置ShowInDisplayFo
  • 如何将 Eclipse (helios) 项目移动到不同的工作区?

    首先 Eclipse 不是我的原生 IDE 我对它还算不上熟练 我在工作区中设置了一个项目 该项目实际上位于另一个客户项目的目录中 我并没有真正遵循整个工作区 项目的情况 事实上 现在我什至找不到要打开的 Eclipse 工作区文件它 我想
  • 通过 Gradle 和 Android NDK 强制 CMake 处于详细模式

    我正在使用 Gradle 和 CMake 从命令行编译 Android NDK 项目 以前 我使用 Ant 和ndk build但我正在尝试将项目完全迁移到 Gradle 和 CMake In my build gradle我有以下几行来调
  • 为什么AWS SQS这么慢?

    我一直在测试发送消息和从 SQS 队列接收消息所需的时间 平均需要 800 1200 毫秒 这似乎是一个非常长的时间 这是我的测试代码 如果我做错了什么 请告诉我 var t0 sendMessage hello function send