消息队列服务器是否应该直接面向 Internet?
Should a message queue server be facing the Internet directly or not?
我有以下用例:
- 邮件大小:~4kb
- 协议类型:考虑MQTT
- 消息队列服务器:考虑 RabbitMQ 或 Mosquitto
- 高达 50k msg / s 到达消息
- 每条消息都是从具有各种网络连接的移动客户端发送的
我想知道的是:让系统接收消息如何更好?
A) 将消息队列服务器直接暴露给互联网,稍后处理消息以确保一致性/有效性(当然在服务器前面有一个负载平衡器)
B) 公开一个可以读取本机格式消息的服务器,应用一些基本的有效性检查,然后将消息排队到内部消息队列服务器
我倾向于第二种选择,但我没有关于它与第一种选择的优缺点的真正论据,所以你能就这个提出建议吗?
谢谢。
你的问题分为两部分:
- 是否将消息队列服务器对外公开
- 是否立即处理消息
对于第一个问题,我建议将服务器放在防火墙后面。因此,您将拥有更多工具来保护您的服务器免受 Internet 攻击。
第二个问题,取决于是否要求服务器将消息处理结果通知手机,以及消息处理结果是否应该立即知道:
- 如果您不需要向手机发送反馈并且不需要立即执行消息处理的结果,我建议记录消息然后以批处理模式处理它,
- 如果您需要向手机发回反馈但不需要立即处理消息,我建议对消息执行完整性检查,然后将反馈发回手机记录批处理消息,
- 否则,我会建议执行完整性检查、处理消息并将反馈发送回手机。
在我的建议中,我建议尽可能使用批处理模式而不是在线模式。当您在批处理模式下操作时,您有更多选择以简单的方式有效地使用您的计算资源。
我有以下用例:
- 邮件大小:~4kb
- 协议类型:考虑MQTT
- 消息队列服务器:考虑 RabbitMQ 或 Mosquitto
- 高达 50k msg / s 到达消息
- 每条消息都是从具有各种网络连接的移动客户端发送的
我想知道的是:让系统接收消息如何更好?
A) 将消息队列服务器直接暴露给互联网,稍后处理消息以确保一致性/有效性(当然在服务器前面有一个负载平衡器)
B) 公开一个可以读取本机格式消息的服务器,应用一些基本的有效性检查,然后将消息排队到内部消息队列服务器
我倾向于第二种选择,但我没有关于它与第一种选择的优缺点的真正论据,所以你能就这个提出建议吗?
谢谢。
你的问题分为两部分:
- 是否将消息队列服务器对外公开
- 是否立即处理消息
对于第一个问题,我建议将服务器放在防火墙后面。因此,您将拥有更多工具来保护您的服务器免受 Internet 攻击。
第二个问题,取决于是否要求服务器将消息处理结果通知手机,以及消息处理结果是否应该立即知道:
- 如果您不需要向手机发送反馈并且不需要立即执行消息处理的结果,我建议记录消息然后以批处理模式处理它,
- 如果您需要向手机发回反馈但不需要立即处理消息,我建议对消息执行完整性检查,然后将反馈发回手机记录批处理消息,
- 否则,我会建议执行完整性检查、处理消息并将反馈发送回手机。
在我的建议中,我建议尽可能使用批处理模式而不是在线模式。当您在批处理模式下操作时,您有更多选择以简单的方式有效地使用您的计算资源。