技术栈
springcloud 微服务
ribbon 负载均衡
hystrix 断路器
zuul 网关
eureka 服务发现
mybatis 数据层
feign 服务通信
config 配置中心
碰到的问题
- 数据库数据超过百万
用了Spring Cloud技术栈来构建微服务架构的系统,平时正常QA测试没发现什么大毛病,感觉性能还不错,一切都很完美。
然后系统就这么上线了,一开始用户规模很小,注册用户量小几十万,日活几千用户。
每天都有新的数据进入数据库的表中,就这么日积月累的,没想到数据规模居然慢慢吞吞增长到了单表几百万。
这个时候呢,看起来也没太大的毛病,就是有用户反映,系统有些操作,会感觉卡顿几秒钟,会刷不出来页面。
分析原因:
- 核心表数据量太大,有几百万数据量。
- 部分服务的sql复杂,很多关联查询。
- 数据库索引未管理好,SQL没有审核,导致几百行的sql。
- 代码未优化,一个方法几百行代码,嵌套循环一堆堆的。
当时的解决方案
Feign + Ribbon组成的服务调用框架,是有接口调用超时这一说的,有一些参数可以设置接口调用的超时时间。如果你调用一个接口,好几秒刷不出来,人家就超时异常返回,用户就刷不出来页面了。
ribbon: