【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分发给只读实例. 用户可以设置代价阈值.
  • 不依赖外部产品
相关文章
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课13 单机版转换为集群版
本文介绍如何将“本地存储实例”转换为“共享存储实例”,依赖于先前搭建的实验环境。主要步骤包括:准备PFS二进制文件、格式化共享盘为pfs文件系统、启动pfsd服务、停库并拷贝数据到pfs内、修改配置文件,最后启动实例。通过这些操作,成功实现了从本地存储到共享存储的转换,并验证了新实例的功能。相关系列文章和视频链接提供了更多背景信息和技术细节。
447 0
|
边缘计算 Cloud Native 物联网
专访丨阿里云郝冲:数字孪生为边缘计算带来效率革命
近年来,随着5G、物联网的发展和普及,边缘云计算得到越来越多的关注,边缘云与中心云协同赋能成为大势所趋。阿里云边缘云团队一直以来致力于打造全球最具竞争力的边缘计算服务,取得了一系列令人瞩目的成就和突破。围绕阿里云边缘计算的应用实践、边缘节点ENS等相关话题,阿里云边缘云资深专家郝冲接受了全球分布式云联盟的采访。
2287 0
专访丨阿里云郝冲:数字孪生为边缘计算带来效率革命
关于@NotNull 注解中groups 的使用
关于@NotNull 注解中groups 的使用
1771 0
关于@NotNull 注解中groups 的使用
|
关系型数据库 PostgreSQL
解决Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
解决Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
4180 0
|
7月前
|
Java 编译器 C++
google protobuf3中文手册
本文介绍 Protocol Buffers proto3 语言的使用规范,涵盖 `.proto` 文件语法、消息与字段定义、枚举、映射、服务接口及代码生成等内容,指导开发者正确设计和更新数据结构,确保跨语言兼容性与二进制安全。
|
3月前
|
存储 Kubernetes 关系型数据库
k8s 安装posgresql
本指南介绍如何在K8s集群中快速部署PostgreSQL官方镜像(v18.3),配合local-path-provisioner提供本地持久化存储。含命名空间、PVC、Deployment与Service完整YAML,支持国产镜像加速,兼顾14–18版本路径兼容性,适用于开发与测试环境。(239字)
|
4月前
|
存储 JSON 关系型数据库
MySQL 全面介绍 ,现在企业都用mysql哪个版本?
MySQL是开源高性能关系型数据库,广泛用于Web与企业应用。历经MySQL AB、Sun至Oracle发展,现主流版本为MySQL 8.0——具备窗口函数、CTE、增强JSON支持、角色权限管理及显著性能优化,兼具安全性、可扩展性与活跃社区支持。
499 1
|
关系型数据库 分布式数据库 PolarDB
PolarDB开源数据库进阶课9 读写分离
本文介绍了如何配置读写分离工具pgpool-II for PolarDB,使应用程序能够透明地实现读写分离。
582 1
|
人工智能 搜索推荐 区块链
元宇宙:虚拟现实的新纪元
在科技飞速发展的今天,元宇宙(Metaverse)正从科幻走向现实,成为连接物理与数字世界的桥梁。本文将探讨元宇宙的定义、关键技术、现有形态及未来展望,带您领略这一虚拟空间的无限可能。元宇宙利用VR、AR、区块链等技术,构建了一个沉浸式的虚拟世界,用户可通过数字化身自由探索、社交、娱乐、学习和工作。尽管仍处初级阶段,但虚拟会议、数字艺术、游戏娱乐等领域已初现端倪。未来,元宇宙有望成为第二人生、数字商务、创新教育和远程协作的重要平台,同时也面临数据安全、隐私保护等挑战。
1379 1