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

2023-08-16 00:27:17 +08:00
 joyanhui

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

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

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

2208 次点击
所在节点    Redis
13 条回复
prenwang
2023-08-16 01:20:49 +08:00
不用考虑 redis ,mqtt 才是王道, 原因就一个, 行业规范, 客户端终端基本都会支持 mqtt 协议。

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

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

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

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

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

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

想知道 理由和原因。
joyanhui
2023-08-21 11:32:58 +08:00
@159526aa stream
joyanhui
2023-08-21 11:34:38 +08:00
@pming1 就是因为量大,才考虑去掉 mqtt,直接用用 redis 做 mq.
159526aa
2023-08-21 11:49:05 +08:00
@joyanhui 还是没想通 redis 怎么实现 qos2 的消息达且仅达一次
pming1
2023-08-23 09:40:39 +08:00
@joyanhui 玩具的话,redis 随便折腾,生产的话,专职专用。过来人经验,善意建议。
joyanhui
2023-08-27 16:50:08 +08:00
感谢各位!

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


目前自己用 golang+gnet 实现了针对物联网的消息服务器,性能满意。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/965630

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX