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

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

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

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

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

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

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

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

相关推荐
会飞的土拨鼠呀9 小时前
通过Linux进程id找到程序路径
linux·服务器·网络
一个天蝎座 白勺 程序猿9 小时前
Apache IoTDB(10):数据库操作——从查询到优化的全链路实践指南
数据库·apache·时序数据库·iotdb
GIS数据转换器9 小时前
GIS+大模型助力安全风险精细化管理
大数据·网络·人工智能·安全·无人机
让学习成为一种生活方式10 小时前
植物中验证蛋白相互作用的Pull-down和Co-IP技术--文献精读181
网络·网络协议·tcp/ip
普普通通的南瓜10 小时前
IP证书在关键信息基础设施安全防护中的实践与挑战
网络·数据库·网络协议·tcp/ip·安全·ssl
合作小小程序员小小店10 小时前
桌面开发,超市管理系统开发,基于C#,winform,sql server数据库
开发语言·数据库·sql·microsoft·sqlserver·c#
quweiie10 小时前
thinkphp8.0链接SQL SERVER2022数据库
数据库·sqlserver·thinkphp
Databend11 小时前
如何打造AI时代的数据基石 | Databend Meetup 上海站
数据库
老华带你飞11 小时前
海产品销售系统|海鲜商城购物|基于SprinBoot+vue的海鲜商城系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·海鲜商城购物系统
合作小小程序员小小店11 小时前
桌面开发,在线%超市销售管理%系统,基于vs2022,c#,winform,sql server数据
开发语言·数据库·microsoft·c#