【五一创作】基于mysql关系型实现分布式锁(二)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【五一创作】基于mysql关系型实现分布式锁(二)

1.3. 演示超卖现象

接下来咱们使用jmeter压力测试工具,高并发下压测一下,添加线程组:并发100循环50次,即5000次请求。

给线程组添加HTTP Request请求:

填写测试接口路径如下:

再选择你想要的测试报表,例如这里选择聚合报告:

启动测试,查看压力测试报告:

测试结果:请求总数5000次,平均请求时间202ms,中位数(50%)请求是在173ms内完成的,90%请求是在344ms内完成的,最小耗时12ms,最大耗时1125ms,错误率0%,每秒钟平均473.8次。

查看mysql数据库剩余库存数:还有4870

此时如果还有人来下单,就会出现超卖现象(别人购买成功,而无货可发)。

1.4. jvm锁问题演示

使用jvm锁(synchronized关键字或者ReetrantLock)试试:

重启tomcat服务,再次使用jmeter压力测试,效果如下:

查看mysql数据库:

并没有发生超卖现象,完美解决。  

1.4.2. 原理

添加synchronized关键字之后,StockService就具备了对象锁,由于添加了独占的排他锁,同一时刻只 有一个请求能够获取到锁,并减库存。此时,所有请求只会one-by-one执行下去,也就不会发生超卖现象。

1.5. 多服务问题

使用jvm锁在单工程单服务情况下确实没有问题,但是在集群情况下会怎样? 接下启动多个服务并使用nginx负载均衡,结构如下:

启动三个服务(端口号分别8000 8100 8200),如下:

1.5.1. 安装配置nginx

基于安装nginx:

1. # 拉取镜像
2. 
3. docker pull nginx:latest
4. 
5. # 创建nginx对应资源、日志及配置目录
6. 
7. mkdir -p /opt/nginx/logs /opt/nginx/conf /opt/nginx/html
8. 
9. # 先在conf目录下创建nginx.conf文件,配置内容参照下方
10. 
11. # 再运行容器
12. 
13. docker run -d -p 80:80 --name nginx -v /opt/nginx/html:/usr/share/nginx/html 
14. 
15. -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v 
16. /opt/nginx/logs:/var/log/nginx nginx
1. user  nginx;
2. worker_processes  1;
3. 
4. error_log  /var/log/nginx/error.log warn;
5. pid        /var/run/nginx.pid;
6. 
7. events {
8.     worker_connections  1024;
9. }
10. 
11. http {
12.     include       /etc/nginx/mime.types;
13.     default_type  application/octet-stream;
14. 
15.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
16. '$status $body_bytes_sent "$http_referer" '
17. '"$http_user_agent" "$http_x_forwarded_for"';
18. 
19.     access_log  /var/log/nginx/access.log  main;
20. 
21.     sendfile        on;
22.     #tcp_nopush     on;
23. 
24.     keepalive_timeout  65;
25. 
26.     #gzip  on;
27. 
28.     #include /etc/nginx/conf.d/*.conf;
29.   
30.   upstream distributed {
31.     server 172.16.116.1:8000;
32.     server 172.16.116.1:8100;
33.     server 172.16.116.1:8200;
34.   }
35.   
36.   server {
37.     listen       80;
38.         server_name  172.16.116.100;
39.     location / {
40.       proxy_pass http://distributed;
41.     }
42.   }
43.   
44. }

在浏览器中测试:172.16.116.100是我的nginx服务器地址

经过测试,通过nginx访问服务一切正常。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
关系型数据库 MySQL 分布式数据库
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
459 2
|
5月前
|
NoSQL 关系型数据库 MySQL
分布式锁(redis/mysql)
分布式锁(redis/mysql)
130 1
|
2月前
|
缓存 NoSQL 关系型数据库
(八)漫谈分布式之缓存篇:唠唠老生常谈的MySQL与Redis数据一致性问题!
本文来聊一个跟实际工作挂钩的老生常谈的问题:分布式系统中的缓存一致性。
117 10
|
3月前
|
SQL 负载均衡 关系型数据库
分布式篇问题之MySQL数据库主从复制问题如何解决
分布式篇问题之MySQL数据库主从复制问题如何解决
|
4月前
|
SQL 关系型数据库 MySQL
MySQL高可用架构设计:从主从复制到分布式集群
MySQL高可用性涉及主从复制、半同步复制和Group/InnoDB Cluster。主从复制通过二进制日志同步数据,保证故障时可切换。半同步复制确保事务在至少一个从服务器确认后才提交。Group Replication是多主复制,支持自动故障切换。InnoDB Cluster是8.0的集成解决方案,简化集群管理。使用这些技术能提升数据库的稳定性和可靠性。
348 2
|
4月前
|
关系型数据库 MySQL 数据库
深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作
深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作
|
5月前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
250 0
|
5月前
|
SQL 关系型数据库 MySQL
Flink CDC产品常见问题之读分布式mysql报连接超时如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
5月前
|
设计模式 Java 关系型数据库
BAT等大厂年薪30W+面试清单:JVM\MySQL\设计模式\分布式\微服务
疫情影响下招聘名额缩减不少,但阿里、腾讯、抖音、快手等互联网公司却加快了人才招聘的节奏。这里根据自身的实际经历,整理了一份面试这些大厂的清单,希望能帮助到大家查漏补缺,攻克面试难关。
|
18天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。

热门文章

最新文章

下一篇
无影云桌面