当前位置: 首页 > news >正文

淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段。

淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段。

文章目录

  • 淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段。
    • 本文导读
    • 1.分库分表
    • 2.数据冗余
    • 3.异步复制
    • 4.读写分离
    • 总结

本文导读

淘宝的数据库架构设计采用了分布式数据库技术,通过分库分表、数据冗余、异步复制、读写分离等技术手段来解决数据库的性能、可用性和扩展性问题。

1.分库分表

​ 分库分表是将数据分散存储在多个数据库和表中,以提高数据库并发性能和扩展性的技术。淘宝采用了基于业务的分库分表架构,将每个商品的信息存储在不同的数据库中,每个数据库再细分为多个表,每个表存储某个商品的某个信息。这样可以避免单个数据库或表的容量限制,同时也方便水平扩展。但是,分库分表后,跨库查询和事务处理会变得复杂,所以需要使用中间件来协调分片之间的操作。

淘宝采用了TDDL(Taobao Distributed Data Layer)作为分库分表的中间件。TDDL是一种分布式数据库访问层,它负责将用户请求路由到相应的数据库分片上,协调事务、缓存和分片操作,以保证数据一致性和高性能。TDDL采用了类似于Mysql Proxy的架构,通过动态拦截和修改JDBC API调用来实现数据库访问和控制。

2bbcdd7443819968713d5835fc29a95b.png

2.数据冗余

​ 数据冗余就是将同一份数据存储在多个地方,以提高数据的可用性和容错能力的技术。淘宝的主数据库会实时同步到多个备份数据库中,一旦主数据库出现故障,备份数据库会自动接管工作。同时,淘宝还使用了多副本存储技术,将数据存储在多个节点上,保证了数据的高可用性。

淘宝采用了Mycat(MySQL Cluster Autonomic Tuning)作为数据冗余的中间件。Mycat是一种分布式数据库中间件,它提供了数据分片、数据冗余、读写分离、动态路由、故障切换等功能,可以在多台MySQL服务器之间分配和复制数据,提高数据库的可用性和容错能力。

img

3.异步复制

​ 异步复制就是将主数据库中的数据异步复制到从数据库中,以提高数据库的读性能和可用性的技术。淘宝的主数据库会定期将数据同步到从数据库,保证从数据库的数据与主数据库同步。

淘宝采用了Canal作为异步复制的中间件。Canal是一种基于MySQL数据库日志增量订阅

Canal是一种基于MySQL数据库日志增量订阅和消费的中间件,它可以将MySQL的数据变更实时地转发到消息队列或者其他存储系统中。淘宝通过Canal将主数据库的数据变更实时地同步到从数据库中,以提高从数据库的读性能和可用性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kpFE729E-1678329545540)(null)]

4.读写分离

​ 读写分离就是将读操作和写操作分别路由到不同的数据库服务器上,以提高数据库的读性能和可用性的技术。淘宝的主数据库处理写操作,从数据库处理读操作,以减轻主数据库的负担,同时提高从数据库的读性能。

淘宝采用了Alibaba Cobar作为读写分离的中间件。Cobar是一种轻量级的分布式数据库中间件,它可以实现数据库的读写分离、负载均衡和故障切换等功能。Cobar通过多个节点之间的协作,使得整个分布式系统具有高可用性和高性能。

img

总结

​ 综上所述,淘宝的数据库架构设计采用了分布式数据库技术,通过分库分表、数据冗余、异步复制、读写分离等技术手段来解决数据库的性能、可用性和扩展性问题。同时,淘宝还采用了一系列中间件来协调分布式系统的操作,保证了数据的一致性和高性能。这些技术手段的综合应用,使得淘宝的数据库能够承受双十一这种高并发、高压力的交易活动。
在这里插入图片描述

相关文章:

  • 南大通用数据库-Gbase-8a-学习-32-gccli客户端
  • Linux的scp、rsync、以及集群分发脚本、ssh配置免密登录
  • 【计算机视觉 | 目标检测】锚点预匹配(Anchor pre-matching)的理解
  • 智联物联分享之物联网协议MQTT简述,MQTT协议特点
  • Echarts立体柱状图
  • SpringBoot定时任务@Scheduled注解详解
  • Gen-LaneNet论文精读总结
  • Spring Cloud Alibaba全家桶——微服务网关Gateway组件
  • 基于微信PC端小程序抓包方法
  • SQL Server 实现邮件发送功能(配置步骤及存储过程源码)
  • 刘禹锡最经典诗文10首,每一首都是千古名作,读懂受益一生
  • mybatisplus快速实现动态数据源切换
  • Vue-条件渲染的基本使用(v-if,v-show,v-else相关指令使用)
  • PMP项目管理认证第一节(备考阶段准备)
  • 【数据结构】TopK,堆排序, --堆的初始化与应用
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 4. 路由到控制器 - Laravel从零开始教程
  • Android组件 - 收藏集 - 掘金
  • ComponentOne 2017 V2版本正式发布
  • extract-text-webpack-plugin用法
  • HTTP 简介
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript DOM 10 - 滚动
  • MaxCompute访问TableStore(OTS) 数据
  • Mybatis初体验
  • npx命令介绍
  • Python学习笔记 字符串拼接
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 关于List、List?、ListObject的区别
  • 利用DataURL技术在网页上显示图片
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 使用common-codec进行md5加密
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 小试R空间处理新库sf
  • 用Canvas画一棵二叉树
  • ​MySQL主从复制一致性检测
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (12)目标检测_SSD基于pytorch搭建代码
  • (8)STL算法之替换
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三)docker:Dockerfile构建容器运行jar包
  • .a文件和.so文件
  • .NET CLR基本术语
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .net 设置默认首页
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net通用权限框架B/S (三)--MODEL层(2)
  • [16/N]论得趣