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 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算