专栏首页阿Q说代码故事篇:数据库架构演变之路

故事篇:数据库架构演变之路

故事的开头总是这样,适逢其会、猝不及防。今天我哼着“也是黄昏的沙滩上,有着脚印两对半......”在海边散步,迎面走来了一位身穿黄金甲的男子,来海边还穿这么花哨,真是个傻X。定睛一看,这不是嘉文吗?

❝背景介绍:嘉文四世,德玛西亚皇子,是有名的高富帅。与盖伦、菊花信并称草丛三剑客,整天嚷嚷着“犯我德邦者,虽远必诛”。 ❞

「嘉文:」 我在老爸的支持下自己开了家银行,最近有一个问题一直困扰着我:不知道怎样才能使我的银行业务处理起来又快又稳呢?

「阿Q:」 内心OS:我靠,土豪就是土豪呀,都开银行了。(假装淡定)你现在的模式是怎样的呢?能不能简单说一下你模式的转变过程呢?

单机MySQL的美好年代

「嘉文:」 我首先把银行定在了一个极具发展潜力的城郊上。从目前发展来看,我都佩服我自己。前期这边人不是很多,所以我就雇佣了一个柜员来处理存钱取钱的简单业务。

「旁白:」 看到这种「单机模式」,相信大家都倍感亲切吧,曾几何时,大家都是从这种单机项目起步的。那时候项目比较小,而且业务逻辑也比较简单,大家为了能够尽快地实现业务系统,验证市场,会将所有的业务数据都存放在同一个数据库中。

单机+缓存

「阿Q:」 那你这一天也处理不了几个人的业务呀,这要是赶上周末来几十个人你就接待不了了呀。

「旁白:」 随着访问量的上升,几乎大部分使用MySQL架构的网站在数据库上都开始出现了性能问题,web程序不再仅仅专注在功能上,同时也在追求性能。

「嘉文:」 对呀,所以我就去别家银行看了看,几乎每家银行都有一个漂亮的小姐姐在那里接客。呸呸呸,是帮客户办理业务,所以我就又请了个大堂经理来负责办理那些小额又简单的业务。

「旁白:」 为了尽快缓解用户访问的压力,一般在优化数据库的结构和索引的基础上,会在应用服务器和数据库服务器中间加一个缓存层来抵消掉一部分的数据库查询操作。

主从复制:读写分离

「阿Q:」 嗯嗯,这样确实解决了一部分问题。哎,我听说去年你们那边通地铁了吧?这样人流岂不是增加了,这样一来,加上大堂经理应该也不够用吧。

「旁白:」 增加数据库缓存层只能缓解数据库读取压力,拦截部分数据库访问请求。但是随着用户访问量的进一步增长,读写集中在一个数据库上让数据库不堪重负,数据库访问的瓶颈进一步凸显出来。这个时候,就不得不对数据层的架构进行改造。

「嘉文:」 谁说不是呢,还好我机智,我又招了两个人,把窗口进行了优化:A专门负责存款业务,BC窗口负责取款业务。这样一来,存取款业务就分离了,处理效率也就增加了。

「旁白:」 我们会启用多个数据库实例,把数据库划分为主库和从库:主库负责写入数据,又被称为写库;从库负责读取数据,又被称为读库,其中读库可以有多个。

❝主从库之间通过同步机制把主库的数据同步到从库,对于需要查询最新写入数据的场景,可以在缓存中多写一份,通过缓存获得最新数据。 ❞

「主、从库可以部署到同一台服务器上,但是为了提高性能,在资源充足情况下,最好部署到不同的服务器上。」

垂直拆分业务数据

「阿Q:」 不错不错,没想到你还有这招,让我刮目相看呀。那你这边除了存取款业务,就没有其他的业务了吗?

「嘉文:」 那肯定得有呀,我可不能让他们老闲着聊天呀。我去年年底又增加了基金的业务,想着培养这批年轻人树立理财的意识,我是不是太无私了。但是自从加了这些业务,人手又不够了。哎!

「旁白:」 当我们使用了主从数据库架构之后,我们会发现我们能支撑更多的用户访问和请求了。但随着业务的进一步发展,如电商系统中增加了商品库存系统,此时就会与原有的订单系统抢占数据库资源,相互影响性能,导致数据库的压力进一步增大。

「阿Q:」 听说你去年没少挣呀,那你是怎么解决的呢?

「嘉文:」 (显示出得意的表情)我直接从外边挖来一个高管,让他和他的团队只负责基金等理财业务,我现有的团队还在传统的业务上。这样他俩相互工作,互不影响。

「旁白:」 为了缓解业务扩张导致的数据库压力问题,我们可以按照业务将数据库进行垂直拆分:将订单系统和商品库存系统的数据库分离开来,降低业务之间的资源竞争,使用独有的数据库进行存储。

水平分表

「阿Q:」 现在大家都全面实现小康社会了,人们手里都有钱了,是不是现在存钱的人变多了呀。

「嘉文:」 昂,这不是前几个月我又招了几个大学生,扩展了一下柜台,专门用来负责存款业务嘛。

「旁白:」 以电商为例,随着用户交易量的增多,单张订单表已经无法满足存储的要求。此时我们可以将一张表拆成多张表来存储,采用一定的策略进行水平扩展,将请求尽可能的均匀的分发到服务器的各个小表中,并发量也进一步得到提升。

集群部署

「阿Q:」 我听盖伦说你们那边小区入驻率很高呀,人流变大了,业务也突飞猛进吧。

「嘉文:」 哈哈,这就是我最自豪的事了,我又开了一家银行。照搬原来的模式,又搞了一套,这样东边和西边各有一个就不用担心忙不过来了。

「旁白:」 随着数据量的持续猛增,我们可以采用集群的方式来减轻访问的压力。但是集群的性能并不能很好的满足互联网的要求,只是在高可靠性上提供了非常大的保证。

NoSQL数据库和搜索引擎

「阿Q:」 我去,太牛了老铁,那你还愁眉苦脸的干啥,听你这么一说,该愁眉苦脸的是我呀。

「嘉文:」 你有所不知,前几天这边的商场开业了,辐射了周边,把周边的好多人都吸引来了。存取款的人一多,忙不过来了,总不能再开一家吧,再开一家的成本和收益比太低了,不值当的。

「阿Q:」 奥奥,原来如此。我觉得你可以这样规划:在东西两家银行里都放几台ATM取款机,这样他们就不会去柜台办理存取款的小额任务了;再在新开的商场旁边租个门店,扔几台ATM取款机,减少了人工成本,这样你不就满足逛商场的人的需求了?

「旁白:」 当我们数据库中的数据数量和多样性达到一定规模后,仅仅使用MySQL已经无法满足我们的需求了,因此引进了其它的数据存储方式。拿电商为例,我们可以对其中的信息大致分类:

  • 商品的基本信息存到MySQLOracle等关系型数据库中;
  • 商品的描述、详情、评价等信息可以采用MongDB等文档数据库来存储,可以提高IO读写性能;
  • 商品的图片采用分布式的文件系统HDFS
  • 商品的关键字可以使用搜索引擎ESSolr
  • 商品的波段性热点高频信息可以使用内存型数据库RedisTair
  • 商品的交易、价格计算、积分积累等可以使用第三方接口或者支付系统。

「嘉文:」 有道理呀,术业有专攻,这样我晚上就可以睡个好觉了。走,带你出去嗨去!

「阿Q:」 走着!

❝以上故事纯属虚构,只为给大家演示一下数据库架构的演变历程。真实的银行系统及业务如何办理,阿Q没有特别深入的研究,只是剧情需要杜撰了一下,仅为了增加大家的理解。 ❞

如果你有不同的意见或者更好的idea,欢迎联系阿Q:关注公众号“阿Q说代码”,也可以加阿Q好友qingqing-4132,阿Q期待你的到来!

本文分享自微信公众号 - 阿Q说代码(AQ_Shuo),作者:阿Q

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据库架构演变过程

    在互联网初创时期,企业往往采用单体架构去搭建自己的应用系统,但是,随着企业的不断壮大,系统访问量不断随之上升,数据量也急剧增长。数据的存储是首先要解决的问题,在...

    小忽悠
  • 关系型数据库的架构演变

    由Master负责写操作,而Slave作为备库,不开放写权限,但允许读权限,主从之前保持数据同步。

    凹谷
  • 关系型数据库的架构演变

    在系统初期,整体的并发了相对较小,因此一般都是将所有的数据信息存储在单库中进行读/写操作。但是随着用户规模不断提升,单库逐渐力不从心,TPS/QPS越来越低。因...

    石臻臻的杂货铺[同名公众号]
  • 大数据入门:HDFS架构演进之路

    Hadoop的核心三大组件之一,HDFS主要负责分布式文件存储,将大规模的数据存储任务拆分成小块,分布到不同的机器上,从而以低成本的方式解决大数据存储问题。今天...

    成都加米谷大数据
  • MyCat 启蒙:分布式系统的数据库架构演变单数据库架构主从数据库架构垂直切分数据库架构水平切分数据库架构总结

    美的让人心动
  • 2017微信数据报告:日活跃用户达9亿、日发消息380亿条

    2017年11月9日,微信团队在成都腾讯全球合作伙伴大会上为全球伙伴解读了最新的《2017微信数据报告》。微信每天有多少条消息被发送?目前有多少个行业已经在使用...

    JackJiang
  • mysql-proxy数据库中间件架构 | 架构师之路

    一、mysql-proxy简介 mysql-proxy是mysql官方提供的mysql中间件服务,上游可接入若干个mysql-client,后端可连接若干个my...

    架构师之路
  • 致 DBA:为什么你经常犯错,是因为你做的功课不够

    本文就是基于这方面的考虑,根据自己在 DBA 这个职业上走过的弯路,总结一些方法给 DBA 的同行。希望本文能给同行 DBA 或者运维的朋友们带来一些改变,让大...

    飞鸿无痕
  • 美团即时物流的分布式系统架构设计

    本文根据美团资深技术专家宋斌在ArchSummit架构师峰会上的演讲整理而成,主要介绍在美团即时物流分布式系统架构逐层演变的进展中,遇到的技术障碍和挑战,还有我...

    美团技术团队
  • QQ和微信凶猛成长的背后:腾讯网络基础架构的这些年

    也许没有多少人记得2004年发生的事情。但对于老腾讯来说,14年前的那个日子,2004年6月16日永远难以忘怀。这一天,QQ诞生5年后的腾讯在香港联交所主板上市...

    JackJiang
  • 【技术干货】数据蜂巢架构演进之路

    京东技术
  • 运维可用性能力建设

    业务的不断演进,系统的数据量不断扩大,技术栈越来越复杂,系统模块越来越多,造成信息系统中断的事件的风险场景越来越多,中断事件的频率和种类持续增长,且有相...

    彭华盛
  • 从小公司,一路跌跌撞撞到腾讯,论高级DBA的自我修养!

    专职做 DBA 已经 6 年多的时间了,一路走来,感触非常深。看同行、同事犯了太多的错误,同样我自己也犯了非常多的错误,然而绝大多数的错误其实都是很低级的错误。...

    小小科
  • 微信朋友圈千亿访问量背后的技术挑战和实践总结

    微信朋友圈包括图片和视频两套业务架构组成,朋友圈图片的特点是请求量大、消耗计算资源较多,视频则主要消耗带宽。

    JackJiang
  • MyCat 启蒙:分布式系统的数据库架构演变

    单数据库架构 一个项目在初期的时候,为了尽可能快地验证市场,其对业务系统的最大要求是快速实现。在这个阶段,代码开发人员为了能快速实现业务系统,一般都是将所有层...

    陈树义
  • 一文带你看透数据库架构的演变过程

    在互联网初创时期,企业往往采用单体架构去搭建自己的应用系统,但是,随着企业的不断壮大,系统访问量不断随之上升,数据量也急剧增长。数据的存储是首先要解决的问题,在...

    Java_老男孩
  • 3.3.2 混沌工程:提升未知故障下应急管理能力

    本篇是《数智万物下的运维思考》第3部分“流程”第3章的“故障管理中的事前管理”的部分内容。主要梳理一下最近行业中比较火的混沌工程,本文简单先从以下5个方...

    彭华盛
  • 一篇文章get微信开源移动端数据库组件WCDB的一切!

    微信团队已于2017年06月09日正式开源了微信自用的移动端数据库组件 WCDB(WeChat Database),详见《[资讯] 微信正式开源移动端数据库组件...

    JackJiang
  • QQ的成功,远没有你想象的那么顺利和轻松

    如果QQ是一个人,看似风光,其实从出生到成长,过程饱经错荡,堪算坎坷。它的人生历程确实也够励志的了。

    JackJiang

扫码关注云+社区

领取腾讯云代金券