🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
【作者】
许金柱,携程资深DBA,专注于分布式数据库研究及运维。
台枫,携程高级DBA,主要负责MySQL和OceanBase的运维。
【前言】
读写分离,是一种将数据库的查询操作和写入操作分离的方案,目的是为了降低读写操作的相互影响并提升资源利用率。在携程,读写分离的应用场景非常普及,只读的业务场景主要包括线上业务的读请求、缓存的拉取,大数据ETL取数等。
OceanBase 数据库天然支持读写分离的功能,即通过 OBProxy 代理服务和OBServer的配置修改即可实现业务的读写分离策略;然而OceanBase 读写分离方案存在与业务耦合度过高、匹配不够灵活等问题。因此,我们在 OceanBase已有的读写分离方案下继续探索并优化更符合当前业务场景的解决方案。
一、OceanBase原生的读写分离策略
OceanBase数据库在读取数据时,提供了两种一致性级别:强一致性和弱一致性。
强一致性指的是读取最新数据,请求路由给主副本;
弱一致性不要求读取最新数据,请求优先路由给备副本。
基于此,通过应用侧为执行的sql添加sql hint来显性开启弱一致性读就可以实现基于注释的读写分离,同时也衍生出了如下三种常用的读写分离策略:
策略一、备优先读
通过修改obproxy的路由策略为follower_first,并将业务读流量指定到该obproxy从而保证读请求优先访问follower副本。