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

用 redis 直接替换 app/物联网的 mq 服务器的可行性大吗?怎么对客户端进行限制

  •  
  •   joyanhui · 256 天前 · 1854 次点击
    这是一个创建于 256 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现有方案是 mqtt 服务器。 但是今天仔细看了了一下 redis7 的 acl 控制。感觉权限可以缩小到很小 。另外 Stream 结构可以直接用 redis 解决消息持久化的问题。 所以在琢磨用 redis 直接做 mq 服务器。不再经过 mqtt 转发一次浪费性能。 直接给每一个用户的客户端分配一个 redis 账号,账号定时横换。

    因为用户的客户端不可信,有几个问题不知道如何解决,独立的临时账号解决了客户端的安全问题,那么主要是客户端的资源占用的限制上。

    • 1 、怎么限制客户端的请求频率,用 iptable 来限制?
    • 2 、怎么限制单个用户的占用的内存。
      目前想到的
      • 2.1 、client-query-buffer-limit 限制输入缓冲区
      • 2.2 、后端不断执行 CLIENT LIST 踢掉占用太大的用户?
      • 2.3 、怎么限制同一个用户重复登陆 redis ?只能定时用 CLIENT LIST 去扫描吗

    暂时只想到这些,恳求各位赐教!

    13 条回复    2023-08-27 16:50:08 +08:00
    prenwang
        1
    prenwang  
       256 天前
    不用考虑 redis ,mqtt 才是王道, 原因就一个, 行业规范, 客户端终端基本都会支持 mqtt 协议。

    如果你是做的玩,随便用什么无所谓。
    CEBBCAT
        2
    CEBBCAT  
       256 天前
    对 MQTT 不是非常熟悉,但我认为直接把「 Redis as MQ 」这样的解决方案暴露给客户端是不明智的,因为 Redis 不是设计给这种用途的。例如连接数、公网安全、弱网鲁棒性。

    我觉得要么用经典方案,要么想想办法弄个网关
    159526aa
        4
    159526aa  
       256 天前
    mqtt 的订阅发布功能 qos1,2 怎么通过 redis 实现
    pming1
        5
    pming1  
       256 天前
    如果是玩具的话,量不大,redis 随便折腾,redis 还有时序和号称性能堪比 elasticsearch 的 jsonsearch
    winglight2016
        6
    winglight2016  
       255 天前
    你想直接暴露 redis 到外网?即使 MQ 也不建议如此做,前置一个 gateway 来转发吧,rate limit ,block ip 这些都是插件解决
    xmt328
        7
    xmt328  
       255 天前
    这方案哪怕是写着玩,也过于离谱了点
    joyanhui
        8
    joyanhui  
    OP
       251 天前
    这几天 我 完成了 esp32 下 redis 集群客户端 。redis server 端口通过 redis 模块 重写了部分指令 ,进行了 qps 限制和 key 长度限制。

    单个账号的重复登陆 和 连接内存占用也加了限制,也对 auth 指令的穷举次数做了限制。

    客户端能用到的指令。都通过 redis module 进行了重写和限制。

    算是解决了我正文里面提到的几个问题。

    楼上各位大佬 都只是在说 不建议,但是没有人说原因和解决方案。

    想知道 理由和原因。
    joyanhui
        9
    joyanhui  
    OP
       251 天前
    @159526aa stream
    joyanhui
        10
    joyanhui  
    OP
       251 天前
    @pming1 就是因为量大,才考虑去掉 mqtt,直接用用 redis 做 mq.
    159526aa
        11
    159526aa  
       251 天前
    @joyanhui 还是没想通 redis 怎么实现 qos2 的消息达且仅达一次
    pming1
        12
    pming1  
       249 天前
    @joyanhui 玩具的话,redis 随便折腾,生产的话,专职专用。过来人经验,善意建议。
    joyanhui
        13
    joyanhui  
    OP
       244 天前
    感谢各位!

    经过几天折腾和反复测试,redis 性能确实要比多数 mqtt 好很多,但是多并发的情况下,性能开支不低。虽然比部分 mqtt 还是好很多。但是依旧不客观。


    目前自己用 golang+gnet 实现了针对物联网的消息服务器,性能满意。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4892 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:38 · PVG 13:38 · LAX 22:38 · JFK 01:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.