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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 故事篇:数据库架构演变之路

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

image.png

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

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

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

单机MySQL的美好年代

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

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

单机+缓存

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

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

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

image.gifimage.png

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

主从复制:读写分离

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

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

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

image.gifimage.png

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

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

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

垂直拆分业务数据

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

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

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

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

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

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

水平分表

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

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

image.gifimage.png

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

集群部署

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

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

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

NoSQL数据库和搜索引擎

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

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

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

image.gifimage.png

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

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

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

「阿Q:」 走着!

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

 


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
1月前
|
设计模式 缓存 关系型数据库
探索微服务架构中的数据库设计挑战
微服务架构因其模块化和高扩展性被广泛应用于现代软件开发。然而,这种架构模式也带来了数据库设计上的独特挑战。本文探讨了在微服务架构中实现数据库设计时面临的问题,如数据一致性、服务间的数据共享和分布式事务处理。通过分析实际案例和提出解决方案,旨在为开发人员提供有效的数据库设计策略,以应对微服务架构下的复杂性。
|
1月前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
2月前
|
运维 监控 Cloud Native
自动化运维的魔法书云原生之旅:从容器化到微服务架构的演变
【8月更文挑战第29天】本文将带你领略自动化运维的魅力,从脚本编写到工具应用,我们将一起探索如何通过技术提升效率和稳定性。你将学会如何让服务器自主完成更新、监控和故障修复,仿佛拥有了一本能够自动翻页的魔法书。
|
8天前
|
存储 SQL NoSQL
数据库的演变
【10月更文挑战第6天】
10 2
|
12天前
|
负载均衡 API 持续交付
深入探索微服务架构的演变与实践
【10月更文挑战第5天】 在当今软件开发领域,微服务架构以其独特的优势,如解耦、灵活性和可扩展性,已成为构建现代应用的首选方法。本文将全面解析微服务的核心概念、发展历程及其在实际应用中的最佳实践,帮助读者深入理解并有效实施微服务架构。
23 3
|
17天前
|
消息中间件 负载均衡 Cloud Native
云原生之旅:从容器到微服务的架构演变
在数字化转型的风潮中,云原生技术以其灵活性、可扩展性和弹性而备受青睐。本文将通过一个虚拟的故事,讲述一个企业如何逐步拥抱云原生,实现从传统架构向容器化和微服务架构的转变,以及这一过程中遇到的挑战和解决方案。我们将以浅显易懂的方式,探讨云原生的核心概念,并通过实际代码示例,展示如何在云平台上部署和管理微服务。
|
29天前
|
机器学习/深度学习 人工智能 云计算
后端架构的演变与未来趋势
本文深入探讨了后端架构的历史演变和未来发展趋势,从单体应用到微服务架构,再到无服务器架构,分析了每种架构的特点、优势及应用场景。同时,展望了未来可能的发展方向,如人工智能在后端开发中的应用、云计算技术的深度融合等,为后端开发者提供了宝贵的参考和启示。
|
1月前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与实践
随着微服务架构的普及,如何高效管理和优化数据库访问成为了关键挑战。本文探讨了在微服务环境中优化数据库访问的策略,包括数据库分片、缓存机制、异步处理等技术手段。通过深入分析实际案例和最佳实践,本文旨在为开发者提供实际可行的解决方案,以提升系统性能和可扩展性。
|
1月前
|
人工智能 边缘计算 Serverless
后端架构演变与未来趋势
本文旨在通过对后端架构的发展历程进行梳理,探讨从单体应用到微服务架构的转变过程及其背后的驱动因素。同时,分析当前后端技术中的热门话题如容器化、Serverless架构和人工智能集成等,并对未来可能的技术趋势进行展望。通过总结现有技术的优缺点及未来可能面临的挑战,为后端开发者提供有价值的参考。这也太棒了吧!