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

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


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


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


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


图片说明

3个回答

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

3
mysql 单表数据行10亿
2
CSstdiofile对文件频繁读写的优化方法 2
2
如何用AndroidStudio编写读写本地txt文件的小程序
1
javascript编写学生通讯录管理程序,怎么保存文件,要能够实现文件的读写的完整的思路
2
JAVA中不能直接读写磁盘,那么是怎么通过File将数据写入磁盘的?
2
Unity中单机游戏的数据存储方式用什么方式好?数据量很大,10万+
0
涉及到文件的读写的统计问题,怎么运用C程序的语言编程代码的方式去实现的程序的呢?
1
用pandas读写本地保存的html网页数据时,所有数据都在一列之中,怎么让他显示成表格的形式??谢谢
2
ReentrantReadWriteLock读写锁
1
MySQL使用多个连接实现同步读写的方式
2
android在不使用服务端的情况下怎样做到多个用户读写同一个数据。
1
android中服务端与客服端对json数据读写操作,谢谢!
2
网站集群高可用,文件怎么同步。
2
生物python文本读写多条链的反向互补序列
1
IIC 同时挂接AT24C08和MPU6050读写问题?
1
SDRAM的读写速度不一样
1
Java读写MySQL备份生成的文件返回给页面下载,页面下载到的是空文件,而MySQL备份的不是空文件
1
orcale 11g 每次开机都会进行大量硬盘读写 请问是什么原因
3
ReentrantReadWriteLock读写锁 锁降级时候明明读写互斥,为什么可以持有写锁的情况下也能获取读锁然后才释放写锁?
1
python 中怎么用相对路径写程序?请大神写一段读写文件的示例