服务读写分离(读服务,写服务),是否可行?

简介: 系统分层架构有一个迭代和演进的过程(详见《互联网分层架构设计》)

系统分层架构有一个迭代和演进的过程(详见《互联网分层架构设计》),早期,系统分层架构如下:

image.png

  • 上游是需要数据的业务调用方
  • 下游是存储数据的数据库

随着架构的演进,可能要抽取出服务层(详见《互联网架构为什么要做服务化?》):

image.png

  • 上游通过RPC调用服务获取数据
  • 中间服务层从数据库获取数据
  • 下游是存储数据的数据库

大家都知道,数据库可以读写分离,为了职责更清新,架构设计上,服务能否读写分离呢?

image.png

如上图,服务化读写分离之后:

  • 业务方通过RPC分别调用读服务和写服务
  • 服务层分为读服务与写服务
  • 底层是高可用的数据库集群

当然,也有可能读服务与写服务读写的是不同的数据库,如上图:

  • 写服务访问写库
  • 读服务访问读库
  • 写库与读库是一个主从同步的集群。

那么,问题来了:

  • 你遇到过这种架构设计么?
  • 这种架构设计好还是不好,为什么?
  • 如果服务读写分离设计好,上面两种方案哪种好?

欢迎讨论,将从评论中精选出三条有独特见解的留言,发放58元精美计算机图书兑换券。

也欢迎转发,大家一起讨论。

目录
相关文章
|
8月前
|
canal 缓存 NoSQL
面试官,如何保证缓存与数据库的数据一致性
面试官,如何保证缓存与数据库的数据一致性
|
1月前
|
监控 NoSQL Redis
RedisShake如何处理数据同步过程中的冲突和一致性问题
RedisShake保障数据同步一致性,支持全量和增量同步,处理并发冲突(利用乐观锁机制),并进行数据校验。遇到故障能自动恢复和重试,保证不间断同步。同时,提供监控和日志功能,便于识别和解决问题,确保数据完整性。
23 0
|
3月前
|
SQL 安全 算法
在高并发情况下,如何做到安全的修改同一行数据?
在高并发情况下,如何做到安全的修改同一行数据?
|
4月前
|
数据库 开发工具 Python
请解释一下云数据库的读写一致性和事务支持。
请解释一下云数据库的读写一致性和事务支持。
28 0
|
4月前
|
消息中间件 Java 数据库
面试题:如何保证三个数据库之间的数据一致性,如服务突然宕机
面试题:如何保证三个数据库之间的数据一致性,如服务突然宕机
34 0
|
7月前
|
SQL 关系型数据库 MySQL
这篇MySQL主从复制与分库分表读取分离稳了!
这篇MySQL主从复制与分库分表读取分离稳了!
102 0
|
9月前
|
SQL 关系型数据库 MySQL
分库分表会带来读扩散问题?怎么解决?
分库分表会带来读扩散问题?怎么解决?
137 0
|
9月前
|
缓存 NoSQL 应用服务中间件
高并发场景下的redis缓存和数据库双写不一致问题分析与解决方案设计
高并发场景下的redis缓存和数据库双写不一致问题分析与解决方案设计
|
11月前
|
消息中间件 canal 缓存
缓存数据一致性探究
缓存是一种较低成本提升系统性能的方式,自它面世第一天起就备受广大开发者的喜爱。然而正如《人月神话》中的那句经典的“没有银弹”中所说,软件工程的设计没有银弹。 就像每一次发布上线修复问题的同时,也极易引入新的问题,自缓存诞生的第一天起,缓存与数据库的数据一致性问题就深深困扰着开发者们。 关键词:原子性、事务性、数据一致性、双写一致性
6499 1
缓存数据一致性探究
|
SQL 存储 容灾
关于主从延迟,一篇文章给你讲明白了!
在实际的生产环境中,由单台MySQL作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面 因此,一般来说都是通过集群主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力进行部署与实施总结MySQL主从集群带来的作用是:提高数据库负载能力,主库执行读写任务(增删改),备库仅做查询。提高系统读写性能、可扩展性和高可用性。数据备份与容灾,备库在异地,主库不存在了,备库可以立即接管,无须恢复时间。用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。可以简单理解为记录的就是sq