架构师速成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. 看到了吧。这就是有状态带来的痛苦。为了把有状态变为无状态有时候你须要做大量的工作。
有关分库分表的关键点和难点,我新一章统一解说。

原文地址:https://www.cnblogs.com/blfbuaa/p/7244254.html