在Web服务器上运行SQL Server
在网络服务器上运行SQL Server是好事,坏事还是无动于衷?
我正在使用Server 2008和SQL Server 2005,但是我认为这对这个问题无关紧要。
解决方案
这实际上取决于网络服务器和sql服务器正在执行的工作量。
没有更多信息,我怀疑我们将获得任何有用的答案。
这将取决于服务器的预期负载。对于小型站点,这完全没有问题(如果配置正确)。对于大型站点,我们可能需要考虑将负载分布在不同的服务器上:Web服务器,文件服务器,数据库服务器等。
对于小型网站,这没有什么区别。
但是,随着负载的增长,扩展的幅度确实非常大,并且比我们想象的要快:
- 数据库服务器建立在它们"拥有"服务器的前提下。他们以内存换取速度,并轻松使用所有可用RAM进行内部缓存。
- 一旦资源变得稀缺,分析就变得非常困难-显然IIS和SQL都在遭受苦难,而瓶颈在哪里却不那么清楚。 IIS需要CPU,SQL Server需要RAM或者CPU等
- 无论我们在代码中放入多少层,它们都在同一CPU上运行,因此,单层应用程序在这种情况下会更好地运行-开销更少-但不会扩展。
- 安全性真的很差,通常我们将SQL隔离在防火墙后面!
如果我们负担得起的话,最好花一些钱买第二台服务器,也许使用PostgreSQL。由于许可成本,一台IIS服务器和一台PostgreSQL的成本大约是IIS + SQL Server上的成本...
我想说最好是在同一台服务器上运行它们,直到出现问题为止。这样,我们可以节省一些金钱和时间。一旦该站点成功并需要进行一些体系结构更改,它应该已经为自己付出了代价。
记得备份:)
如果Web服务器是可公开访问的,那么从安全角度来看,这是一个非常糟糕的主意。
尽管从路由,防火墙,端口,身份验证等角度来看,这使许多事情变得更加困难,但分离还是不错的。当数据库服务器在Web服务器上运行时,如果Web服务器受到威胁,那么sql服务器也将受到威胁。
当我们将它们放在单独的盒子中时,我们将杆抬高了一点。
为了保护Web服务器和数据库服务器,还有许多工作要做,但是为什么要使其变得比需要的容易呢?
较大的商店可能不会认为这是最佳做法...但是,如果我们每秒处理的请求不超过数百个,则可以将它们都放在一个盒子中。
实际上,对于小型应用程序,我们将在后端看到更好的性能,因为数据不必经过网络。一切都与规模有关。
请记住,数据库服务器会消耗内存。这是一门硬汉的重要教训:如果我们决定在与Web服务器相同的计算机上运行SQL Server 2005(这是我们在问题中提到的设置),请确保我们进入Sql Server Management Studio,并且做这个:
- 右键单击服务器实例,然后单击属性
- 从左侧列表中选择"内存"
- 将"最大服务器内存"更改为服务器可以承受的容量。
如果不这样做,SQL Server最终将占用服务器的所有RAM,并无限期地挂在其上。这将导致服务器或者多或者少地飞溅而死。如果我们不知道这一点,那么进行故障排除可能会非常令人沮丧。
我已经做了很多次了。如果我们拥有大型公司的基础结构并且规模不大,那么我们就不会做这件事,但是对于很多事情来说都很好。
我已经一遍又一遍地看到这个问题。正确的答案是将SQL Server放在一台计算机上,而将IIS(Web服务器)放在另一台计算机上。钱将投入到SQL Server计算机中,因为必须购买正确的驱动器系统和RAM才能支持高效的服务器,但是Web服务器可以是一台精简的驱动器,而只需镜像驱动器集,就可以降低成本。