asp.net高并发网站解决方案【未完成版本】

场景:假设现在是一个电商网站,今天要举办活动,有10个商品低价销售,但是会来抢购的人会特别多,最后只有十个人可以成功的买到商品

明确2个问题

1.访问量:抢票时间断用户访问量

2.并发:1秒内请求量

技术点:

1、Web前端优化

1.1、合并资源

1.2、分离静态资源到独立域名(防止Cookie污染)

1.3、浏览器本地缓存

1.4、服务器GZip压缩文件 (参考网址:http://www.cnblogs.com/KevinYang/archive/2010/06/02/1749675.html)

1.5、CDN加速(ISP端)

1.6、请求抢票提交增加验证码

1.7、使用反向代理(相当于 Gateway 主机,可缓存资源,还可以保护内部网络)等等。

2、消息队列:RabbitMq(用户的请求到达了抢单接口,我们只向队列中丢一条数据后就立即返回)

3、缓存层 :

3.1、首先我们需要针对IO密集型异步化操作,抢单的页面不只是有抢单按钮,还有商品的介绍,图片,文字描述等。对于这些数据我们要进行缓存(建立对应的机制:增删改),一万个用户一万次请求都从数据库中取数据与只取一次剩下9999次从缓存中取效率自然是不一样的

3.2、会有同一个用户多次进行请求的情况,如果像之前的逻辑,前10条信息有二条是属于一个人的呢,(这里假设每个人只可以购买一次)我们就需要进行判断了,同一个账户发送的多次请求,我们只认为第一次请求是有效的,剩下的都请都直接返回。因为是并发,我们又怎么做到第一次请求有效呢?这时我们可以使用Redis incr存储用户的标识,Redis是单线程的,不存在并发的问题。incr返回为1那么是第一次请求,为N则是第N请求那么它就是无效的

4、代码层

  • 服务层(webapi\wcf等技术)

5、数据库层

  • 分布数据(未知)
  • 读写分离(数据库复制技术发布订阅方式:主数据库写操作从数据库查询)-未解决
  • 表数据拆分

水平拆分(表分区-已解决)

垂直拆分(单表按照业务功能拆分字段为多表按,比如A表有a、b、c、d、e、f字段 a、b、c是业务A常用的操作字段d、e、f是业务B常用的操作字段)-未解决

  • 数据库缓存(Redis)-未解决

参考文章:Net高并发解决思路(附源码)