传统数据处理系统存在的问题

传统应用的数据系统架构设计时,应用直接访问数据库系统。当用户访问量增加时,数据库无法支撑日益增长的用户请求的负载,从而导致数据库服务器无法及时响应用户请求,出现超时的错误。

出现这种情况以后,在系统架构上就采用如图1的架构,在Web服务器和数据库中间加入一层异步处理的队列,缓解数据库的读写压力。

图1 在服务器和数据库中增加异步队列缓冲隔离

当Web服务器收到页面请求时,会将消息添加到队列中。在数据库端,创建一个工作处理层定期从队列中取出消息进行处理,例如每次读取100条消息。这相当于在两者之间建立了一个缓冲。

但是,这一方案并没有从本质上解决数据库过载(Overload)的问题,且当工作处理层无法跟上业务对于数据修改的请求时,就需要增加多个工作处理层并发执行,数据库又将再次成为响应请求的瓶颈。一个解决办法是对数据库进行分区(Horizontal Partitioning)。分区的方式通常以Hash值作为key。这样就需要应用程序端知道如何去寻找每个key所在的分区。

但即便如此,问题仍然会随着用户请求的增加接踵而来。当之前的分区无法满足负载时,就需要增加更多分区,这是就需要对数据库进行reshard。resharding的工作非常耗时而痛苦,因为需要协调很多工作,例如数据的迁移、更新客户端访问的分区地址,更新应用程序代码。如果系统本身还提供了在线访问服务,对运维的要求就更高。这种情况下,就可能导致数据写到错误的分区,因此必须要编写脚本来自动完成,且需要充分的测试。

由此可见,在数据层和应用中增加了缓冲隔离,数据量的日渐增多仍然迫使传统数据仓库的开发者一次又一次挖掘系统,试图在各个方面寻找一点可提升的性能。架构变得越来越复杂,增加了队列、分区、复制、重分区脚本(Resharding Scripts)。应用程序还需要了解数据库的schema,并能访问到正确的分区。问题在于:数据库对于分区是不了解的,无法帮助你应对分区、复制与分布式查询。

相关推荐
数据库小学妹2 小时前
国产数据库怎么选?兼容、迁移、核心案例与融合架构四道关
数据库·架构·国产数据库·数据库迁移·融合数据库
draracle2 小时前
为什么 AI 无法胜任系统架构
人工智能·系统架构
IvorySQL2 小时前
PostgreSQL 日报| PgBouncer 修复三个 CVE 漏洞(10 月 15 日)
数据库·postgresql·区块链
饺子大魔王的男人2 小时前
后台表格、查询、流程总在重复写?我用ToolJet把PostgreSQL直接做成可远程访问的业务系统
数据库·postgresql
Gauss松鼠会3 小时前
高斯数据库(openGauss)的物理存储结构
运维·服务器·数据库·sql·opengauss·经验总结
杨云龙UP3 小时前
PostgreSQL 18.4 数据库整库迁移实战:pg_dump 备份与 pg_restore 恢复完整操作手册
运维·服务器·数据库·postgresql·pg_dump·pg_restore
我科绝伦(Huanhuan Zhou)3 小时前
Linux 通用压力测试脚本合集:磁盘 + 网络
linux·网络·压力测试
AOI小白新手上路4 小时前
autodl常用的tar 打包下载(数据集)命令手册:逐段拆解与套用模板
java·大数据·数据库
聚美智数4 小时前
网站HTTP状态查询-SEO优化
网络·网络协议·http