我们正在使用云托管(Linode)来托管基于node.js(和socket.io)的聊天应用,其中redis作为主要数据库。我们尚未推出,但我们正在考虑在同一台机器上托管redis和node.js(例如8 gb实例,redis限制为5 GB)。所有通信都将以redis形式保存(即直接从客户端到redis,node.js中没有对话框的变量)。为了避免网络旅行时间amonsgt其他瓶颈,我们正在寻找托管redis和node.js在同一台服务器上。我在文档中找不到任何可以说这是个坏主意的东西,但是我们的sysops人并不相信。沿着这条路线有任何缺点吗?
答案 0 :(得分:0)
请参阅我在SO上发布的类似问题的非常类似的答案:Redis deployment configuration - master slave replication其中OP遇到了类似的问题,但他的担忧与绩效有关。
我的解决方案的主要问题(另一个答案的简单旁注)是一个简单的事实,即你的node.js应用程序必须面向云,例如互联网,而你的Redis或其他数据库不应该&#39 ;吨
这并不意味着您将通过各种方式解决安全问题,但在我看来,最好只展示您真正需要的主机,例如通常服务的主机直接向用户提供内容。
如果不将Redis部署到面向Internet的主机,则只需通过网络的拓扑设计即可实施许多安全约束。
可以在同一个框中托管这些服务:
是的,请不时运行基准测试,检查是否需要水平扩展或只是增加泛滥的主机。
检查:Redis deployment configuration - master slave replication
让Redis或其他服务面向互联网会有安全问题吗?
如果你知道自己在做什么 - 不,你就不会遇到安全问题。我仍然不会这样做。
答案 1 :(得分:0)
我无法发表评论,因为我还没有足够高的代表,但是在减少“网络瓶颈”方面的速度提升很少,redis速度太快,以至于延迟时间可以忽略不计。这种方法的问题是,如果你的盒子崩溃了,那么redis中保存的所有数据都将消失,除非你复制到奴隶。如果它关闭任何其他进程,那个机器人将无法访问,直到它重新启动。这可能适用于分期环境,但我会在生产中防范它。