VitoYi
VitoYi
2019-11-26 14:55
采纳率: 70%
浏览 356
已采纳

微服务下的读写分离有什么好的方式吗?

请教一下各位大佬,微服务下的读写分离有什么好的方式吗?


比较常见的方案是程序中配置多数据源,使用中间件或代码逻辑切换数据源。


有没有见过这种设计:没有配置多数据源,而是从服务层面就做了分离。
比如有一个订单服务 order, 把 order 拆成了 order-queryorder-update 两个服务,一个请求进来的时候,在网关根据 http 的请求方式做转发,**GET** 就转发到 query 服务,其他就转发到 update 服务。如果在 update 中也需要进行读操作,则是使用服务间调用的方式向 query 服务查询。


大概就是这样,**order** 的数据库做的是一主两从,把 order 服务需要查询的操作单独剥离出来,每个服务肯定都是要做高可用的嘛,于是就成了这个样子:


图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • m0_37954686
    神隐的小蝴蝶 2019-11-27 00:28
    已采纳

    假设服务访问路径是这样的:gateway -> server -> proxy -> (datasource_master, datasource_slave)。 要实现读写分离, 首先需要的是区分读写流量,这里就涉及到读写操作分离放在哪一层. 通常有几种选择:
    1. proxy层/中间件, 根据数据操作类型自动识别, 转发请求到主(update)或从(select/read), 如proxysql
    2. server层, 根据接口逻辑,具体接口具体分析,选择转发到对应的数据源, api过多时会难以维护
    3. gateway层, 基于协议信息分离(POST, GET),读写拆分粒度较大, 不利于准确分离读写流量(update操作通常会伴随着read, 比如所谓的写前读)。 gateway层倾向于按服务/逻辑的请求路由会更利于后期维护

    点赞 评论
  • weixin_42195284

    增加了查询速度,因为更新操作会加锁

    点赞 评论
  • caozhy

    读写分离用于读、写负载不平衡的场合,比如说一个小说网站,100个人看,99个人一句话不说看了就走。
    那么你可以增加很多只读数据库的服务器,提高性能。

    点赞 评论

相关推荐