单体秒杀服务转dubbo框架+分布式事务实现
计划和技术架构
计划:秒杀计划(
)+ 分布式事务解决方案 (为了让领取、扣减库存和订单状态一致性解决方案,见下图)
目标: dubbo 微服务化 实现订单领取分布式事务,对立提交和回滚
技术架构:
docker + nacos 架构 (舍去zookeeper,nacos更香)
docker 版本 2.7
springboot 版本 2.6.1
分布式事务(tcc -transaction 1.73)
github地址:https://github.com/luozijing/...
我的项目体验地址:http://81.69.254.72:9082/logi...
dubbo模块拆分
模块依据上图拆分成admin(web controller 和前端页面入口) + 订单 (秒杀订单+库存)+ 用户(领取、用户表)。
其中order和users模块都是分成两个子模块,api和provider模块,api负责提供dubbo的接口和实体类,providers负责提供api的实现,以及相干外部逻辑。
其中还有一个common的公共模块,提供公共工具类,包含redis连贯、zokeeper连贯等工具类等。
性能介绍
用户注册与登录
用户注册本人的手机号格局的账号id,明码至多为6位,并且该账号会初始化2000的虚构账户,用户后续的订单领取。
注册后能够登录,显示秒杀界面,进行抉择商品秒杀,每类秒杀商品不超过一个。
测试账户 15712341234/1234567
秒杀与领取
抉择商品进行秒杀后,能够查看生成的订单,订单会锁定秒杀的库存,但不会真正扣减库存。
进行虚构领取,之后会真正扣减库存,批改订单状态,缩小虚构账户金额,具体能够查看页面库存的变动
线上部署
服务器:tx云 2c4g轻量服务器,1200G流量,
操作系统用:零碎的自带的docker的CentOS7.6-Docker20
部署模块:
依据理论服务器配置,配置好java模块的内存大小,以及配置服务器swap内存,保障服务的稳固运行。nacos 配置了512M,dubbo 模块根本没有业务配置了128m,新生代都是一半。docker 一键化部署的配置在github中有,不过dubbo模块须要自行编译到服务器中启动。