架构师速成8.3-可用性之分库分表

有状态分布式,涉及的知识就比较多了,不过我们可以拿几个现实的例子由浅入深的来理解。

数据库的分库分表

  1. 假设你是一个开发负责人,开始使用单机的数据库,突然一天数据库硬盘挂掉了。你没有做备份,然后就没有然后了。
  2. 进入第2个公司,你意识到备份的重要性,每天定时备份到另一台机器,突然有一天,数据库硬盘挂掉了。你心想幸好我有备份,然后巴拉巴拉的恢复起来,用了2个小时。老板说不错,但是—-我们因为宕机造成大量用户流失,信誉下降,然后就又没有然后了。上面说的就是单点的问题。
  3. 进入第3个公司,你觉得单点很可怕,所以主备做起来,数据自动同步到备库,做到随时准备切换。突然有一天,主数据库硬盘挂掉了,你从容的修改数据库连接指向备库,重启系统恢复了,只用了5分钟。此时掌声一片,你沉浸在无比的欢乐中,老板说不错,但是—就在这5分钟我们丢了一个上亿的单子。我擦,你不是故意的吧!(其实这有可能是真实的片段,我们创业时,就30分钟断网,结果正好在举行一个大型的营销策划,不说了,我擦一会眼泪),然后就又没有然后了。其实当你用上主备时,说明数据库已经有状态了,必须要区分谁是主,谁是备。
  4. 进入第4个公司,你不但做了主备,还做了高可用,通过HA实现了瞬时切换。突然有一天,主数据库硬盘挂掉了,你从容的端起了你的屌丝杯,世界清静了。老板说不错,小子我看好你。从此你走向人生巅峰,出任CTO,迎娶白富美。但是没过多久问题来了,随着用户不断的增加,你的数据库摇摇欲坠,不时就抽疯。老板说搞定他,不然我就搞定你。
  5. 咋办,分库分表啊!如何分,这就涉及到更多的规则了,比如按照用户id是最常见的做法。此时你不但需要管主备而且还需要在程序中确定如何路由,结果集合并,如果再有机器增加,还要涉及数据迁移,另外还要防止出现重复id的脏数据,需要全局唯一主键,等等。亚美蝶!知道有状态的痛苦了吧。这也是为什么有些同学转投nosql的存储的很大原因,nosql替你屏蔽了这些规则,他在内部实现了路由、分库、合并等等。
  6. 提到这里不得不提一下淘宝的牛逼产品–drds(沈公子是不是应该给些广告费啊)。
    • 分布式SQL引擎

      • 将数据按照条件分散到多个数据节点(分库分表),对于数据操作sql进行分布式优化,获得最佳执行效率
    • 自主运维
      • DRDS的用户运维平台提供DRDS接入、分布式DDL、拆分信息维护、平滑扩缩容、分布式DML、监控等常用功能,让运维工作变得更简单
    • 小表复制
      • 对于配置表,常量表等不经常变化的表进行多节点对等同步,加速该类表与其他拆分表做关联查询的速度
    • 分布式全局唯一id
      • 提供全局唯一数字id服务,帮助您在分布式环境下,继续保持类似唯一键、主键等数据的全局(所有节点)唯一性
  1. 看到了吧,这就是有状态带来的痛苦。为了把有状态变为无状态有时候你需要做大量的工作。

有关分库分表的关键点和难点,我新一章统一讲解。

时间: 2024-08-13 02:22:07

架构师速成8.3-可用性之分库分表的相关文章

水平分库分表的关键问题及解决思路

在之前的文章中,我介绍了分库分表的几种表现形式和玩法,也重点介绍了垂直分库所带来的问题和解决方法.本篇中,我们将继续聊聊水平分库分表的一些技巧. 分片技术的由来 关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量.连接数.处理能力等都很有限,数据库本身的“有状态性”导致了它并不像Web和应用服务器那么容易扩展.在互联网行业海量数据和高并发访问的考验下,聪明的技术人员提出了分库分表技术(有些地方也称为Sharding.分片).同时,流行的分布式系统中间件(例如MongoDB.ElasticSe

分库分表的几种常见形式以及可能遇到的难

在谈论数据库架构和数据库优化的时候,我们经常会听到"分库分表"."分片"."Sharding"-这样的关键词.让人感到高兴的是,这些朋友所服务的公司业务量正在(或者即将面临)高速增长,技术方面也面临着一些挑战.让人感到担忧的是,他们系统真的就需要"分库分表"了吗?"分库分表"有那么容易实践吗?为此,笔者整理了分库分表中可能遇到的一些问题,并结合以往经验介绍了对应的解决思路和建议. 垂直分表 垂直分表在日常开

水平分库分表的关键步骤和技术难点

在之前的文章中,我介绍了分库分表的几种表现形式和玩法,也重点介绍了垂直分库所带来的问题和解决方法.本篇中,我们将继续聊聊水平分库分表的一些技巧. 分片技术的由来 关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量.连接数.处理能力等都很有限,数据库本身的"有状态性"导致了它并不像Web和应用服务器那么容易扩展.在互联网行业海量数据和高并发访问的考验下,聪明的技术人员提出了分库分表技术(有些地方也称为Sharding.分片).同时,流行的分布式系统中间件(例如MongoDB.Elas

分库分表的几种常见玩法及如何解决跨库查询等问题

在谈论数据库架构和数据库优化的时候,我们经常会听到"分库分表"."分片"."Sharding"-这样的关键词.让人感到高兴的是,这些朋友所服务的公司业务量正在(或者即将面临)高速增长,技术方面也面临着一些挑战.让人感到担忧的是,他们系统真的就需要"分库分表"了吗?"分库分表"有那么容易实践吗?为此,笔者整理了分库分表中可能遇到的一些问题,并结合以往经验介绍了对应的解决思路和建议. 垂直分表 垂直分表在日常开

OneProxy分库分表演示--楼方鑫

OneProxy分库分表演示 (杭州平民软件有限公司) OneProxy是为MySQL精心设计的数据访问层,可以为任何开发语言提供对MySQL数据库的智能数据路由功能,比如单点切换.读写分离.分库分表等高级功能.并且允许你在公有云和私有云环境下自由布署,打造属于自己的数据架构. 如果在测试中发现问题,请联系我(微博:平民架构,微信:anysql)! 分库分表 Oracle从8.0.x版本开始在数据库内部支持分区表,可以将数据按某一个字段的某一规律来进行分片存贮,以降低数据库索引的层级,提高访问效

架构师速成8.4-分库分表的关键点

我们还是由浅入深(这个词我喜欢,你呢?)的讨论一下,分库分表的关键点(本故事纯属虚构,仅为搞笑): 当你的系统很小的时候,只有一个数据库,每个表的主键都是自增的,你都不去关心主键变成了多少,反正db保证自增,小日子过的很是惬意.但惬意的日子总是短暂的,你因为DB宕机被老板fire 3次(见上一个故事). 进入第4个公司的时候,你发粪涂墙,将集群改成主备HA,结果顺利出任CTO,迎娶白富美,走向了人生巅峰.当然这中间也出过一些小插曲,比如:张三注册时,刚点击完注册,DB主机宕机了.张三发现刚注册的

分库分表策略的可实现架构

分库分表 是解决mysql水平扩展的主要手段. 网上有关策略的讨论很多,主要是hash扩展.按时间扩展.按范围扩展等等.但真正想实施分库分表的朋友们往往觉得“策略听来终觉浅,觉知此事要代码”,因此本文的主要目的是给朋友们提供一个可实现架构. JDBCTemplate和Hibernate 大家都知道Hibernate是ORM(对象-关系数据库 mapping)意义上的第一个真正的“统治级”产品. JDBCTemplate则是对Spring对jdbc的简单封装,相对于Hibernate,工程师需要自

数据库架构演变及分库分表

当生产环境中业务量激增,数据库数据量也会极具增加.当数据库的数据量达到一定程度时(数据库瓶颈),数据库宿主机负载超高,会严重影响业务,严重时会导致数据库宕机.为了避免这种极端情况的发生,我们应当在发生前做好预案,用于解决数据库数据量过载的问题.以下是我个人工作中使用的解决方案:1)数据库主从或多主多从方案2)数据库冷热数据拆分3)数据库分库分表操作4)在数据库前端增加缓存redis或memcached 一开始时,公司部分业务的架构如下(全都是单节点情况)经过自己强调该架构严重的缺点:节点单一,服

大数据技术之_29_MySQL 高級面试重点串讲_02_Mysql 简介+Linux 版的安装+逻辑架构介绍+性能优化+性能分析+查询截取分析+分区分库分表简介+锁机制+主从复制

第1章 Mysql 简介1.1 概述1.2 高级 MySQL第2章 Mysql Linux 版的安装2.1 下载地址2.2 检查当前系统是否安装过 mysql2.3 修改 Mysql 配置文件位置2.4 修改字符集和数据存储路径2.5 MySQL 的安装位置说明2.6 Mysql 配置文件说明2.7 Mysql 的数据存放目录第3章 Mysql 逻辑架构介绍3.1 总体概览3.2 查询说明第4章 Mysql 性能优化4.1 影响 mysql 的性能因素4.2 查询与索引优化分析4.2.1 性能下