分布式数据库

业务场景变化带来业务量激增导致高性能需求

小额支付的流行:

以前超市十几块钱东西刷卡,收银员白眼

现在大街小巷的商户摊贩都支持扫码支付,没人跟你叽歪

传统高可靠

银行高可靠方案很多是SRDF,成本高

数据库主备,高端共享存储,存数据库的文件和日志

  • 高端存储硬件成本高
  • 备库日常空闲,资源闲置
  • 备库不是active,需要定期演练确保其可用,增大使用成本

不用分布式数据库的备选方案

  • 垂直扩展

最偷懒也最可靠。升内存、CPU获得更好性能

硬件有天花板,不能完全解决问题

  • 读写分离

方案很成熟,但非所有应用都有效

通常都是异步数据同步,存在延时,要评估查询业务延时容忍度

写性能并没提升

  • 微服务

垂直分库分表,没有分布式事务干扰,分库是个好办法,代价是微服务本身的改造成本

热点服务,仍有性能压力

如果非业务本身,仅为分摊压力而拆库,很多事务的东西暴露到应用层,加大应用复杂度


上述都不能解决问题,最后两招,水平分库分表和分布式数据库

争吵最多的也是这两方案的拥护者,其他方案利弊比较容易看清

水平分库分表

Sharding+Proxy

直接拆数据库应用影响太大,大家都感觉疼,加Proxy让应用无感知,Proxy方案还是蛮多且历史悠久

Sharding-JDBC/TDDL/Atlas/MyCat

几个问题

  • 跨分片的SQL怎么处理
  • 唯一键、外键等全局约束怎么处理
  • 全局ID如何生成
  • 分片通常是基于业务键Hash,要求数据存在一个稳定的业务键恰好能解决访问热点,业务是否支持
  • 是否支持分布式事务

这个方案也在不断的演化来解决上述问题,直到DRDS及类似方案的出现,已经转化为Proxy流派的分布式数据库

分布式数据库

  • Aurora代表

    log is database为理念,不适用多数银行场景

  • Proxy流派延续

    内核还是关系型数据库(多采用MySQL),增加SQL解析适配、节点调度、全局事务控制等

  • NewSQL流派

    通常存储与计算引擎分离,访问接口兼容SQL,存储用KV存储和LSM模型,主副本用Paxos/Raft同步,支持分布式事务,完全ShareNothing架构

一个很贴切的比喻,IT系统就像时装,既要有实用性,还要符合时尚潮流

深入剖析 SRDF/Mtreo 和 MetroSync 双活数据中心存储方案 https://blog.csdn.net/btb5e6nsu1g511eg5xeg/article/details/78129920