网站长连接用户访问过多造成IIS卡死怎么解决 ?

wnttmk 2014-05-07 03:40:14
我的网站是一个实时性的购票网站。
流程 :
1、用户点击上面的查询余票。网站通过ajax提交一次请求到服务器
2、服务器收到请求,及时发送请求至第三方接口。
3、第三方接口收到请求,读取数据并返回。(通常,这里的时间有可能需要几秒)
4、服务器收到通知,返回给用户。

问题出现了,当用户过多时,IIS的同时在线人数会上升的特别快。CPU会上升到峰值 ,直至将IIS卡死。
我考虑的情况是,因为整个流程需要的时间超过5秒。当用户过多时,在一段时间内保持的请求连接会超过IIS的资源分配或者服务器负载。

请教各位大侠可有办法解决这个问题吗?无论是从服务器配置还是从程序设计上能够解决这个问题都可以。
...全文
1905 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zanvimocvy 2014-05-08
  • 打赏
  • 举报
回复
解决办法: 1.缓存 2.并发
hemaliu 2014-05-08
  • 打赏
  • 举报
回复
如果不怕压爆第三方接口,你服务器端可以通过异步方式来提高吞吐量; 还有一个问题,你确定你的CPU上来是因为IIS连接数增多这个原因而不是你的程序有问题?按你的业务场景,最多也就是连接数太多,服务器拒绝服务而已,怎么会CPU暴增?
wnttmk 2014-05-08
  • 打赏
  • 举报
回复
引用 23 楼 xierimin 的回复:
做负载平衡和缓冲处理
嗯。这个可以。现在一台服务器明显感觉有压力。考虑增加2-3台
xierimin 2014-05-08
  • 打赏
  • 举报
回复
做负载平衡和缓冲处理
qiqundelang 2014-05-08
  • 打赏
  • 举报
回复
引用 18 楼 wrqlgd 的回复:
[quote=引用 16 楼 sp1234 的回复:] [quote=引用 3 楼 wnttmk 的回复:] 能够做缓存的已经做了的。而且是数据缓存。 但是这个余票数必须要实时数据。因为变化比较快。
你“必须”处理1秒钟以内的变化吗?[/quote] 楼上没做过互联网产品吧? 你说淘宝一秒钟多少个请求,搜狐一秒种多少个请求 他的长连接5秒已经不算长了
wnttmk 2014-05-08
  • 打赏
  • 举报
回复
引用 20 楼 sp1234 的回复:
[quote=引用 3 楼 wnttmk 的回复:] 能够做缓存的已经做了的。而且是数据缓存。 但是这个余票数必须要实时数据。因为变化比较快。
如果3秒钟缓存不合适,再改为1秒。如果1秒还不合适,再改为500毫秒。我就不信你的“实时”查询有那么高的价值?[/quote] 哥,真有这么快的速度,知道火车票抢票吗?我们这个差不多。有时候用户查的时候有5张票,下个单不到30秒可能就没有了。 我想5秒钟之内出现这种情况还是比较少,再加入一个设置,少于5张票的时候提示用户谨慎下单吧。出现问题只好人工处理了。
wnttmk 2014-05-08
  • 打赏
  • 举报
回复
有道理。 准备实行以下办法, 1、修改WEB至数据库服务器为TCP/IP的长连接方式,不必每次都去建立连接再释放资源。 2、流程方式以UI-WEB-UI, WEB-API-WEB,UI记时读取WEB返回的数据。设置10秒超时。 3、使用数据缓存5秒内的数据。 还有高手有要补充的吗?
  • 打赏
  • 举报
回复
引用 3 楼 wnttmk 的回复:
能够做缓存的已经做了的。而且是数据缓存。 但是这个余票数必须要实时数据。因为变化比较快。
如果3秒钟缓存不合适,再改为1秒。如果1秒还不合适,再改为500毫秒。我就不信你的“实时”查询有那么高的价值?
  • 打赏
  • 举报
回复
引用 15 楼 bwangel 的回复:
这个本身是 IIS的连接数满了引起的。所以楼上所说的加内存加带宽的都没用。 就算你内存有1000G,也没用。因为IIS的默认连接数就2000. 一般访问量大的网站,用长连接绝对是个馊主意。HTTP不是靠长连接过活的。http的特性是快速处理快速释放。
http怎么靠长连接呢?
wrqlgd 2014-05-07
  • 打赏
  • 举报
回复
引用 16 楼 sp1234 的回复:
[quote=引用 3 楼 wnttmk 的回复:] 能够做缓存的已经做了的。而且是数据缓存。 但是这个余票数必须要实时数据。因为变化比较快。
你“必须”处理1秒钟以内的变化吗?[/quote] 赞一个~
wrqlgd 2014-05-07
  • 打赏
  • 举报
回复
13楼正解 前台提交票务查询后,服务器端返回一个唯一id,然后前台每过一段时间(5秒)使用返回的id进行一次查询,这样可以就不会存在长连接(服务器向第三方请求数据)的问题了。 另外16楼也是有道理的,你可以缓存X秒内的票数(根据票的火爆程度来决定缓存票数的时间) 以上~
  • 打赏
  • 举报
回复
引用 3 楼 wnttmk 的回复:
能够做缓存的已经做了的。而且是数据缓存。 但是这个余票数必须要实时数据。因为变化比较快。
你“必须”处理1秒钟以内的变化吗?
bwangel 2014-05-07
  • 打赏
  • 举报
回复
这个本身是 IIS的连接数满了引起的。所以楼上所说的加内存加带宽的都没用。 就算你内存有1000G,也没用。因为IIS的默认连接数就2000. 一般访问量大的网站,用长连接绝对是个馊主意。HTTP不是靠长连接过活的。http的特性是快速处理快速释放。
十三- 2014-05-07
  • 打赏
  • 举报
回复
第三方接口 反应太迟钝的话,我看考虑换这接口,点击订票的那做个延时 ,稍微排下队吧.用户多,就飙升cpu,不是程序问题比较大,那就得升级下硬件了。
  • 打赏
  • 举报
回复
这不是长链接,这是客户端在长时间等待你的服务器通讯结果,你可以改成服务器接收到请求后立刻返回结果到客户端,然后客户端定时(1秒一次)轮询服务器,看通讯结果是否已经获取,如果有,则把此通讯结果返回到客户端 我看到长连接,还以为是html5的WebSocket了。。。
by_封爱 2014-05-07
  • 打赏
  • 举报
回复
加内存 加带宽....
wnttmk 2014-05-07
  • 打赏
  • 举报
回复
现在不是数据库服务器的资源不够。是WEB服务器上的资源不够。 IIS上保持连接的用户过多了。
wnttmk 2014-05-07
  • 打赏
  • 举报
回复
神哪,顶一个。来人救救我。
jan307 2014-05-07
  • 打赏
  • 举报
回复
你的意思是数据库上的那个服务器资源达到上限吧,我听说过一个办法,就是两个服务器两个数据库,一个是主数据库,一个是备份数据库,这两个可以实现数据同步,就是说你查询的一些数据用备份数据库效果和主数据库是一样的
wnttmk 2014-05-07
  • 打赏
  • 举报
回复
现在是多台服务器同时运行。数据库已经独立出来了。 在查实时余票时,我们会根据一个字段来判断向哪一个服务器发送请求。可是等待服务器返回会要一段时间。中间如果出现网络异常的话还要等待超时。这段时间,客服端与IIS的连接是一直保持的。而IIS与数据服务器也有一个请求是保持的。在短时间内就有可能达到资源上限了。
加载更多回复(7)

62,046

社区成员

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

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

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

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