缓存体系结构为特定方案提供建议

ome*_*irk 6 .net c# architecture oracle caching

建立:

我们有一个.Net应用程序,它分布在6个本地服务器上,每个服务器都有一个本地数据库(ORACLE),1个主服务器和1个负载均衡机.请求来到负载均衡器,负载均衡器将传入的请求重定向到6个本地服务器之一.在某些时间间隔内,数据在主服务器中收集并重新分配到6个本地服务器,以便能够使用完整数据做出决策.

每个本地服务器都有一个缓存组件,它根据不同的参数(位置,传入参数等)缓存传入的请求.对于每个请求,本地服务器决定是转到数据库(ORACLE)还是从缓存中获取响应.但是,在这两种情况下,本地服务器都必须转发数据库,​​以便为每个请求执行1次插入和1次更新.

问题:

在高峰期,每个本地服务器每秒接收2000个请求,系统开始减速(CPU:90%).我想在添加另一台本地服务器之前增加容量.在运行一些基准测试后,瓶颈一如既往,似乎是每次请求数据库不可避免的1次插入和1次更新.

试验方法

为了降低频率,我创建了一个位于DB和.NET应用程序之间的Windows服务.它包含一个管道服务器,并从主.NET应用程序接收每个插入和更新,并将它们保存在Hashtable中.然后,新服务以特定时间间隔进入数据库一次,以进行批量插入和更新.关键是要不那么频繁地去数据库.虽然这有一个积极的影响,但它并没有像我预期的那样有益于系统负载.大多数cpu负载来自oracle.exe,因为每秒请求数增加.

我试图避免尽可能多地访问数据库,避免DB的唯一方法似乎是增加缓存命中率,而不是我尝试的上述解决方案.我的缓存命中率目前约为81%.因为每个本地计算机都有自己的缓存,所以我实际上缺少许多可缓存的请求.当两个类似的请求重定向到不同的服务器时,第二个请求无法从第一个请求的缓存结果中受益.

我在系统架构方面没有很多经验,所以我很感激这个问题的任何帮助.欢迎任何有关不同缓存架构或设置或任何工具的建议.

提前谢谢你,希望我明白我的问题.

ome*_*irk 1

我知道这个问题现在已经过时了,但我想让每个人都知道我们是如何解决问题的。

经过多次优化后,我们发现我们所需要的只是 6 台本地计算机的固态硬盘。我们安装后,CPU 立即下降到 30%。这是我第一次看到任何类型的硬件更新对性能的贡献如此之大。

如果您有高负载设置,请在进行任何软件或架构更改之前尝试升级到 SSD。

谢谢大家的回答。