• 浅谈分布式、伪分布式与集中式之选

浅谈分布式、伪分布式与集中式之选

2025-06-13 10:00:03 栏目:宝塔面板 109 阅读

近期跟多家用户交流,发现用户在选型数据库时正有了一些新的变化,这也是近些年通过不断实践,用户总结的最佳实践方法。例如,有的用户不盲目追求分布式,而是通过业务单元化后,底层通过集中式数据库解决;有的用户选择分布式数据库,但在应用上通常是按照“单机”模式去使用,即不做数据分片;有的用户利用分布式数据库提供的租户特性,做单机数据库的整合;也有的用户回归“传统”的集中式共享存储架构来解决问题。上面谈到的租户及单机模式的使用方法,可以说是一种“伪分布式”。那么在面临这些“新架构、新用法”,用户又该如何选择呢?本文选择了分布式和集中式的多种主流用法,尝试从多种角度来对比分析下。

1. 多角度对比数据库主流用法

1).谈谈“伪分布式”

在正式对比之前,这里先谈下伪分布式的两种用法。第一种“单机”模式,其实是一种对分布式的妥协,放弃了分布式能力,选择单机式的使用方法。这种通常发生在用户已经选择使用分布式数据库,但其更多业务是不需要采用分布式使用方式,但选择另一款集中式数据库又需要引入新的技术栈,因而采用这种方式。这种方式优点在于一方面简化统一技术栈、第二则利用平台能力(如高可用、易管理等)做到比直接使用单机库更好的效果。这种方式多见于分库分表类型的分布式数据库,因其底层是依托于独立的单机数据库引擎构建,因而相对容易。另一种方式“租户”模式,则多见于资源整合类需求,用户将原来直接使用大量单机数据库,转而通过分布式数据库提供的租户来承载。其业务可采用分片、也可采用单机。这种方式优点在于同样一方面可以简化统一技术栈,第二则更多是为了更好的利用资源,通过租户的形式来整合底层资源。当然上述两种能力,也存在一定的弊端,主要表现在资源有效利用率(分布式架构多少存在一些冗余)、管理灵活性(统一方式管理所带来的)、可靠性(集群内的单点故障蔓延)、可用性(受限于平台整体可用性)、扩展性(是否能做到真正的一体化)等等。

2).多角度架构对比

下文将从多角度对比各种数据库主流架构。这其中选择原生分布式、分库分表类型的分布式,默认这两者都采用数据分片的通常用法;另外选择分布式的两种新用法,租户模式和单机模式。集中式方面,选择了典型的三种架构,共享存储模式(类似Oracle RAC)、主备模式(类似Oracle DG)和单机模式。

1.png

架构层面

在架构层面,分布式在扩展性天然具备一定优势,当然针对绝大多数企业及场景来看,集中式共享模式提供的Scale Up能力,已经是可以满足的了。之前国内这种方案较少,大多还是主备,近两年部分厂商开始发力。在可用性、可靠性、容灾等方面,分布式具备的计算层无状态、存储层多副本架构等技术特点,成为可靠的保障。从我的观察来看,很多国内用户选择分布式数据库,很多往往不是因为计算、存储的规模问题,而是考虑了可用性问题。出于对国产数据库的各种不放心,天然会考虑通过分布式能解决一定问题。这有一定道理,但是这其实也是一柄双刃剑,分布式架构的复杂度也带来对可用性的挑战。其实经典的 IOE 架构,是之前企业的普遍选择,大部分核心业务系统是构建于此,只不过国产数据库此类架构发展较晚,大家还处于观望状态。

性能层面

在性能层面,分布式同样具备一定的优势,可通过水平扩展计算节点来解决高并发、高吞吐的问题。这一点集中式之前方案不多,虽然单节点的处理能力已经达到上百万的TPMC,但是在极端场景下还是有所欠缺。共享存储的架构是另一种思路,可在一定程度上解决传统集中式架构的性能短板。之前有一点容易被忽略的是关于时延问题,分布式架构在这点上往往表现不佳,这主要是因为其层次多、路径长所导致的,这一点集中式架构是有一定优势的。

一致性层面

在一致性方面分两点,一是数据一致性,即多个数据副本是否保障的实时一致性;一是读写一致性,可理解为读取的是否为最新版本的数据。这方面主要是数据副本的复制机制、复制粒度有关,强一致会带来不错的一致性表现,但对性能的影响也是巨大的。其实最好的一致性是数据不复制,对单一副本进行读写,集中式的共享存储模式就是这种,严格意义来讲也不是数据不复制,只不过数据副本的构建是在更低层次(存储)上解决了。

应用适配性

在应用适配难度上,分布式的劣势就很明显了,其在架构设计、语句开发等方面不可避免地需要考虑分布式的特点。当然很多分布式厂商也都在解决这一问题,希望通过类似“透明分布式”的做法来屏蔽这一难点。但目前看来只能说在一定程度上可以解决,尚无法达到同集中式同等的设计、开发适配能力,毕竟过去几十年来研发人员已经习惯在集中式数据库上的设计开发了。此外,针对库内计算的问题则差异更大,这也是大家这些年都纷纷采用降低数据库计算要求,这其实也是无奈之举,但同时其背后的压力与成本付出则是更多人看不到的。

资源利用

在资源利用方面,分布式所需组件多、资源消耗大,是很多人所诟病的,这是其架构决定的。约一体化的架构对资源的使用效率越高,这一点集中式有一定优势。在隔离性方面,同样如此,较为清晰的资源调用路径有利于提升隔离性,避免因资源消耗过大导致的异常蔓延问题。

综合成本

最后的成本问题则来自多个方面,这包括了硬件、软件采购及与之相配套的开发测试与运营维护成本。这一点分布式具有的新架构、节点组件多、资源需求多、开发适配投入大、管理维护复杂等问题是存在的,这也在一定程度造成分布式推广难点,因而可见近年来很多分布式企业提供的单机一体化能力,就是为了在一定程度上减低部分成本。很多用户可能会有感觉,上了分布式后,比之前集中式的 IOE 架构还要贵,这点也为国产集中式架构产品带来一定启发,做出更具性价比的产品。

2. 典型业务场景分析

上面谈到了数据库主流用法,那么用户又该如何去选呢?一方面可以参考表格内容做好自有业务分析,一方面也可以参考行业一些通用做法。这里引用来自白鳝老师近期发表的一篇文章,其中对主流业务场景做了抽象。这里将下面场景逐一分析,看用什么架构适配会更为合适。

1).典型业务场景回顾

2.png

2).可适配的最佳架构

下面从不同架构特点及场景需求出发,做两两匹配,看何种架构会更为合适些。

3.png

本文地址:https://www.yitenyun.com/286.html

搜索文章

Tags

数据库 API FastAPI Calcite 电商系统 MySQL Web 应用 异步数据库 数据同步 ACK 双主架构 循环复制 TIME_WAIT 运维 负载均衡 JumpServer SSL 堡垒机 跳板机 HTTPS 服务器 管理口 HexHub Docker 服务器性能 JumpServer安装 堡垒机安装 Linux安装JumpServer Deepseek 宝塔面板 Linux宝塔 生命周期 esxi esxi6 root密码不对 无法登录 web无法登录 SQL 查询 序列 核心机制 Windows Windows server net3.5 .NET 安装出错 HTTPS加密 Windows宝塔 Mysql重置密码 锁机制 开源 PostgreSQL 存储引擎 查看硬件 Linux查看硬件 Linux查看CPU Linux查看内存 宝塔面板打不开 宝塔面板无法访问 行业 趋势 Oracle 处理机制 无法访问宝塔面板 Undo Log 机制 优化 万能公式 监控 连接控制 InnoDB 数据库锁 Spring 动态查询 机器学习 Redis 异步化 响应模型 Serverless 无服务器 语言 ES 协同 group by 索引 openHalo 技术 scp Linux的scp怎么用 scp上传 scp下载 scp命令 分页查询 Postgres OTel Iceberg 缓存方案 缓存架构 缓存穿透 工具 高可用 存储 GreatSQL 连接数 数据 主库 SVM Embedding R edis 线程 日志文件 MIXED 3 国产数据库 Linux 安全 R2DBC Netstat Linux 服务器 端口 SQLite-Web SQLite 数据库管理工具 加密 场景 启动故障 ​Redis 推荐模型 Recursive 防火墙 黑客 云原生 自定义序列化 RocketMQ 长轮询 配置 SQLark OB 单机版 向量数据库 大模型 共享锁 AI 助手 Hash 字段 PG DBA 不宕机 Rsync 信息化 智能运维 Ftp 磁盘架构 电商 系统 架构 Python 向量库 Milvus 业务 Canal 数据分类 修改DNS Centos7如何修改DNS IT运维 redo log 重做日志 流量 分库 分表 频繁 Codis • 索引 • 数据库 传统数据库 向量化 线上 库存 预扣 filelock MVCC 语句 同城 双活 MySQL 9.3 PostGIS 人工智能 推荐系统 MongoDB MCP 开放协议 聚簇 非聚簇 sftp 服务器 参数 mini-redis INCR指令 Doris SeaTunnel 缓存 Redisson 锁芯 高效统计 今天这篇文章就跟大家 失效 工具链 事务 Java 开发 INSERT COMPACT prometheus Alert 主从复制 代理 数据备份 千万级 大表 数据类型 虚拟服务器 虚拟机 内存 ZODB SSH 分布式架构 分布式锁​ 窗口 函数 聚簇索引 非聚簇索引 数据结构 发件箱模式 EasyExcel MySQL8 容器 崖山 新版本 网络架构 网络配置 引擎 性能 Web QPS 高并发 数据脱敏 加密算法 RDB AOF Redis 8.0 分页 速度 服务器中毒 Go 数据库迁移 B+Tree ID 字段 分布式 集中式 核心架构 订阅机制 Web 接口 数据集成工具 自动重启 OAuth2 Token 读写 Redka 网络故障 容器化 播客 模型 数据页 MGR 分布式集群 StarRocks 数据仓库 微软 SQL Server AI功能 DBMS 管理系统 JOIN 排行榜 排序 池化技术 连接池 SpringAI Caffeine CP 原子性 Entity 网络 部署 业务场景 事务隔离 Valkey Valkey8.0 LRU Testcloud 云端自动化 Pottery 数据字典 兼容性 dbt 数据转换工具 分页方案 排版 ReadView 优化器 事务同步 sqlmock 1 悲观锁 乐观锁 意向锁 记录锁 关系数据库 AIOPS 单线程 UUIDv7 主键 仪表盘 日志 Weaviate 对象 单点故障 InfluxDB Order UUID ID 编程 Pump Crash 代码 RAG HelixDB Ansible IT 双引擎 分布式锁 Zookeeper 产业链 订单 字典 恢复数据 LLM List 类型 线程安全 国产 用户 慢SQL优化 表空间 拦截器 动态代理 解锁 调优 Next-Key RR 互联网 快照读 当前读 视图 GitHub Git count(*) count(主键) 行数 神经系统 矢量存储 数据库类型 AI代理 查询规划 算法 CAS 技巧 多线程 并发控制 恢复机制 闪回