1.介绍

阿里的沈洵在youku分享了一系列技术讲座视频,表示对这种分享精神表示感谢。本文仅仅做为笔记使用

2.基本介绍

DRDS分布式数据库引擎起源于cobra(已经开源,点击查看)和TDDL
主要复用了cobar proxy中两块重要代码:

  1. Server 协议层
  2. Sql解析器 cobar更加侧重服务解析、SQL解析,而TDDL则侧重支持分布式的连接和聚集操作

DRDS相比TDDL的优势:

  1. 简化配置,像操作一个数据库一样操作分布式数据库

单机数据库问题:

  1. 容量瓶颈
  2. 事务数瓶颈
  3. 读取瓶颈

经验:良好的架构设计优化远比执着优化一小部分效果好的多。

scale out(多机水平扩展):使用廉价数据库阵列
scale up(单机垂直扩展)
优势:

  1. 轻量使用数据库,较小更换成本 2.不担心瓶颈

劣势:

  1. 重构迁移成本大
  2. 分布式环境下一些查询不允许
  3. 完成相同功能要比单机扩展付出更多成本(CAP)

不要过早过度设计,能用单机使用单机就可以。迁移的代价还是可接受的,屏蔽分布式中不允许的东西。(1,2月)

合理的决策

3. DRDS功能

  • 分布式MYSQL执行引擎:用于支持join,嵌套和函数等;智能下推(区别共享存储,即做数据本地计算)
  • 弹性扩展(面向关系型数据库)
  • 小表异步广播:做跨机join,在对未切分的小表做夸机join的时候使用精卫这个ETL工具增量复制到其他节点(注意异步复制有延迟,两三百毫秒)

宗旨就是尽量少走网络

4.分布式查询优化

分布式查询优化原则:

  1. 选择的 shardingKey要能够让所有存储节点均衡的负载读写请求,这样才可以方便水平扩展,不出现系统瓶颈
  2. 查询尽可能带上shardingKey,带上一些冗余

买家和卖家,收到和被收到,这种人和人之间的互相关系的查询可以采用异构复制(CASE3:小表异步广播)的方法解决。一套根据买家ID切分,一套根据卖家ID切分,空间换网络消耗来减少延迟。还可以加只读库,做读写分离。

针对买家查询可以按照买家ID切分(CASE1),如果还要查询卖家就建异构索引(CASE2)。涉及元信息表采用小表异步广播。(CASE3)

使用小表复制时注意保证:

  1. 小表本身要较小
  2. 小表本身写入的TPS要低

5. 事务的分布式优化

容易理解的模型性能不好,性能好的模型往往不容易理解,来自《分布式系统原理与范型》
代价

跨机的分布式事务导致更多的事务延迟,加锁的时间增加,并发性能降低。为了解决这个问题可以在一个节点上的事务单元采用同步执行,完成后发送异步消息(ONS)给其他节点,避免了库之间的相互等待,将事务变成了单机事务提升了QPS,TPS。ONS在阿里即METAQ和NOTIFY

6.数据库迁移

云下数据库迁移到DRDS。平滑过渡,不影响现有业务。工具化的方式减少运维代价。