高并发架构实战精髓

高并发架构实战精髓

ID:43858739

大小:193.64 KB

页数:18页

时间:2019-10-16

高并发架构实战精髓_第1页
高并发架构实战精髓_第2页
高并发架构实战精髓_第3页
高并发架构实战精髓_第4页
高并发架构实战精髓_第5页
资源描述:

《高并发架构实战精髓》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、高并发架构实战精髓_、关于高并发高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11.双12,就会产生高并发。又如贴吧的爆吧,就是恶意的高并发请求”也就是DDOS攻击,再屈丝点的说法就像玩LOL被ADC暴击了一样/那伤害你懂的。1高并发会来带的后果•服务端:导致站点服务器/DB服务器资源被占满崩溃,数据的存储和更新结果和理想的设计是不一样的,比如:出现重复的数据记录,多次添加了用户积分等。•用户角度:尼玛,这么卡,老子来参加活动的,刷新了还是这样,垃圾网站,再也不来了!•我的经历:在做公司产品网站的过程中,经常会有这样的需求,比如搞

2、个活动专题、抽奖、签到、积分竞拍等等,如果没有考虑到高并发下的数据处理,那就GameOver了,很容易导致抽奖被多抽走,签到发现一个用户有多条记录等等,各种超出正常逻辑的现象,这就是做产品网站必须考虑的问题,因为这些都是面向大量用户的,而不是像做ERP管理系统、0A系统那样,只是面向员工。下面我进行实例分析,简单粗暴,动态分析,纯属本人经验分享,如有说错或者更好的建议,请留言,大家一起成长。2并发下的数据处理通过表设计,如:记录表添加唯一约束,数据处理逻辑使用事物防止并发下的数据错乱问题。通过服务端锁进程防止包并发下的数据错乱问题。这里主要讲述的是在并发

3、请求下的数据逻辑处理的接口,如何保证数据的一致性和完整性,这里的并发可能是大量用户发起的,也可能攻击者通过并发工具发起的并发请求。例子1:通过表设计防止并发导致数据错乱•需求点:【签到功能】一天一个用户只能签到一次,签到成功后用户获取到一个积分。已知表:1、用户表,包含积分字段;2、高并发意淫分析(属于开发前的猜测):在高并发的情况下,会导致一个用户签到记录会有多条,或者用户签到后不止加一积分。•我的设计:首先根据需求我会添加一张签到记录表,重点来了,这张表需要把用户唯一标识字段(IDJoken)和签到日期字段添加为唯一约束,或者唯一索引,这样就可以防止

4、并发的时候插入重复用户的签到记录。然后再程序代码逻辑里,先执行签到数据的添加(这里可以防止并发,添加成功后再进行积分的添加,这样就可以防止重复地添加积分了。最后我还是建议所有的数据操作都写在一个sql事务里面,这样在添加失败,或者编辑用户积分失败的时候可以回滚数据。例子2:事务+通过更新锁,防止并发导致数据错乱;或者事物+Update的锁表机制•需求点:【抽奖功能】抽奖一次消耗一个积分,抽奖中奖后编辑剩余奖品总数,剩余奖品总数为0,或者用户积分为0的时候无法进行抽奖。•已知表:用户表,包含积分字段奖品表,包含奖品剩余数量字段。•高并发意淫分析(属于开发前

5、的猜测):在高并发的情况下,会导致用户参与抽奖的时候积分被扣除,而奖品实际上已经被抽完了。•我的设计:在事物里,通过WITH(UPDLOCK)锁住商品表,或者Update表的奖品剩余数量和最后编辑时间字段,来把数据行锁住,然后进行用户积分的消耗,都完成后提交事物,失败就回滚。这样就可以保证,只有可能存在一个操作在操作这件商品的数量,只有等到这个操作事物提交后,其他的操作这个商品行的事物才会继续执行。例子3:通过程序代码防止包并发下的数据错乱问题•需求点:【缓存数据到cache里】,当缓存不存在的时候,从数据库中获取并保存在cache里,如果存在从cach

6、e里获取,每天10点必须更新一次,其他时间点缓存两个小时更新一次到10点的时候,凡是打开页面的用户会自动刷新页面。•问题点:这里有个逻辑用户触发缓存的更新,用户刷新页面,当缓存存在的时候,会取到最后一次缓存更新时间,如果当前时间大于十点,并且最后缓存时间是10点前,则会从数据库中重新获取数据保存到cache中。还有客户端页面会在10点时候用js发起页面的刷新,就是因为有这样的逻辑,导致10点的时候有很多并发请求同时过来,然后就会导致很多的sql查询操作,理想的逻辑是,只有f请求会去数据库获取,其他都是从缓存中获取数据。(因为这个sql查询很耗服务器性能,

7、所以导致在10点的时候,突然间数据库服务器压力暴增)•解决问题:C#通过(锁)lock,在从数据读取到缓存的那段代码前面加上锁,这样在并发的情况下只会有一个请求是从数据库里获取数据,其他都是从缓存中获取。3访问量大的数据统计接口•需求:用户行为数据统计接口,用来记录商品展示次数,用户通过点击图片,或者链接,或者其他方式进入到商品详情的行为次数。•问题点:这接口是给前端ajax使用,访问量会很大,一页面展示的时候就会有几十件商品的展示,滚动条滚到到页面显示商品的时候就会请求接口进行展示数据的统计,每次翻页又会加载几十件。•意淫分析:设想如果同时有1W个用户

8、同时在线访问页面,一个次拉动滚动条屏幕页面展示10件商品,这样就会有10W个请求

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。