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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)