我们正在使用云托管 (Linode) 托管基于 node.js(和 socket.io)的聊天应用程序,以 redis 作为主要数据库。我们还没有推出,但我们正在考虑在同一台机器上托管 redis 和 node.js(8 GB 实例,例如,redis 限制为 5 GB)。所有通信都将在 redis 中进行(即直接从客户端到 redis,node.js 中没有用于对话的变量)。为了避免网络传输时间成为其他瓶颈,我们正在考虑在同一台服务器上托管 redis 和 node.js。我在文档中找不到任何说明这是个坏主意的内容,但我们的系统运算符(operator)不相信。沿着这条路走有什么缺点吗?
最佳答案
请引用我在 SO 上针对类似问题发布的非常相似的答案:Redis deployment configuration - master slave replication OP 遇到了类似的问题,但他的担忧更多地与性能有关。
我对你的解决方案的主要问题(另一个答案的简单旁注)是一个简单的事实,即你的 node.js 应用程序在设计上必须面向云,例如,互联网,而你的 Redis 或其他数据库不应该.
这并不意味着您一定会遇到安全问题,但我认为最好的做法是仅公开您真正需要的主机,例如通常直接向用户提供内容的主机。
通过不将 Redis 部署到面向 Internet 的主机,您只需通过网络的拓扑设计就可以实现大量安全限制。
是否可以在同一个盒子中托管这些服务:
是的,一定要时不时地运行基准测试来检查你是否需要水平扩展或者只是增加被淹没的主机。
检查:Redis deployment configuration - master slave replication
如果让 Redis 或其他服务面向互联网,我会遇到安全问题吗?
如果您知道自己在做什么 - 不,您不会遇到安全问题。尽管如此,我还是不会这样做。
关于同一台服务器上的 Node.js 和 Redis?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29233124/