服务器架构:组件的位置

时间:2016-06-01 08:40:43

标签: web-services architecture

我有以下事项:

1)Django + Tornado服务器(SQL DB是远程的)

2)Redis

3)RabbitMQ

4)着陆页(只是静态)

5)电子邮件服务器(iRedMail)连接到与Django和Tornado相同的数据库。

我的问题:如果我将它们全部安装在同一台物理服务器(实例)上,这样可以吗?

或者我将它分开的最佳方式如(1,2,3)和(4,5)?

我担心电子邮件服务器,因为它似乎会使用很多资源..另一方面,在那里注册的用户不超过4个。

如果方法安装在同一台机器上,那么它的安全性呢?

1 个答案:

答案 0 :(得分:2)

虽然您的问题非常适合您的申请。但是,我只能根据我在其他地方阅读的个人经验,吸取的教训和最佳实践给出一般答案

您需要问自己几个问题,一旦得到解答,将帮助您找出解决问题的最佳架构:

1。可扩展性

解决方案中每项服务的使用模式是什么?您是否可以扩展其中一些高需求,而不扩展其他服务?

  

您(在某些时候)是否需要RabbitMQ服务的更高吞吐量并在群集中添加更多实例以跟上负载,而不必扩展电子邮件服务器?

2。稠度

您将使用哪些策略在同一服务的多个实例之间分配工作负载? (复制,分区,聚类,分片等)?

  

RabbitMQ可以在负载均衡的集群中工作。但也许你的邮件服务器不能?

3。效率

如果扩展它们(向它们投入更多的CPU / RAM),而不是输出(添加更多实例),某些服务可以更好地执行。明智地选择

4。安全

这是一个很大的话题,但我个人认为必须要做的一些事情是:

您的大多数服务都会公开可能受到攻击的端点(TCP套接字)。将所有内容保留在严格的防火墙之后,只暴露最关键的端口(场景中的Web和邮件服务器)

服务应该相互验证和验证(如果可能)。如果一个服务被暴露,它不应该危及整个系统。