asp.net开发的app访问的api接口程序如何利用缓存减少数据库压力?

Captain业 2016-01-23 04:18:22
1、介绍,asp.net+sqlserver2008开发的程序,供app调用,日活跃用户1.5万,查询操作频繁,更新、插入操作集中在几个时间段,峰值时间较短;硬件:A、数据库服务器(CPU: 8核 内存: 16384 MB 带宽:100Mbps(峰值))、B、程序服务器(CPU: 8核 内存: 16384 MB 带宽:100Mbps(峰值))、C程序服务器(CPU: 8核 内存: 16384 MB 带宽:100Mbps(峰值))
2、数据库平时性能:CPU占用5%、内存占用10G 两台程序服务器:CPU占用5%、内存占用9~11G
3、开发工期较紧张,当初没过多考虑性能方面,现在有时会有数据库查询慢的情况出现

想充分利用缓存优化一下,但苦于之前缓存接触不多,只能自己查找资料,该如何设计缓存的利用呢?
1、首先,页面缓存不太合适
2、利用“Cache”会发现无法跨进程访问缓存,现在iis程序池设置的最大进程数为100,之前进程数小的时候容易造成程序池崩溃,调大之后没崩溃过,而且可以重复利用的数据并不是对于所有用户,例如100个用户可以重复共用一个缓存数据
3、可以利用“Memcached”吗?单独配置一个服务器还是在现在的服务器搭建即可?效率有保证吗?
4、还有可以考虑的其他缓存技术吗?多谢指导,多谢!!!!
...全文
248 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Captain业 2016-01-25
  • 打赏
  • 举报
回复
感谢各位
xuan.ye 2016-01-25
  • 打赏
  • 举报
回复
呵呵,大神说的很中肯啊
wq1234wq 2016-01-23
  • 打赏
  • 举报
回复
你可以从两方面入手,1.5万人不算太多,听sp1234_maJia的,不要急着上缓存。
1.你先利用DMV查到最频繁的业务和占用CPU最高的业务,尝试优化你的SQL。
2.利用一些Profile工具,比如dottrace之类的东西,附加到IIS,你就能分析出一天,哪些代码占用CPU时间最高的代码,然后再尝试优化。
分析完了你再针对性的加入缓存,有些对象经常被访问,你可以把它放到最简单的缓存里, System.web.Caching命名空间下有的,看看对性能的提升,业务大了,你再考虑分布式缓存。
你看看你数据库服务器的硬盘是什么,如果是机械硬盘,可以考虑换成类似Dc s3700,甚至intel 750之类的SSD,提高IO吞吐量,当然这都是后话了。


机械硬盘的4K性能上差了一个数量级都不止
Captain业 2016-01-23
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
[quote=引用 楼主 hayikouyangguang 的回复:] 3、开发工期较紧张,当初没过多考虑性能方面,现在有时会有数据库查询慢的情况出现
在这个行业中,如果我们的骨干程序员在一起,用1.5个月可以做完的事情,我们跟客户签订的协议是4个月做完,那么我们就会跟所有合作商说“开发工期较紧张”。因为如果把骨干都用来干一个项目,那么其它项目就受到影响、不能保证顺利收款了。 如果是自身能力太弱,用5个月才能做完的事情,跟客户签订协议是4个月做完,这个时候再说“开发工期较紧张”,那么你们一开始就应该考虑跑路了。[/quote] 现在知道自己技术太弱,但是没有好的职业规划。。。我现在一个小城市,公司.net技术就3个,都是和我一样的情况,应届生未毕业。。。没有有经验的技术人员,平时只能是自己在网上慢慢查;我应该去培训班学习一下还是应该去哪些城市的软件公司锻炼呢?现在在山东,感谢您的建议 多谢
Captain业 2016-01-23
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
[quote=引用 楼主 hayikouyangguang 的回复:] 2、利用“Cache”会发现无法跨进程访问缓存,现在iis程序池设置的最大进程数为100,之前进程数小的时候容易造成程序池崩溃,调大之后没崩溃过,而且可以重复利用的数据并不是对于所有用户,例如100个用户可以重复共用一个缓存数据
什么乱七八糟的情况?100个用户访问asp.net,就需要占用100个asp.net进程? 根本用不着什么“跨进程Cache”。你应该把你的频繁地给asp.net 进程造成灾难性bug、从而迫使其不得不重启的现象做个了断,而不是纠结什么“100个进程共享Cache”。 如果你只是偶尔才会造成asp.net重启,或者至少是平均10分钟才重启一次,你还会担心 Cache 问题吗?[/quote] 1、本人还未毕业,入行1年,没有人带,而且大多数时间是因为频繁改需求而每天重复1+1等于几的简单代码,所掌握的知识你应该可以猜到是什么的状况。。。现在是程序每天的活跃用户在1.5万人左右,现在是数据库感觉压力很大,想减轻一下数据库的压力,因为程序没有利用任何的缓存。。。 2、不是这个意思“100个用户访问asp.net,就需要占用100个asp.net进程?”,是之前程序池设置的最大进程数很小,然后程序池是有时候会停止,也没有错误日志,就怀疑是因为进程数过少,就调整了“最大进程数”,然后程序池就不停止了,这个“最大进程数”应该设置为多少?这里和什么有关系?
sp1234_maJia 2016-01-23
  • 打赏
  • 举报
回复
你们的程序服务器(没有理由推脱给数据库系统了)占用内存10G,不过是asp.net 网站就频繁进程重启重启,在这种情况下,先不要考虑 Cache,否则很可能是错上加错了。 给你个比较可行的建议,就是把asp.net 侧程序服务器扩大到4台以上,并且随时准备增加,分布式处理。
  • 打赏
  • 举报
回复
引用 楼主 hayikouyangguang 的回复:
3、开发工期较紧张,当初没过多考虑性能方面,现在有时会有数据库查询慢的情况出现
在这个行业中,如果我们的骨干程序员在一起,用1.5个月可以做完的事情,我们跟客户签订的协议是4个月做完,那么我们就会跟所有合作商说“开发工期较紧张”。因为如果把骨干都用来干一个项目,那么其它项目就受到影响、不能保证顺利收款了。 如果是自身能力太弱,用5个月才能做完的事情,跟客户签订协议是4个月做完,这个时候再说“开发工期较紧张”,那么你们一开始就应该考虑跑路了。
  • 打赏
  • 举报
回复
另外,你的描述中都是一些“浅层技术”。如果要解决高并发的应用系统性能问题,不是弄一点任何一个初学asp.net编程的程序员都了解的技术就能解决问题的。所以我建议你从比较专门的技术入手,重构你的系统。或者请一个懂得更深入技术的设计师重新设计系统。
  • 打赏
  • 举报
回复
引用 楼主 hayikouyangguang 的回复:
2、利用“Cache”会发现无法跨进程访问缓存,现在iis程序池设置的最大进程数为100,之前进程数小的时候容易造成程序池崩溃,调大之后没崩溃过,而且可以重复利用的数据并不是对于所有用户,例如100个用户可以重复共用一个缓存数据
什么乱七八糟的情况?100个用户访问asp.net,就需要占用100个asp.net进程? 根本用不着什么“跨进程Cache”。你应该把你的频繁地给asp.net 进程造成灾难性bug、从而迫使其不得不重启的现象做个了断,而不是纠结什么“100个进程共享Cache”。 如果你只是偶尔才会造成asp.net重启,或者至少是平均10分钟才重启一次,你还会担心 Cache 问题吗?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧