我有以下事项:
1)Django + Tornado服务器(SQL DB是远程的)
2)Redis
3)RabbitMQ
4)着陆页(只是静态)
5)电子邮件服务器(iRedMail)连接到与Django和Tornado相同的数据库。
我的问题:如果我将它们全部安装在同一台物理服务器(实例)上,这样可以吗?
或者我将它分开的最佳方式如(1,2,3)和(4,5)?
我担心电子邮件服务器,因为它似乎会使用很多资源..另一方面,在那里注册的用户不超过4个。
如果方法安装在同一台机器上,那么它的安全性呢?
答案 0 :(得分:2)
虽然您的问题非常适合您的申请。但是,我只能根据我在其他地方阅读的个人经验,吸取的教训和最佳实践给出一般答案
您需要问自己几个问题,一旦得到解答,将帮助您找出解决问题的最佳架构:
解决方案中每项服务的使用模式是什么?您是否可以扩展其中一些高需求,而不扩展其他服务?
您(在某些时候)是否需要RabbitMQ服务的更高吞吐量并在群集中添加更多实例以跟上负载,而不必扩展电子邮件服务器?
您将使用哪些策略在同一服务的多个实例之间分配工作负载? (复制,分区,聚类,分片等)?
RabbitMQ可以在负载均衡的集群中工作。但也许你的邮件服务器不能?
如果扩展它们(向它们投入更多的CPU / RAM),而不是输出(添加更多实例),某些服务可以更好地执行。明智地选择
这是一个很大的话题,但我个人认为必须要做的一些事情是:
您的大多数服务都会公开可能受到攻击的端点(TCP套接字)。将所有内容保留在严格的防火墙之后,只暴露最关键的端口(场景中的Web和邮件服务器)
服务应该相互验证和验证(如果可能)。如果一个服务被暴露,它不应该危及整个系统。