Skip to content

Commit 9d6cba5

Browse files
committed
🐛 Fixing a bug.img
1 parent d328d16 commit 9d6cba5

1 file changed

Lines changed: 28 additions & 28 deletions

File tree

docs/architecture-design/seconds-kill.md

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
![](https://ws2.sinaimg.cn/large/006tKfTcly1fr1z9k79lrj31kw11zwt8.jpg)
1+
![](https://i.loli.net/2019/05/08/5cd1d713e19ed.jpg)
22

33
## 前言
44

@@ -37,7 +37,7 @@
3737

3838
先看看实际项目的结构:
3939

40-
![](https://ws2.sinaimg.cn/large/006tKfTcly1fr38jkau5kj30jk07a754.jpg)
40+
![](https://i.loli.net/2019/05/08/5cd1d71693bb0.jpg)
4141

4242
还是和以前一样:
4343

@@ -173,24 +173,24 @@ public class OrderServiceImpl implements OrderService {
173173
手动调用下 `createWrongOrder/1` 接口发现:
174174

175175
库存表:
176-
![](https://ws3.sinaimg.cn/large/006tKfTcly1fr38x4wqhcj30g404ajrg.jpg)
176+
![](https://i.loli.net/2019/05/08/5cd1d7189c72f.jpg)
177177

178178
订单表:
179-
![](https://ws1.sinaimg.cn/large/006tKfTcly1fr38xpcdn7j30f0040glq.jpg)
179+
![](https://i.loli.net/2019/05/08/5cd1d721e9fd4.jpg)
180180

181181
一切看起来都没有问题,数据也正常。
182182

183183
但是当用 `JMeter` 并发测试时:
184184

185-
![](https://ws2.sinaimg.cn/large/006tKfTcly1fr391hontsj31ge0b8dgt.jpg)
185+
![](https://i.loli.net/2019/05/08/5cd1d7243c657.jpg)
186186

187187
测试配置是:300个线程并发,测试两轮来看看数据库中的结果:
188188

189-
![](https://ws4.sinaimg.cn/large/006tKfTcly1fr393xxc0rj31ge0463z6.jpg)
189+
![](https://i.loli.net/2019/05/08/5cd1d726cee79.jpg)
190190

191-
![](https://ws4.sinaimg.cn/large/006tKfTcly1fr3939yo1bj30c4062t8s.jpg)
191+
![](https://i.loli.net/2019/05/08/5cd1d72816d67.jpg)
192192

193-
![](https://ws4.sinaimg.cn/large/006tKfTcly1fr393pxvf3j30j60d60v4.jpg)
193+
![](https://i.loli.net/2019/05/08/5cd1d72b9f26a.jpg)
194194

195195
请求都响应成功,库存确实也扣完了,但是订单却生成了 **124** 条记录。
196196

@@ -251,17 +251,17 @@ public class OrderServiceImpl implements OrderService {
251251

252252
同样的测试条件,我们再进行上面的测试 `/createOptimisticOrder/1`
253253

254-
![](https://ws4.sinaimg.cn/large/006tKfTcly1fr39fxn691j31g603adgg.jpg)
254+
![](https://i.loli.net/2019/05/08/5cd1d72dab853.jpg)
255255

256-
![](https://ws2.sinaimg.cn/large/006tKfTcly1fr39dlobs1j30ca042wej.jpg)
256+
![](https://i.loli.net/2019/05/08/5cd1d730800b1.jpg)
257257

258-
![](https://ws2.sinaimg.cn/large/006tKfTcly1fr39dwfmrzj30f60gqgn7.jpg)
258+
![](https://i.loli.net/2019/05/08/5cd1d73324dd2.jpg)
259259

260260
这次发现无论是库存订单都是 OK 的。
261261

262262
查看日志发现:
263263

264-
![](https://ws2.sinaimg.cn/large/006tKfTcly1fr39hxcbsgj31kw0jhu0y.jpg)
264+
![](https://i.loli.net//2019//05//08//5cd1daafb70bc.jpg)
265265

266266
很多并发请求会响应错误,这就达到了效果。
267267

@@ -272,9 +272,9 @@ public class OrderServiceImpl implements OrderService {
272272
- web 利用 Nginx 进行负载。
273273
- Service 也是多台应用。
274274

275-
![](https://ws3.sinaimg.cn/large/006tKfTcly1fr39lm8iyjj31kw0ad784.jpg)
275+
![](https://i.loli.net/2019/05/08/5cd1d752909b9.jpg)
276276

277-
![](https://ws4.sinaimg.cn/large/006tKfTcly1fr39lvxnunj31kw0adaeh.jpg)
277+
![](https://i.loli.net/2019/05/08/5cd1d758c7714.jpg)
278278

279279
再用 JMeter 测试时可以直观的看到效果。
280280

@@ -418,11 +418,11 @@ echo "start $appname success"
418418
通过 `Druid` 的监控来看看之前请求数据库的情况:
419419

420420
因为 Service 是两个应用。
421-
![](https://ws1.sinaimg.cn/large/006tKfTcly1fr3a1zpp5lj31kw0h277s.jpg)
421+
![](https://i.loli.net/2019/05/08/5cd1d764221b5.jpg)
422422

423-
![](https://ws3.sinaimg.cn/large/006tKfTcly1fr3a2c0vvdj31kw0g4n0m.jpg)
423+
![](https://i.loli.net/2019/05/08/5cd1d7676e1d2.jpg)
424424

425-
![](https://ws4.sinaimg.cn/large/006tKfTcly1fr3a3xwslqj319g10cthl.jpg)
425+
![](https://i.loli.net//2019//05//08//5cd1daeb0c306.jpg)
426426

427427
数据库也有 20 多个连接。
428428

@@ -554,15 +554,15 @@ Service 端就没什么更新了,依然是采用的乐观锁更新数据库。
554554

555555
再压测看下效果 `/createOptimisticLimitOrderByRedis/1`
556556

557-
![](https://ws3.sinaimg.cn/large/006tKfTcly1fr3amu17zuj30e603ewej.jpg)
557+
![](https://i.loli.net/2019/05/08/5cd1d776c39b7.jpg)
558558

559-
![](https://ws4.sinaimg.cn/large/006tKfTcly1fr3an1x3pqj30oy0fwq4p.jpg)
559+
![](https://i.loli.net/2019/05/08/5cd1d77ba16d2.jpg)
560560

561-
![](https://ws2.sinaimg.cn/large/006tKfTcly1fr3aml0c8rj31ek0ssn3g.jpg)
561+
![](https://i.loli.net/2019/05/08/5cd1d780d5aa2.jpg)
562562

563-
![](https://ws1.sinaimg.cn/large/006tKfTcly1fr3ank9otcj31kw0d4die.jpg)
563+
![](https://i.loli.net/2019/05/08/5cd1d784644d5.jpg)
564564

565-
![](https://ws4.sinaimg.cn/large/006tKfTcly1fr3anxbb0hj31kw0cjtbb.jpg)
565+
![](https://i.loli.net/2019/05/08/5cd1d787b3e49.jpg)
566566

567567
首先是看结果没有问题,再看数据库连接以及并发请求数都有**明显的下降**
568568

@@ -571,7 +571,7 @@ Service 端就没什么更新了,依然是采用的乐观锁更新数据库。
571571

572572
其实仔细观察 Druid 监控数据发现这个 SQL 被多次查询:
573573

574-
![](https://ws3.sinaimg.cn/large/006tKfTcly1fr3aq7shudj31kw0bomzp.jpg)
574+
![](https://i.loli.net/2019/05/08/5cd1d78b3896a.jpg)
575575

576576
其实这是实时查询库存的 SQL,主要是为了在每次下单之前判断是否还有库存。
577577

@@ -638,13 +638,13 @@ Service 端就没什么更新了,依然是采用的乐观锁更新数据库。
638638

639639
压测看看实际效果 `/createOptimisticLimitOrderByRedis/1`
640640

641-
![](https://ws1.sinaimg.cn/large/006tKfTcly1fr3b419f2aj30by04g0ss.jpg)
641+
![](https://i.loli.net/2019/05/08/5cd1d78d659b6.jpg)
642642

643-
![](https://ws2.sinaimg.cn/large/006tKfTcly1fr3b48vebkj30gk0cy0u3.jpg)
643+
![](https://i.loli.net/2019/05/08/5cd1d790607a1.jpg)
644644

645-
![](https://ws2.sinaimg.cn/large/006tKfTcgy1fr3b55kyv6j31kw0dijtx.jpg)
645+
![](https://i.loli.net/2019/05/08/5cd1d79307676.jpg)
646646

647-
![](https://ws3.sinaimg.cn/large/006tKfTcgy1fr3b5n1n21j31kw0c2acg.jpg)
647+
![](https://i.loli.net/2019/05/08/5cd1d7973de43.jpg)
648648

649649
最后发现数据没问题,数据库的请求与并发也都下来了。
650650

@@ -691,4 +691,4 @@ Service 端就没什么更新了,依然是采用的乐观锁更新数据库。
691691
### 号外
692692
最近在总结一些 Java 相关的知识点,感兴趣的朋友可以一起维护。
693693

694-
> 地址: [https://github.com/crossoverJie/JCSprout](https://github.com/crossoverJie/JCSprout)
694+
> 地址: [https://github.com/crossoverJie/JCSprout](https://github.com/crossoverJie/JCSprout)

0 commit comments

Comments
 (0)