3、这个项目我是根据一个开源的单体项目拆分成分布式项目,用的框架是SpringBoot + Dubbo(远程通信) + Zookeeper(注册中心)。 拆分依据是通过业务层的UserService,CouponService,OrderServcie, UserService, PayService, GoodService 差分成了不同的服务, 服务如下: User-Service Module, Coupon-Service Module, Order-Service Module, Pay-Service Module, Goods-Service Module, Api Module等模块。由于单体项目是在一个JVM中运行的所以我拆分成分布式之后,Synchronize或者ReentrantLock就失效,为什么失效呢,因为这些服务部署在不同的结点上,运行在不同的JVM中,所以用单体锁,不能够防止超卖。所以我做的第一个工作就是,使用了分布式锁。主要解决方案有(mysql, redis, zookeeper)。 由于部署在不同的几点。在单体项目中的事务不能作用于不同的结点。所以这部分工作我使用了分布式事务。主要解决方案如下(基于xa协议的2PC, 3TC, 基于可靠消息的最终一致性)。由于redis和mysql服务器部署在不同的结点上,由于网络问题或其他问题,导致redis和mysql数据不一致性。主要解决方案如下(延迟双删,设置过期时间,删除缓存重试机制,binlog异步删除缓存)。在并发比较高的时候,防止系统被冲击,采用了一些一系列的流量削峰策略(CDN, Nginx, RocketMQ, 和主流限流算法)。
点赞

相关推荐

牛客网
牛客企业服务