核心算法介绍

实际测试中,otter的同步速度相比于mysql的复制,约有5倍左右的性能提升,这取决于其同步算法的实现. 抛弃了强一致性,得到了性能提升

数据合并

  1. 1. insert + insert -> insert (数据迁移+数据增量场景)
  2. 2. insert + update -> insert (update字段合并到insert)
  3. 3. insert + delete -> delete
  4. 4. update + insert -> insert (数据迁移+数据增量场景)
  5. 5. update + update -> update
  6. 6. update + delete -> delete
  7. 7. delete + insert -> insert
  8. 8. delete + update -> update (数据迁移+数据增量场景)
  9. 9. delete + delete -> delete

说明.

  1. insert/行记录update 执行merge sql,解决重复数据执行

  2. 合并算法执行后,单pk主键只有一条记录,减少并行load算法的复杂性(比如batch合并,并行/串行等处理)

数据入库算法

  1. 入库算法采取了按pk hash并行载入+batch合并的优化
  2. a. 打散原始数据库事务,预处理数据,合并insert/update/delete数据(参见合并算法),然后按照table + pk进行并行(相同table的数据,先执行delete,后执行insert/update,串行保证,解决唯一性约束数据变更问题),相同tablesql会进行batch合并处理
  3. b. 提供table权重定义,根据权重定义不同支持"业务上类事务功能",并行中同时有串行权重控制.
  4. 业务类事务描述:比如用户的一次交易付款的流程,先产生一笔交易记录,然后修改订单状态为已付款. 用户对这事件的感知,是通过订单状态的已付款,然后进行查询交易记录。
  5. 所以,可以对同步进行一次编排: 先同步完交易记录,再同步订单状态。 (给同步表定义权重,权重越高的表相对重要,放在后面同步,最后达到的效果可以保证业务事务可见性的功能,快的等慢的. )

初步性能指标:

  1. 单机房同步

    a. 100tps , 延迟100ms

    b. 5000tps, 延迟1s

  2. 中美异地机房同步

    a. 100tps , 延迟2s

    b. 5000tps ,延迟10s
    ps. 性能指标取决于目标数据库性能,数据大小等多个因素,单机房100b大小,极限tps可以1w+

原文: https://github.com/alibaba/otter/wiki/Otter%E6%95%B0%E6%8D%AE%E5%85%A5%E5%BA%93%E7%AE%97%E6%B3%95