VitoYi 2019-11-26 14:55 采纳率: 100%
浏览 469
已采纳

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

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


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


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


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


图片说明

  • 写回答

3条回答 默认 最新

  • 神隐的小蝴蝶 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层倾向于按服务/逻辑的请求路由会更利于后期维护

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 maccms影视模板 制作影视网站失败 求
  • ¥15 stm32按键设置闹钟数进退位不正常
  • ¥15 三电平逆变器中点电位平衡问题
  • ¥20 这怎么写啊 java课设
  • ¥15 用C语言完成一个复杂的游戏
  • ¥15 如何批量更改很多个文件夹里的文件名中包含文件夹名?
  • ¥50 MTK手机模拟HID鼠标出现卡顿
  • ¥20 求下下面这个数据结构代码
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来