微服务优化日记
自建商城在设计之初,业务部门就提出了两个要求: 不崩 & 快速上线。 在立项之后,团队还没有完全配备好,一边从其他团队里调取人手,一边大力招聘,与此同时,我们的架构师也在搭建一套分布式商城开发框架,编写 Demo,让新加入的同学能快速上手。 暴露问题 问题一: 分布式事务 为什么会使用分布式事务? 这个暂且可以归因于快速上线,因为生成订单会调用到商品服务扣减库存,使用了分布式事务解决了因为跨服务调用引起库存超卖的问题,带来的问题就是性能上的消耗。 问题二: 数据库压力 在大促活动期间,有个实时统计是直接从业务库上直接查询统计的,运营部门的小姐姐在不断地刷新,导致该接口上的压力山大,而且没有使用缓存,连 SQL 查询条件的时间都是动态的,导致 DB 层的缓存也使用不上,每次请求都打到 DB 上。 开发和测试环境是使用自建的 MySQL,生产环境使用的是 PolarDB,从阿里云官网上看到: 集群架构,计算与存储分离 读写分离 我们主观地认为,只要我们使用了集群连接地址就会自动进行读写分离,但是实际上并没有,后来发现在方法上显式的指定只读事务就有请求走到只读节点上了。 @Transactional(readOnly = true) # 优化思路: 1)从 SQL 洞察和慢 SQL 里找调用响应时间最长和频度最高的 SQL; 2)结合代码,能用缓存代替的直接处理掉,不用能缓存的优化查询