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

Posted blfbuaa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构师速成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. 看到了吧。这就是有状态带来的痛苦。为了把有状态变为无状态有时候你须要做大量的工作。
有关分库分表的关键点和难点,我新一章统一解说。

以上是关于架构师速成8.3-可用性之分库分表的主要内容,如果未能解决你的问题,请参考以下文章

java架构师亲临分享高可用技术之数据库分库分表

架构师速成6.7-设计开发思路-uml

所向无敌!分布式系统速成笔记被阿里架构师爆出!在Github已获赞93.6K

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

架构师速成6.4-开发框架

Java EE速成指南30招