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

你们系统的短信发送,是怎么设计的,可以承受多少并发?

  •  
  •   li24361 · 2015-11-01 08:10:42 +08:00 · 6582 次点击
    这是一个创建于 3314 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不考虑运营商发送时间,就只是系统到他们平台

    21 条回复    2015-11-02 18:55:21 +08:00
    loading
        1
    loading  
       2015-11-01 08:51:16 +08:00
    队列
    tanteng
        2
    tanteng  
       2015-11-01 08:59:11 +08:00
    直接调用服务提供商接口,不考虑并发吧,并发是服务商要考虑的
    li24361
        3
    li24361  
    OP
       2015-11-01 10:14:34 +08:00
    @tanteng 老系统,是把短信插到一个表里面,然后发送,修改为直接调用接口的话,要改很多地方
    xenme
        4
    xenme  
       2015-11-01 11:25:24 +08:00
    反正是调用服务商的接口,你直接狂发呗。
    gt11799
        5
    gt11799  
       2015-11-01 14:00:07 +08:00
    用 Python 写的话,用 celery 做异步就行了。
    baiyuxiong
        6
    baiyuxiong  
       2015-11-01 14:34:17 +08:00 via iPhone
    @tanteng 调接口也需要时间,做成同步的肯定不好方案。用 redis 队列,单独一个应用监听队列发短信
    billwang
        7
    billwang  
       2015-11-01 14:45:25 +08:00
    运营商肯定也会设定一个接口的发送时间间隔或者一段时间内短信发送量,多了人家就不给你发了。除非用联通自己的预留的接口
    Soar360
        8
    Soar360  
       2015-11-01 15:23:53 +08:00
    短信网关。把要发的任务提交给网关,网关自己根据任务量和任务特性(通知、验证码还是别的)调用不同的平台发送。。
    wshcdr
        9
    wshcdr  
       2015-11-01 15:44:14 +08:00
    一般的短信 SP 提供的能力为每个通道, 3 条 /秒
    realpg
        10
    realpg  
       2015-11-01 16:05:08 +08:00
    直连运营商的系统, 95 条每秒,超过 100 直接屏蔽接口 30 秒。
    用轮询系统去刷数据库队列,发送成功改状态。
    开发端只写数据库的待发表,不处理发送逻辑。
    zz412000428
        11
    zz412000428  
       2015-11-01 17:04:49 +08:00
    队列推送给运营商
    GitFree
        12
    GitFree  
       2015-11-01 22:38:53 +08:00
    验证码发送服务, celery 消息队列实现,压测(当然发短信部分做了模拟处理,不然就要卷铺盖走人了)发送并发能达到 2000qps
    GitFree
        13
    GitFree  
       2015-11-01 22:41:07 +08:00
    @tanteng 那是并发不够高,高并发场景下的情况下调用服务商的 100+ms 是不能忍受的,连接数很快会耗尽的
    akira
        14
    akira  
       2015-11-01 23:31:32 +08:00
    这个是看对方平台的限制的呀
    zhangv
        15
    zhangv  
       2015-11-01 23:55:22 +08:00
    队列、异步处理。
    实时性主要还是短信通道的问题。
    konakona
        16
    konakona  
       2015-11-02 01:37:40 +08:00
    队列。
    说到队列,我被 ThinkPHP 弄哭了..
    =。=
    现在在研究怎么样用它的 CLI 模式下,能够每个循环之后立刻释放模型...
    没看到有,除了$this->db->close(),但是这样一来-..- 怎么开呢,还在进一步研究。

    不然 mysql 会因为长时间没有释放,导致脚本崩溃。
    beneo
        17
    beneo  
       2015-11-02 08:28:46 +08:00
    云片,不是广告
    caixiexin
        18
    caixiexin  
       2015-11-02 09:18:19 +08:00
    看样子不是直接对接运营商的接口?
    不用缓存的话,数据库做待发送池,程序异步取数据发送。
    数据库保存短信详细业务数据的地方和待发池数据分开保存
    另外要看对方提供的接口允许批量不,要是这个接口一次只能送一条就蛋疼了。还有就是发出去之后自己平台要接受状态报告吗?要接受报告的话量大以后也是个很大的问题。
    perpyy
        19
    perpyy  
       2015-11-02 09:22:26 +08:00
    目前 5000 条 /秒~
    crayhuang
        20
    crayhuang  
       2015-11-02 10:35:24 +08:00
    队列~
    tanteng
        21
    tanteng  
       2015-11-02 18:55:21 +08:00
    @baiyuxiong 嗯,有道理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1050 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:33 · PVG 05:33 · LAX 13:33 · JFK 16:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.