日期:2014-05-16  浏览次数:21733 次

网站长连接用户访问过多造成IIS卡死怎么解决 ?
我的网站是一个实时性的购票网站。
流程 :
1、用户点击上面的查询余票。网站通过ajax提交一次请求到服务器
2、服务器收到请求,及时发送请求至第三方接口。
3、第三方接口收到请求,读取数据并返回。(通常,这里的时间有可能需要几秒)
4、服务器收到通知,返回给用户。

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

请教各位大侠可有办法解决这个问题吗?无论是从服务器配置还是从程序设计上能够解决这个问题都可以。
------解决方案--------------------
1 . 你这个可以试着把缓存加上去。
2. 加一个服务器平衡负载
------解决方案--------------------
不考虑成本,可以再加一台服务器,分开处理
------解决方案--------------------
数据库和站点都在一台服务器上呢,如果这样就可以改为两台服务器放站点,一台放数据库
比如两个按钮,各个按钮的处理都在各个服务器,服务器压力就小了啊,数据也会一致啊
不过成本也高了
------解决方案--------------------
你的意思是数据库上的那个服务器资源达到上限吧,我听说过一个办法,就是两个服务器两个数据库,一个是主数据库,一个是备份数据库,这两个可以实现数据同步,就是说你查询的一些数据用备份数据库效果和主数据库是一样的
------解决方案--------------------
这不是长链接,这是客户端在长时间等待你的服务器通讯结果,你可以改成服务器接收到请求后立刻返回结果到客户端,然后客户端定时(1秒一次)轮询服务器,看通讯结果是否已经获取,如果有,则把此通讯结果返回到客户端

我看到长连接,还以为是html5的WebSocket了。。。
------解决方案--------------------
第三方接口 反应太迟钝的话,我看考虑换这接口,点击订票的那做个延时 ,稍微排下队吧.用户多,就飙升cpu,不是程序问题比较大,那就得升级下硬件了。
------解决方案--------------------
这个本身是 IIS的连接数满了引起的。所以楼上所说的加内存加带宽的都没用。
就算你内存有1000G,也没用。因为IIS的默认连接数就2000.

一般访问量大的网站,用长连接绝对是个馊主意。HTTP不是靠长连接过活的。http的特性是快速处理快速释放。

------解决方案--------------------
13楼正解
前台提交票务查询后,服务器端返回一个唯一id,然后前台每过一段时间(5秒)使用返回的id进行一次查询,这样可以就不会存在长连接(服务器向第三方请求数据)的问题了。

另外16楼也是有道理的,你可以缓存X秒内的票数(根据票的火爆程度来决定缓存票数的时间)

以上~
------解决方案--------------------
引用:
能够做缓存的已经做了的。而且是数据缓存。
但是这个余票数必须要实时数据。因为变化比较快。


如果3秒钟缓存不合适,再改为1秒。如果1秒还不合适,再改为500毫秒。我就不信你的“实时”查询有那么高的价值?
------解决方案--------------------
做负载平衡和缓冲处理
------解决方案--------------------
如果不怕压爆第三方接口,你服务器端可以通过异步方式来提高吞吐量;
还有一个问题,你确定你的CPU上来是因为IIS连接数增多这个原因而不是你的程序有问题?按你的业务场景,最多也就是连接数太多,服务器拒绝服务而已,怎么会CPU暴增?
------解决方案--------------------
解决办法:

1.缓存
2.并发