当Mysql数据库数据达到一定量后,微服务架问题查询SQL执行会变慢起来,构下除了建索引、利用优化程序代码以及SQL语句等常规手段外,解决利用经典MHA数据库中间件做数据库读写分离是读写一个不错的选择。但是分离在读写分离架构中会出现一个共性问题:SQL读取延迟。 比如在微服务应用端新增一条业务数据,查询然后立即读取,延迟这个时候会遇到读取不到情况! 为什么呢?微服务架问题 来源网络 因为在读写分离架构中,主节点负责写入数据,构下同时mysql利用多线程技术把数据同步到从节点,亿华云利用从节点负责应用端读取请求。解决 而Mysql主从数据同步数据存在同步时间差,读写带来的分离问题是从节点同步不到主节点(Master)数据,应用端从从节点(Slave)读取不到新增的查询数据情况。 利用官方HintManager 分片键值管理器, 强制路由到主库查询 通过调用hintManager.setMasterRouteOnly() 强制路由到主库查询,伪代码如下: 通过强制路由到主库查询有个风险,对于更新并实时查询业务场景比较多,如果都切到主库查询,势必会对主库服务器性能造成影响,高防服务器可能还影响主从数据同步,所以要根据实际业务场景评估采用这种方式带来的服务器性能问题。 另外,如果业务层面可以做妥协的话,尽量减少这种更新并实时查询方式,一种思路是实时更新库,利用线程异步查询(例如更新后,睡眠1-2秒再查询),伪代码如下: 前言
读写实时场景
解决方案