当前位置:  开发笔记 > 编程语言 > 正文

为什么不建议在同一台机器上安装数据库和Web服务器?

如何解决《为什么不建议在同一台机器上安装数据库和Web服务器?》经验,为你挑选了10个好方法。

听听Scott Hanselman对Stack Overflow团队的采访(第1部分和第2 部分),他坚持认为SQL服务器和应用服务器应该在不同的机器上.这只是为了确保如果一台服务器受到攻击,两个系统都无法访问?安全问题是否超过两台服务器的复杂性(额外成本,两者之间的专用网络连接,更多维护等),特别是对于小型应用程序而言,这两种服务器都没有使用过多的CPU或内存?即使有两台服务器,一台服务器受到攻击,攻击者仍可能通过删除数据库或弄乱应用程序代码而造成严重损害.

如果性能不是问题,为什么会这么大?



1> Mark Bracket..:

    安全.您的Web服务器位于DMZ中,可从公共Internet访问并从匿名用户那里获取不受信任的输入.如果您的Web服务器遭到入侵,并且您在连接到数据库时遵循了最少的权限规则,那么最大的风险就是您的应用程序可以通过数据库API执行的操作.如果您之间有业务层,则攻击者和数据之间还有一个步骤.另一方面,如果您的数据库位于同一服务器上,则攻击者现在可以根据您的数据和服务器进行访问.

    可扩展性.保持Web服务器无状态允许您轻松地水平扩展Web服务器.这是非常困难的横向扩展的数据库服务器.

    性能.2个盒子= CPU的2倍,RAM的2倍,以及2倍的磁盘访问权限.

所有这一切,我当然可以看到合理的情况,这些点都不重要.


但是对于2台机器,你的硬件故障概率加倍;)
@kirgy - 由于两台机器并联,每台机器都是单点故障,因此整体可靠性较低; 它在技术上并不是双倍的(它实际上是1 - (r1*r2))但足够接近大的可靠性和小节点....在0.01%的情况下,它是0.0199%.但对于100个节点,它是36.6%,而不是倍增声明暗示的100%.
@ TWith2Sugars - 相对于什么?
@Noelie - 您的Web层无权说出,将数据库备份到文件,并使用xp_cmdshell将该文件ftp到ftp.hackers.com.或者删除数据库.或者修改配置值.等等
参考.要点1.如果Web Tier是拥有的,那么除了App /数据库API接口之外,您还需要或需要什么?当然,那时候的比赛结束了吗?然后,在支持DMZ基础设施所需的服务方面,例如任何AD或Microsoft服务,事情变得非常有趣?
@MarkBrackett,但那就是我所说的:"最少权限"仍然足以推出你的数据库.为什么系统访问比db访问更有价值?数据库是每个人都追求的:它包含私人用户信息,如密码,CC等.您希望系统访问而不是数据库访问的唯一原因是更改站点或可能下载私有源代码,具体取决于公司(但这是一个然后是不同的问题).我描述的所有内容都不需要设置错误,只有泄露的数据库用户/密码(和地址),如果Web服务器被泄露,则可以获得.

2> dbr..:

它并不真正的事(你可以很愉快地运行您的网站在同一台机器上的网络/数据库),它只是在缩放最简单的一步..

这正是StackOverflow所做的 - 从运行IIS/SQL Server的单机开始,然后当它开始负载很重时,购买了第二台服务器并将SQL服务器移到了它上面.

如果性能不是问题,不要浪费钱购买/维护两台服务器.


我进来了,并打算评论同样的事情.切换数据库服务器就像更改连接字符串一样简单(在大多数情况下).
我同意,它可以在负载较低时完成......随着负载的增加,它很容易将它们分成两台或更多台机器.

3> James Curran..:

另一方面,他们发现大多数用户可以通过将数据库放在与网站相同的机器上来加速网站(使用Telligent的社区服务器),从而引用不同的博客Scott(Watermasyck,Telligent).但是,在客户的情况下,通常数据库和Web服务器是该计算机上唯一的应用程序,并且该网站不会对机器造成太大影响.然后,不必通过网络发送数据的效率更多,以弥补增加的应变.


...直到并发使用增加,并且db服务器需要更多内存来有效使用缓冲区和缓存.一旦web/app和db服务器需要的内存超过了他们可以在一个盒子上共享的内存,就会增加分页和磁盘I/O,以及性能提升.

4> Tom Ritter..:

我认为最重要的因素是性能.Web服务器/应用程序代码和SQL Server都会将通常请求的数据缓存到内存中,并且通过在相同的内存空间中运行它们来杀死缓存性能.


如果你有一个小的(ish)数据库,但有大量内存怎么办?对于每个数据库调用而言,通过网络的成本(特别是如果有很多数据库)不会超过收益吗?

5> Dana the San..:

汤姆对此是正确的.其他一些原因是它不具有成本效益,并且存在额外的安全风险.

Web服务器具有与数据库服务器不同的硬件要求.数据库服务器具有大量内存和非常快的磁盘阵列,而Web服务器只需要足够的内存来缓存文件和频繁的数据库请求(取决于您的设置).关于成本效益,两台服务器不一定会更便宜,但性能/成本比应该更高,因为您不需要竞争资源的不同应用程序.出于这个原因,你可能不得不花费更多的时间来为一台迎合两者的服务器提供相同的性能,并提供与2个专用服务器相同的性能.

安全问题是如果单个机器受到攻击,则Web服务器和数据库都是易受攻击的.有两个服务器,你有一些喘息的空间,因为第二个服务器仍然是安全的(至少一段时间).

此外,还有一些可伸缩性优势,因为您可能只需维护一些不同Web应用程序使用的数据库服务器.这样,您可以减少应用升级或修补程序以及执行性能调整的工作量.我相信有一些服务器管理工​​具可以让这些任务更容易(在单机情况下).


如果您正在运行除SP以外的任何内容,则您的网络服务器可能仍然可以完全访问数据库中的数据

6> Kev..:

安全是一个主要问题.理想情况下,您的数据库服务器应位于防火墙后面,只打开执行数据访问所需的端口.您的Web应用程序应该使用SQL帐户连接到数据库服务器,该帐户具有足够的权限以使应用程序正常运行,而不再需要.例如,您应该删除允许删除对象的权限,并且大多数情况下您不应该使用诸如"sa"之类的帐户进行连接.

如果您将Web服务器丢失为劫持(即完全权限升级为管理员权限),最糟糕的情况是您的应用程序的数据库可能会受到危害但不会影响整个数据库服务器(如果是数据库服务器和Web服务器是同一台机器).如果您已经加密了数据库连接字符串并且黑客不够精明来解密它们,那么您丢失的只是Web服务器.


除了丹尼尔,你错过了一个巨大的点.它不是关于数据库备份,而是关于受损数据.您的客户是否可以"黑客窃取您的所有客户和销售数据,但不要担心,我有备份." :)

7> Paul Tomblin..:

尚未提及的一个因素是负载平衡.如果您开始将Web服务器和数据库视为单独的计算机,则可以优化更少的网络往返次数,并且随着需求的增加,可以更轻松地添加第二个Web服务器或第二个数据库引擎.



8> Mr. Will..:

我可以从第一手经验说,将Web服务器和数据库放在不同的机器上通常是个好主意.如果您的应用程序占用大量资源,则很容易导致计算机上的CPU周期达到峰值,从而导致计算机停止运行.但是,如果您的应用程序对数据库的使用有限,那么让它们共享服务器可能没什么大不了的.



9> Jojo..:

哇,没有人带来了,如果你实际购买SQL服务器在5K块钱,你可能想使用它比你的Web应用程序更多的事实.如果您使用快递,也许您不在乎.我看到SQL服务器运行20到30个应用程序的数据库,因此将它放在网络服务器上并不聪明.

其次,取决于服务器的用户.我为金融公司和政府工作.所以我们在使用sprocs并限制从webserver到SQL的端口的方法中使用了一种疯狂的痛苦.因此,如果Web应用程序被黑客入侵.黑客可以做的唯一的事情就是调用存储过程作为web服务器上的用户帐户被锁定,只看到在DB /调用存储过程.所以现在黑客必须弄清楚如何进入数据库.如果它在Web服务器上很好,它很容易到达.



10> Oriental..:

我同意Daniel Earwicker的说法 - 安全问题存在很大缺陷.

如果您使用网络服务器进行单一框设置,并且只有该网络服务器的数据库,那么如果该网络服务器遭到入侵,则会丢失该网络服务器以及该特定应用程序的数据库.

这与在双服务器设置上丢失网络服务器时发生的情况完全相同.您丢失了Web服务器,只丢失了该特定应用程序的数据库.

您拥有双服务器设置的"保持数据库服务器完整性的其余部分"的论点是无关紧要的,因为在第一种情况下,与其他所有应用程序相关的每个其他数据库服务器(如果有的话)也不受影响 - 就像他们一样,在其他地方举办.

同样,对于Kev提出的问题,那么驻留在数据库服务器上的所有其他数据库呢?你丢失的只是一个数据库.

如果您在一台服务器上托管应用程序和数据库,则只能在该服务器上托管与该应用程序相关的数据库.因此,与多服务器设置相比,您不会在单个服务器设置中丢失任何其他数据库.

相比之下,在2服务器设置中,攻击者可以访问Web服务器,并通过代理,数据库服务器的有限权限(在最好的情况下),他们可以通过携带使其他应用程序的数据库处于危险之中缓慢,内存密集型查询或最大化数据库服务器上的可用存储空间.通过将应用程序分离到他们自己的关注点(非常类似于虚拟化),您还可以出于安全目的以正面方式隔离它们.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有