V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ericgui
V2EX  ›  程序员

请教各位,一个关于云端消息队列的疑惑

  •  
  •   ericgui · 2019-07-17 05:02:55 +08:00 · 1923 次点击
    这是一个创建于 1945 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先,大家使用消息队列的原因有很多,其中一个常见的原因是稍后处理耗时任务,比如发邮件,短信等。这个是很基本的,就不多说了。

    那么,这个处理的核心是,快速把任务加入到队列里, 比如保存在 mysql 或者 redis,缩短用户的响应时间,然后快速把 response 返回给用户。

    所以,快速,就是关键。毕竟发送邮件需要好几百 ms,写入到 redis 也许 10ms 就够了。

    但现在很多云服务推出消息队列的功能,我还没用过。

    我猜测,你要调用 api 的,这个 api 肯定是 http 请求啊,这个请求会很耗时吧。这样使用一个云端消息队列有何意义呢?

    请指教,谢谢。

    第 1 条附言  ·  2019-07-17 05:38:23 +08:00
    澄清一点:

    使用云服务的队列服务,肯定是要安装 sdk,这个 sdk 背后肯定是发送 http 请求到云端,如果 enqueue 成功,就有 200 OK 返回来的。

    这个猜测是对的吗?

    如果是对的,那么,把任务加入到队列这个过程,就很耗时啊。这样做,是不是就没什么太大意义了?

    当然了,加入队列之后,可以对失败任务重新执行,这个我懂。

    但我想说的是,如果使用云服务的消息队列,调用他们的 api,耗时也很长的。

    和在 localhost 或者内网搭建消息队列相比,云服务的消息队列有什么更值得使用的理由?
    16 条回复    2019-07-17 10:41:46 +08:00
    yuikns
        1
    yuikns  
       2019-07-17 05:11:31 +08:00
    1. 快速是指标,执行并只执行一次才是关键。
    2. “这个 api 肯定是 http 请求啊”,API==HTTP 这个 assertion 第一次听说。
    3. 快慢都是相对的。
    ericgui
        2
    ericgui  
    OP
       2019-07-17 05:30:46 +08:00
    @yuikns 我说的是调用云服务消息队列这个服务的 api,难道不是 http 吗?
    izoabr
        3
    izoabr  
       2019-07-17 05:42:43 +08:00
    不是走 AMQP 的么?
    yuikns
        4
    yuikns  
       2019-07-17 05:57:04 +08:00   ❤️ 1
    首先,https://help.aliyun.com/document_detail/29532.html 可以不
    其次,即便是 HTTP,也可以是毫秒级的,再加上批量处理,吞吐量也可以用
    最后,这个主要是共享运维开销和 scale out。比如开始某个小团队每天调用几千次,后来增加三四个数量级,都有一个服务帮忙兜底。
    理论上和自己准备队列相比,可以少养一帮运维团队,以及出大事可以甩锅分担风险。这是银行总是用 MS,以及很多公司订阅 RH 的原因。不过实际上对方可能就把你交的钱给退了,公司还是会死。
    yuikns
        5
    yuikns  
       2019-07-17 06:01:04 +08:00   ❤️ 1
    @yuikns 另外,如果用阿里云的服务,通常就是面向阿里编程,部署的服务往往也在阿里里面,通过内网连接服务,吞吐量和速度还可以。
    yuikns
        6
    yuikns  
       2019-07-17 06:08:18 +08:00
    另外,要是你每年给阿里几十万或更多,会有专门的 agent 和你联系。你可以选择微信 :) 。打算加机器,不会用,出现各种相关问题都可以在线喊人,对方会帮你联系他们的团队调度。
    ericgui
        7
    ericgui  
    OP
       2019-07-17 06:14:38 +08:00
    @yuikns 早说嘛,“加钱,世界触手可及”,这个我懂

    哈哈

    感谢高人赐教!
    binux
        8
    binux  
       2019-07-17 06:50:16 +08:00   ❤️ 1
    返回延迟和吞吐量是两回事,即使延迟会增大,但是吞吐量是可以水平拓展的。
    jadec0der
        9
    jadec0der  
       2019-07-17 08:31:21 +08:00   ❤️ 1
    如果你用的是云服务的主机,那没道理自己买机器搭 MQ。买云服务的 MQ 在量少的时候更便宜,在量大的时候更稳定,还可以省掉一份运维工资。至于延迟,都在一个机房的,和你的内网速度一样。
    lhx2008
        10
    lhx2008  
       2019-07-17 08:33:56 +08:00 via Android
    他们只是帮你开个 VPS,装个 Redis 而已,别想太多了。根本不是中心式的。
    www5070504
        11
    www5070504  
       2019-07-17 09:11:59 +08:00
    并发量高 延迟也不是那么重要吧 单线程要等上一个请求返回 可以用多线程 协程之类的呗
    ericgui
        12
    ericgui  
    OP
       2019-07-17 09:22:15 +08:00 via Android
    @www5070504 有道理
    ericgui
        13
    ericgui  
    OP
       2019-07-17 09:22:24 +08:00 via Android
    @jadec0der 有道理
    okwork
        14
    okwork  
       2019-07-17 09:23:23 +08:00 via Android
    使用过云端消息队列,如果是内网(即和主服务器同区) http 也很稳定,速度基本和自建没差别。如果是跨区,速度其实可以接受,但是有一定几率请求失败(低于千分之一),要 2 次请求。
    ericgui
        15
    ericgui  
    OP
       2019-07-17 09:25:19 +08:00 via Android
    @okwork 感谢分享
    flowfire
        16
    flowfire  
       2019-07-17 10:41:46 +08:00
    没太懂。。。
    意思是加到队列里,还没执行就给一个执行成功的回调然后再后面有时间再执行吗
    这样真的不会给调用者带来困扰吗。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1050 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:47 · PVG 03:47 · LAX 11:47 · JFK 14:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.