
解决方案
文章平均质量分 89
今日相乐,皆当喜欢
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【商城秒杀项目】-- 项目总结
最近对商城秒杀项目所用到的技术进行了剖析,技术点还是挺多的,本篇博客就来对商城秒杀项目进行一个总结与整理项目相关博客汇总1、【商城秒杀项目】-- 概况2、【商城秒杀项目】-- 对返回json结果的封装、通用缓存Key的设计与封装3、【商城秒杀项目】-- 登录时使用两次MD5加密4、【商城秒杀项目】-- 使用JSR303进行参数校验、全局异常处理5、【商城秒杀项目】-- 分布...原创 2020-02-27 14:57:18 · 12127 阅读 · 11 评论 -
【商城秒杀项目】-- 接口限流防刷
接口限流防刷的目的限制同一个用户一段时间之内只能访问固定次数,在服务端对系统做一层保护实现思路利用缓存实现,当用户每次点击访问接口的时候,在缓存中生成一个计数器,第一次请求的时候将这个计数器计数为1后存入缓存,并给其设定有效期,比如一分钟,如果一分钟之内再访问,那么数值加一;一分钟之内访问次数超过限定数值,就直接返回“访问过于频繁”;等到下一个一分钟,数据又重新从0开始计算,因为给缓存...原创 2020-02-26 15:09:11 · 1696 阅读 · 0 评论 -
【商城秒杀项目】-- 使用数学图形验证码来进行限流
秒杀接口地址隐藏可以防止恶意用户通过频繁调用接口来请求的操作,但是无法防止机器人,刷票软件还是可以恶意频繁点击按钮来刷请求秒杀地址接口高并发下场景,在刚刚开始秒杀的那一瞬间,迎来的并发量是最大的,减少同一时间点的并发量,将并发量分流也是一种减少数据库以及系统压力的措施(使得1s中来10万次请求过渡为10s中来10万次请求)本篇博客记录如何使用数学图形验证码来进行限流,限流削峰操作具体可参考...原创 2020-02-26 14:05:14 · 1174 阅读 · 0 评论 -
【商城秒杀项目】-- 秒杀接口地址隐藏
每次点击秒杀按钮的时候,才生成秒杀地址,秒杀地址不是写死的,而是从服务端获取,动态拼接而成的地址(HTTP协议是明文传输,前端是防不住恶意用户的攻击,所以安全校验要放在服务端,从而禁止掉这些恶意攻击),本篇博客记录如何进行秒杀接口地址隐藏进行安全优化实现思路:在进行秒杀之前,先去后端获取一个动态的秒杀地址path(由后端生成随机字符串作为path),然后将这个随机字符串返回给前端,前端将这...原创 2020-02-26 12:41:51 · 2736 阅读 · 0 评论 -
【商城秒杀项目】-- 使用rabbitmq异步下单
针对秒杀的业务场景,在高并发下,仅仅依靠页面缓存、对象缓存或者页面静态化等还是远远不够,数据库压力还是很大,所以需要异步下单,如果业务执行时间比较长,那么异步是最好的解决办法,但会带来一些额外的程序上的复杂性具体思路:系统初始化,把商品库存数量加载到Redis里面去 后端收到秒杀请求,Redis预减库存,如果库存已经到达临界值的时候,就不需要继续请求下去,直接返回失败,即后面的大量请求无...原创 2020-02-25 16:11:40 · 6724 阅读 · 0 评论 -
【商城秒杀项目】-- 秒杀的业务逻辑、接口的优化
秒杀业务场景并发量很大,瓶颈在数据库,怎么解决?可以加缓存。用户在发起请求时,从浏览器开始,在浏览器上做页面静态化直接将页面缓存到用户的浏览器端,然后请求到达网站之前可以部署CDN节点,让请求先访问CDN,到达网站的时候使用页面缓存。页面缓存再进一步,粒度再细一点的话就是对象缓存,缓存层依次请求完之后,才是数据库。通过一层一层的访问缓存逐步的削减到达数据库的请求数量,这样才能保证网站在高并发之下扛...原创 2020-02-25 13:12:22 · 3429 阅读 · 1 评论 -
【商城秒杀项目】-- 页面伪静态化
本项目中只是简单的实现页面静态化:将页面直接缓存到用户的浏览器上面好处:用户访问数据的时候,不用去请求服务器,直接在本地缓存中取得需要的页面缓存未作页面静态化时的请求过程:请求某一个页面,访问缓存,查看缓存中是否有,缓存中有直接返回,缓存中没有的话,将数据渲染到HTML页面再存到缓存,再将整个HTML页面返回给客户端显示做了页面静态化的请求过程:第一次是去请求后台渲染好的HTML页面,...原创 2020-02-24 19:14:18 · 1401 阅读 · 0 评论 -
【商城秒杀项目】-- 页面缓存、URL缓存、对象缓存
常用的页面优化技术页面缓存+URL缓存+对象缓存由于并发瓶颈在数据库,所以要想办法来减少对数据库的访问,可以加若干缓存来解决,通过各种粒度的缓存,最大粒度的页面级缓存到最小粒度的对象级缓存页面静态化,前后端分离页面都是纯的HTML,通过js或者ajax来请求服务器,如果做了静态化,浏览器可以把HTML缓存在客户端静态资源优化JS/CSS压缩,减少流量(使用压缩版的JS,去掉多余的...原创 2020-02-24 16:44:55 · 1597 阅读 · 0 评论 -
【商城秒杀项目】-- 流量削峰应该怎么做
如果你看过秒杀系统的流量监控图的话,你会发现它是一条直线,在秒杀开始那一秒是一条很直很直的线,这是因为秒杀请求在时间上高度集中于某一特定的时间点。这样一来,就会导致一个特别高的流量峰值,它对资源的消耗是瞬时的。但是对秒杀这个场景来说,最终能够抢到商品的人数是固定的,也就是说100人和10000人发起请求的结果都是一样的,并发度越高,无效请求也越多。但是从业务上来说,秒杀活动是希望更多的人来...原创 2020-02-23 11:05:23 · 2232 阅读 · 0 评论 -
【商城秒杀项目】-- 分布式Session的实现、使用Aop校验Token令牌
通常秒杀项目可能不止部署在一个服务器上,而是使用分布式部署在多台服务器,这时候假如用户登录是在第一个服务器,第一个请求到了第一台服务器,这是没问题的;但是第二个请求到了第二个服务器,那么用户的Session信息就丢失了解决:使用session同步,无论访问那一台服务器,session都可以取得到本项目:利用一台缓存服务器集中管理session,即利用缓存统一管理session分布式Se...原创 2020-02-22 18:00:46 · 2015 阅读 · 0 评论 -
【商城秒杀项目】-- 使用JSR303进行参数校验、全局异常处理
什么是JSR-303JSR是Java Specification Requests的缩写,意思是Java规范提案,是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务,JSR已成为Java界的一个重要标准JSR-303是JAVA EE 6中的一项子规范,叫做Bean Validatio...原创 2020-02-22 15:16:29 · 954 阅读 · 0 评论 -
【商城秒杀项目】-- 登录时使用两次MD5加密
做MD5加密的目的如果不做任何处理,那明文密码就会在网络上进行传输,假如在传输过程中被恶意用户取得这个数据,就可以得到这个密码,所以不安全做两次MD5加密的目的用户端:pwd=MD5(明文+固定Salt)服务端:pwd=MD5(第一次加密后的密码+随机Salt)第一次 (在前端加密):密码加密是(明文密码+固定盐值)生成MD5用于传输,目的是由于http是明文传输,当输入密码若直...原创 2020-02-21 19:02:05 · 1819 阅读 · 0 评论 -
【商城秒杀项目】-- 对返回json结果的封装、通用缓存Key的设计与封装
对返回json结果的封装在MVC模式中Controller接口类里面一般有两种返回值:rest api的json格式数据、页面;在前后端开发模式中,后端开发人员与前端开发人员会对接口返回值进行约定,返回值一般是以rest api的json格式数据为主,比如下面这种格式:{ "code": 200 //状态码:不同的状态码有着不同的含义 "msg": "success" /...原创 2020-02-21 16:43:13 · 1575 阅读 · 0 评论 -
【商城秒杀项目】-- 概况
什么是秒杀秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购秒杀系统场景特点秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增 秒杀一般是访问请求数量远远大于库存数量,只有少部分用户...原创 2020-02-20 17:04:16 · 4921 阅读 · 2 评论