【DB吐槽大会】第42期 - PG 读写分离不友好

简介: 大家好,这里是DB吐槽大会,第42期 - PG 读写分离不友好

背景


1、产品的问题点

  • PostgreSQL 读写分离非常不友好, 没有内置的对业务完全透明的读写分离功能.

2、问题点背后涉及的技术原理

  • 为什么要读写分离?
  • 读请求占比较高, 并且单个实例无法支撑业务的请求吞吐时, 通过增加只读实例, 将读请求分流到只读实例以满足业务需求.
  • 什么是业务透明的读写分离?
  • 应用发起SQL, 数据库根据SQL是否会对数据库产生写操作自动分发到主库或只读库.

3、这个问题将影响哪些行业以及业务场景

  • 读占比和吞吐较大的业务
  • 读请求相对来说比较复杂, 需要耗费较大IO和CPU计算, 怕影响主实例(RW实例)的业务

4、会导致什么问题?

  • 没有读写分离功能, 业务必须连接多个数据源, 在代码中自己判断, 将读、写请求发送到不同的数据源. 增加了程序设计复杂度.
  • 而且只读和读写节点可能发生角色切换, 代码里面不仅要判断SQL是否要路由到RO, 还要判断当前数据源到底是RO还是RW角色.

5、业务上应该如何避免这个坑

  • 使用 pgpool-II 中间件

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题

  • 通过pgpool-II连接数据库, 性能存在巨大的损耗
  • 多一跳延迟增加、
  • pgpool-II自身的损耗
  • 高并发小事务损耗50%以上 (tpc-b测试样例)
  • 功能不完备, 例如:
  • 函数内的query不能再路由
  • 自定义函数需要配置黑白名单, 否则统一路由到rw节点. (函数白名单、黑名单需要手工维护)
  • 增加了1个组件增加了1份故障点
  • 增加了配置复杂度, 例如
  • 心跳检测配置
  • 从库与主库延迟多少后自动踢出只读实例列表
  • 恢复后是否自动加入只读实例列表
  • 连接池个数, 空闲自动释放时间, 生命周期等

7、数据库未来产品迭代如何修复这个坑

  • 希望内核层面支持对业务透明的自动读写分离
  • 不管是rw还是ro节点, 平等对待所有连接. 应用可以使用驱动来load balance连接
  • 从库与主库延迟自动踢出只读实例列表, 恢复后是否自动加入只读实例列表
  • 解析SQL, 生成执行计划, 自动路由plan execute
  • 根据SQL的代价来决定是否要将sql分发给只读实例. 用户可以设置代价阈值.
  • 不依赖外部产品
相关文章
|
编解码 人工智能 定位技术
哥白尼数字高程模型(Copernicus DEM)30/90m数据集
哥白尼数字高程模型(Copernicus DEM)30/90m数据集
776 0
关于@NotNull 注解中groups 的使用
关于@NotNull 注解中groups 的使用
1640 0
关于@NotNull 注解中groups 的使用
|
SQL 缓存 监控
SpringBoot整合阿里巴巴Druid数据源
Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。 Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。 本文主要讲解如何整合Druid数据源及Druid常用配置项和详解
6004 1
SpringBoot整合阿里巴巴Druid数据源
|
7月前
|
存储 Kubernetes Serverless
容器技术 20 年:颠覆、重构与重塑软件世界的力量
从 20 世纪硬件虚拟化的笨重,到操作系统虚拟化的轻量探索,容器技术历经蜕变。2013 年 Docker 横空出世,以 “一次构建,到处运行” 的创举打破环境壁垒,开启容器黄金时代。随后,Docker Compose、Kubernetes、Istio 等技术相继涌现,从多容器管理到集群编排,再到微服务治理,不断突破应用部署与运维的边界。如今,容器与 DevOps 深度融合,Serverless 架构异军突起,共同重塑软件开发生态。本文将带你穿越容器技术发展的关键节点,揭秘其如何以颠覆性力量推动云计算与数字化。
531 64
|
SQL 关系型数据库 分布式数据库
Citus 简介,将 Postgres 转换为分布式数据库
【10月更文挑战第4天】Citus 简介,将 Postgres 转换为分布式数据库
446 4
|
物联网 Linux 5G
Linux操作系统的演变与未来趋势####
本文深入探讨了Linux操作系统的发展历程,从最初的一个学生项目到如今全球最流行的开源操作系统之一。文章将分析Linux的核心优势、关键特性以及它在云计算、物联网和嵌入式系统中的应用前景。通过具体案例展示Linux如何推动技术创新,并预测其在未来技术生态中的角色。本文旨在为读者提供一个全面而深入的理解,帮助他们认识到Linux在现代计算环境中的重要性及其未来的潜力。 ####
|
JavaScript 前端开发 算法
|
数据可视化 物联网 Swift
谷歌开源Gemma2!魔搭社区推理、微调最佳实践教程
Google面向全球研究人员和开发者发布并开源 Gemma 2 大语言模型!本次Gemma 2 系列为轻量级开放模型,提供9B和27B参数两种尺寸,采用全新的架构设计,性能表现优异。
|
负载均衡 关系型数据库 PostgreSQL
【一文搞懂PGSQL】6. PostgreSQL + pgpool-II 实现读写分离
本文介绍了如何使用 PostgreSQL 和 pgpool-II 实现读写分离。pgpool-II 支持连接池、负载均衡等功能,适用于多种模式。文中详细描述了安装、配置及启动过程,并提供了示例命令,帮助读者快速搭建并验证读写分离环境。通过配置 `pgpool.conf` 文件指定监听地址、端口及节点信息等参数,确保系统的高效运行与故障转移。
|
安全 Linux 开发者
分析Linux桌面操作系统的迅速增长及其未来前景
最近技术圈新闻“层出不穷”,尤其是在最近,Linux桌面操作系统的市场份额迅速增长,Linux桌面操作系统的市场份额近期呈现火速增长的趋势,这一数据虽然看似不太引人注目,但实际上却具有重要的意义,达到了历史新高。了解Linux的开发者想必都知道,历经30年的努力,Linux系统的份额才在不久前达到了3%,而如今仅用了八个月的时间就新增了1%,显示出开源操作系统正迅速升温。尽管Windows和macOS仍然主导着桌面操作系统市场,但前者的份额波动较小,后者则略有下滑。虽然Linux的表现出色,但要想取得主导地位还有一段距离,有些开发者认为这是因为缺乏一个适用于所有Linux发行版的标准化桌面界面
353 1
分析Linux桌面操作系统的迅速增长及其未来前景