并发
耗子肉
这个作者很懒,什么都没留下…
展开
-
11.防刷限流
之前我们已经讲了流量削峰,接下来讲下防刷限流。首先我们可以使用比较通用的验证码,包装秒杀令牌前置,需要验证码来错峰。我们可以使用awt来生成图片:public class CodeUtil { private static int width = 90;// 定义图片的width private static int height = 20;// 定义图片的heigh...原创 2020-04-11 16:18:45 · 417 阅读 · 0 评论 -
10.秒杀削峰泄洪策略
关于削峰技术,常用场景例如秒杀。为什么要流量削峰?之所以叫秒杀,也就是第一秒的时候流量涌入的问题,瞬时流量变大可能对机器造成影响,因此我们需要把第一秒的流量平滑的过度掉,削弱峰值,把流量平滑的过渡到第二秒或者后面,让系统性能有平滑的提升。对于我们现在没有做任何操作的时候,秒杀下单的接口会被脚本不停地刷。秒杀验证逻辑和秒杀下单接口强关联,代码冗余度高。秒杀验证逻辑复杂,对交易系统产生无关联负载。...原创 2020-04-11 14:45:39 · 569 阅读 · 0 评论 -
9.交易性能优化-事务型消息
之前我们说了一个场景,在交易合法性验证后开始扣减库存,用mq来更改数据库,然后进行订单处理。但是这样有个问题就是,如果之后处理订单的时候出问题了,那么之前mq发的消息撤不回来,数据已经改了,那肯定就有问题了。基于这个情况,我们有一个简单的处理方式,由于我们使用了springboot的事务,他给我们提供了一个事务提交以后执行的接口TransactionSynchronizationManager:...原创 2020-04-10 16:07:54 · 319 阅读 · 0 评论 -
8.交易方面的优化,redis和rocketmq
我们对于交易进行一下200个线程压测,看下应用服务器的资源:再看下压测结果:接下来用1000个线程看下数据库资源:并且耗时也加大了:那么对于下单我们一般会有几个步骤:1.校验商品是否存在,用户是否合法,购买数量是否正确。2.落单减库存。3.订单入库,加商品销量。4.返回前端。通过上面步骤,其实我们对于数据库至少有6次操作,而且在减数据库的时候是根据id操作,那还...原创 2020-04-10 00:38:28 · 1085 阅读 · 0 评论 -
7.关于cdn、页面静态化
我们之前一直都在介绍动态请求的加速,接下来讲一下静态请求,也就是cdn。当请求来到服务器上时,如果是访问静态资源,那么就将请求解析到cdn加速域名中,再由cdn(海量的就近加速节点)就近看有没有存静态资源,有的话直接返回,没有的话去指定的http地址中抓取数据返回并缓存起来,下次就可以直接返回了。接下来配置一下,这里用的是阿里云的:在cdn上添加配置,ip就是nginx的ip:...原创 2020-04-08 12:02:47 · 2556 阅读 · 0 评论 -
6.nginx的共享字典、redis实战简介
首先创建一个lua文件ngx.log(ngx.ERR,"lua sucess");在nginx配置文件中加:启动nginx:也就是说这个脚本会在nginx启动的时候执行。当然,一般用的不多,用的更多的是content_by_lua来指定lua实现什么样的内容,接下来试一下:配置下nginx新建lua脚本:ngx.say("hello static ite...原创 2020-04-07 16:03:23 · 404 阅读 · 0 评论 -
5.查询性能优化
缓存设计对于缓存设计,有几个原则:用快速存取设备,例如内存将缓存推到离用户最近的地方脏缓存清理,也就是数据库变化后,缓存内的数据也要同步更新多级缓存redis缓存对于redis,不同太多介绍了。这里介绍一下单机版和sentinal哨兵模式和集群cluster模式对于哨兵模式,就是用一个sentinal节点管理redis,sentinal和主从redis有长连接,并发...原创 2020-04-07 14:33:55 · 251 阅读 · 0 评论 -
4.会话管理
基于cookie传输sessionid:java tomcat容器session实现对于传统实现,我们经常会用cookie来传输session,将登录状态等信息传到request的session中。基于token传输类似sessionid:java代码session实现在移动端或是很多浏览器会禁用cookie,导致通过cookie不奏效,因此出现了基于token的方式。具体实现后面再说...原创 2020-04-06 17:05:14 · 112 阅读 · 0 评论 -
3.nginx长连接优化
在单机的情况下的压测结果:分布式的压测结果:虽然tps还是比较少,但是还是有提升,主要是因为数据库的服务器的配置是很低的,所以扩展这里其实就更有帮助,这里就不再修改了。而对于nginx和服务之间的连接还是短连接,所以还是有性能消耗,接下来我们把nginx的连接改成长连接:由于数据库服务器配置问题,所以数字上看不出太多变化,如果配置好的机器,变化是非常大的。...原创 2020-04-03 16:18:40 · 700 阅读 · 0 评论 -
2.nginx分布式扩展
通过单机压测可以看到,吞吐量在200-300之间,对于服务器的数据库也有较大的压力。nginx反向代理负载均衡在单机的情况下,容量总归有上限,对于我们看服务器后台进程情况,有这样一个图:表象上:单机cpu使用率增高,内存占用增加,网络带宽使用增加。cpu us:用户空间的cpu使用情况(用户层代码)cpu sy:内核空间的cpu使用情况(系统调用)load aver...原创 2020-04-03 15:56:14 · 330 阅读 · 0 评论 -
1.springboot压测调优
通过压测可以找到服务器的上限,ps -ef |grep java找到java的进程号,然后通过pstree -p 12569 | wc -l可以看到当前java的线程数。当我们的压测到达一定数量的时候,请求会报错:这是可以去看下线程数:也就是由于server端并发线程数上不去,导致客户端请求被拒。首先看下spring-configuration-metadata.json文件...原创 2020-04-02 23:12:34 · 3055 阅读 · 1 评论