Answers:
话虽如此,我当然可以看到合理的情况,这些要点都不重要。
它并不真正的事(你可以很愉快地运行您的网站在同一台机器上的网络/数据库),它只是在缩放最简单的一步..
这正是StackOverflow所做的-从运行IIS / SQL Server的单台计算机开始,然后在负载开始重载时,购买了第二台服务器,然后将SQL Server移至该服务器上。
如果性能不是问题,请不要浪费金钱来购买/维护两台服务器。
另一方面,通过引用不同的Blog Scott(Telligent的Watermasyck),他们发现大多数用户可以通过将数据库与网站放置在同一台计算机上来加快网站访问速度(使用Telligent的Community Server)。但是,对于他们的客户而言,通常db&web服务器是该计算机上的唯一应用程序,并且网站不会对计算机造成太大的压力。然后,不必在网络上发送数据的效率就足以弥补压力的增加。
我认为最大的因素将是性能。Web服务器/应用程序代码和SQL Server都会在内存中缓存常用的数据,而您在相同的内存空间中运行它们会破坏缓存性能。
汤姆对此是正确的。其他一些原因是它不具有成本效益,并且存在其他安全风险。
Web服务器对硬件的要求与数据库服务器不同。数据库服务器在具有大量内存和真正快速的磁盘阵列的情况下表现更好,而Web服务器仅需要足够的内存来缓存文件和频繁的DB请求(取决于您的设置)。关于成本效率,两台服务器不一定会便宜一些,但是性能/成本比应该更高,因为您不必在不同的应用程序之间争夺资源。由于这个原因,您可能需要为一台服务器花更多的钱,而这既要满足这两种要求,又要提供与2台专业服务器相同的性能。
安全问题是,如果单台计算机受到威胁,则Web服务器和数据库都会受到攻击。使用两台服务器,您将有喘息的机会,因为第二台服务器仍将是安全的(至少一段时间)。
此外,还有一些可伸缩性优点,因为您可能只需要维护几个数据库服务器,这些数据库服务器将被一堆不同的Web应用程序使用。这样,您无需做任何工作即可应用升级或补丁以及进行性能调整。我相信有服务器管理工具可以简化这些任务(在单机情况下)。
安全是一个主要问题。理想情况下,您的数据库服务器应位于防火墙后面,并且仅打开执行数据访问所需的端口。您的Web应用程序应使用一个SQL帐户连接到数据库服务器,该SQL帐户仅具有该应用程序运行所需的足够权限。例如,您应该删除允许放置对象的权限,并且最肯定不应该使用“ sa”之类的帐户进行连接。
万一您的Web服务器被劫持(即特权完全升级为管理员权限),最坏的情况是您的应用程序的数据库可能会受到威胁,但整个数据库服务器都不会受到威胁(如果数据库服务器和Web服务器是同一台机器)。如果您已经加密了数据库连接字符串,但黑客不够聪明,无法解密它们,那么您丢失的只是Web服务器。
哇,没有人提出这样一个事实:如果您实际上以5千美元的价格购买SQL Server,您可能会想将它用于Web应用程序之外。如果您使用快递,也许您不在乎。我看到SQL服务器为20到30个应用程序运行数据库,因此将其放在Web服务器上并不明智。
其次,取决于服务器适用于谁。我为金融公司和政府工作。因此,我们在仅使用存储过程并限制从Web服务器到SQL的端口的混帐方法中感到非常痛苦。因此,如果网络应用被黑。黑客唯一可以做的就是调用sproc,因为Web服务器上的用户帐户被锁定为只能查看/调用数据库上的sproc。因此,现在黑客必须弄清楚如何进入数据库。如果它在Web服务器上运行良好,则很容易获得。
我同意Daniel Earwicker的观点-安全性问题有很多缺陷。
如果您有一个带有Web服务器的单一安装程序设置,并且只有该Web服务器上的数据库,则如果该Web服务器受到威胁,则您将丢失该Web服务器,并且只会丢失该特定应用程序的数据库。
这与在两台服务器上丢失网络服务器时发生的情况完全相同。您将丢失Web服务器,仅丢失该特定应用程序的数据库。
在两台服务器上进行安装时,“维护数据库服务器其余部分的完整性”这一论点是不相关的,因为在第一种情况下,与其他所有应用程序相关的所有其他数据库服务器(如果有)也不会受到影响。 -被托管在其他地方。
同样,对于Kev提出的问题,“ DB服务器上驻留的所有其他数据库又如何呢?您丢失的只是一个数据库。
相比之下,在两台服务器的设置中,攻击者可以访问Web服务器,并且通过代理,可以限制对数据库服务器的权限(在最佳情况下)(在最佳情况下),他们可能会将其他所有应用程序的数据库置于危险之中。进行缓慢的,占用大量内存的查询,或者最大化数据库服务器上的可用存储空间。通过将应用程序分为各自的关注点,就像虚拟化一样,您也可以出于安全目的将它们隔离开来。
我认为是因为两台机器通常需要以不同的方式进行优化。除此之外,我不知道,我们将所有应用程序与服务器数据库一起运行在同一台机器上-前提是我们不是面向公众的-但我们没有遇到任何问题。
我无法想象太多的人会担心一台计算机同时受到这两者的危害,因为Web应用程序通常至少对数据库(如果不是数据库内部的架构)几乎无限制地访问数据。
对别人可能会说的东西感兴趣。
我听了那个播客,这很有趣,但是安全性的论点对我来说毫无意义。如果您破坏了服务器A,并且该服务器可以访问服务器B上的数据,那么您立即可以访问服务器B上的数据。
数据库许可证不是便宜的,通常按CPU收费,因此,通过分离Web服务器,可以降低数据库许可证的成本。
例如,如果您有1台同时运行8个CPU的服务器和包含8个CPU的数据库,则必须支付8 cpu的许可证费用。但是,如果您有两台服务器,每台服务器具有4个CPU,并且在一台服务器上运行数据库,则只需支付4个cpu许可证的费用。
关于通过在Web服务器上运行数据库服务器来获得真正的性能提升的说法是有缺陷的。
由于数据库服务器采用查询字符串并返回结果集,因此实际从数据服务器流向Web服务器的数据相对较小,但是处理查询和生成结果集所需的能力相对较大。因此,围绕数据传输时间优化性能就是围绕错误的事物进行优化。
关于安全性,将数据服务器放置在与Web服务器不同的盒子上具有优势。进行这样的设置并不是安全的全部,也是最终的安全,而是朝着正确方向迈出的一步。
关于可伸缩性,添加Web服务器并将其放入群集中以处理增加的流量非常容易且相对便宜。添加数据服务器并对其进行集群并不是那么容易且便宜。此外,Web服务器和数据服务器具有不同的硬件需求,因此多个设备箱可提供可扩展性。
如果您刚开始时只有一个盒子,那么使用虚拟机是个不错的选择。在一台主机上的不同VM中运行Web服务器和数据服务器可让您获得单独包装的所有收益,而费用却是一个大包装的价格。