如果您想拥有可处理约200个同时请求的可伸缩后端,那么在与应用程序服务器相同的计算机上拥有(关系)数据库的立场是什么?
我看到大多数人不赞成这种方法,主要有以下几个论点:
但是,通过将两者都放在同一服务器上的方法,我仍然看到了很多优点,
从我看来,将数据库放置在远程服务器上的问题可能简化了事情并提高了安全性,但是我也看到了其他方法的许多优点,例如出站传输成本。因此,可以肯定地说这是非常实际的情况并且基于您的实际项目需求吗?
(我本来就不会提及Google,AWS,MS Azure的多合一SOA架构,因为它们的成本根本无法使其成为一种选择)。
答案 0 :(得分:1)
根据我的理解,这是我在这个问题上的两分钱
在应用程序是新的并且体积和大小都较小之前,可以将数据库与应用程序服务器放在同一盒子上。但是,随着时间的流逝,在此设置中出现了几个问题。您所提到的要点是有效的,但是,从长远来看,在单独的服务器上使用db的好处可能会超过单个服务器的设置。
可以通过增加服务器的容量来垂直扩展系统。但是,正如我们所知,在某一点之后,每台硬件成本获得的容量减少了,这意味着与单台机器的硬件成本增加相比,获得的容量增加很少。因此,为了获得具有成本效益的可扩展性,只有横向解决方案是唯一的解决方案。现在,水平运行时,假设添加了更多计算机,并且它们在同一框中包含应用服务器和数据库服务器(具有不同的VM或容器),那么在扩展时,应用服务器和数据库服务器都可以轻松满足不同的扩展需求。需要一个具有更高容量的盒子来处理应用程序和数据库负载。假设添加了另一组盒子来增加容量,但是这会导致提供这些更高容量的盒子,这是浪费的,因为假设仅需要缩放应用服务器,而db很好,反之亦然。相反,如果应用程序服务器和数据库服务器位于不同的盒子上,则可以分别管理扩展。
如问题中所述,安全性是另一个问题。应用程序服务器通常面向外部环境,并且更容易受到攻击,如果db位于同一盒子上,它将不必要地面临相同的风险。相反,如果db位于单独的盒子中,则它可以位于防火墙后面,并且根本不暴露于Internet。
如果应用服务器或数据库服务器中的任何一个导致系统崩溃,则两个组件都将不可用(单点故障)。
每当需要更改系统配置时,都会涉及一些风险,并且如果app和db都在同一盒子上,即使系统更改是组件之一需要。
app和db组件的I / O,CPU和其他硬件容量要求可能非常不同。并且即使应用了容器化,也可能无法以最佳方式拆分包装箱的资源。相反,如果两个组件分别部署,则进行容量规划要简单得多。
因此可以肯定地说这是非常实际的情况,并取决于您的实际项目需求吗?
任何部署都必须始终满足项目的特定需求。话虽这么说,但在大多数情况下,应用程序变得越来越大,以致于无法安装在单台计算机上,通常,根据我的理解,将应用程序和数据库层分开在不同的计算机上比起使用单个安装程序具有更多的实际优势。 >
希望有帮助!