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

  • 相关阅读:
    jekins接通gitee的webhook做自动部署 vue、react、java、springBoot
    vue可复用性 & 组合
    vite使用短链接
    Ubuntu12.04(X86_64)上安装Mesa8.0.4
    回调函数
    c#隐式转换
    OpenGL ES2 的OffScreen实现
    Catch exception from other thread
    C# []、List、Array、ArrayList 区别及应用
    redhat update
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7244254.html
Copyright © 2011-2022 走看看