我有一个 aspx 网站,其中包含许多页面,这些页面接受用户输入,从 SQL 数据库中提取数据,进行一些繁重的数据处理,然后最终将数据呈现给用户。
该站点变得越来越大,并且开始对服务器施加很大压力。
我想做的可能是将事情分开一点:
服务器-A 将托管网站,该站点将接受用户的输入并将这些参数传递给在服务器-B 上运行的应用程序
Server-B 将从 SQL 中获取数据,进行繁重的数据处理,然后将数据集或数据表对象传递回网站。
这可能吗?
当然,这称为N 层架构。
最明显的分离是一台数据库服务器,经过调整以满足数据库的需求(快速磁盘、大量 RAM)和一台或多台独立的 Web 服务器。
您可以通过在 Web 服务器和数据库服务器之间放置一个应用层来扩展它。应用层可以接受在 Web 层收集的用户输入,与数据库交互,进行繁重的处理,并将结果返回给 Web 层。最典型的是,您将使用Windows Communication Foundation (WCF) 将应用层的功能公开给 Web 服务器。应用程序服务器可能经常被调整为具有非常快的 CPU,并且可能具有比数据库服务器更慢的磁盘和更少的内存,具体取决于它们需要做什么。这个解决方案的美妙之处在于,随着应用程序负载的增长,您可以添加越来越多相同的应用程序服务器。
根据业务模型,您需要一些缓存策略来防止对每个输入进行大量计算。考虑一个股票网站。虽然每分钟有很多交易,但它们不会为每一个更新市场趋势。他们可以根据定义的时间间隔(每小时、每天...)、定义的交互次数(基于值的计数)等来安排更新。任务应该在服务器负载较低时完成。通过这种方式,访问者可以在足够准确的情况下在主页上看到股票趋势。对于如此重的负载情况,好的设计就是一切,因为有时即使是昂贵的硬件也无济于事。如果您愿意,请分享一些有关正在做的事情的信息。
我会使用像 F5 这样的负载均衡器
这样您的架构不会改变,但我会使用 ntier 方法将您的站点拆分为数据和表示层,然后负载均衡器会将每个请求定向到负载最轻的服务器