SlideShare a Scribd company logo
1 of 33
MySQL异构数据同步方案
 赶集网CDC项目实践

   蔡峰 caifeng@ganji.com
目录

关于异构数据同步
Tungsten Replicator介绍
赶集CDC项目实践
CDC在赶集的应用案例
1   关于异构数据同步
LAMP架构面临的挑战

性能提升              Caching
多平台               Key-Value
 web/wap/mobile   Indexing
社交化(SNS)          OLAP
离线/实时统计分析         Graph DB
数据挖掘              BigTable
多机房               ...
Not Only SQL!

MySQL的优势       放弃MySQL的障碍
 ACID           大量业务代码
 查询功能强大         熟悉的开发模式
 成熟的运维方案        人员储备
                技术风险




    如何保证数据的同步?
应用层解决...

在业务代码中维护      缺点
 多写             代码复杂,维护困难
 消息中间件异步处理      工作量大,效率下降
 简单,灵活          容易引入BUG
                容错能力差



分布式事务?
开发效率?
服务化?
系统层面...

           方案                  项目

                        PHP mysqlnd
Language API
                        JDBC
                        MySQL Proxy
Data Middleware
                        Vitess
MySQL Trigger + UDF
                        Flexviews
MySQL Binlog Parser     Amoeba
                        JBinlog
其它...
http://www.tbdata.org/




                                 (未开源)
Change Data Capture

数据库级别实现的增量抽取解决方案
 监视表的数据变化。
 改善ETL的效率。
 为检索系统提供数据更新。
 实现第三方的数据同步。
 提供外部的数据触发操作。
2   Tungsten Replicator介绍
tungsten-replicator

Data replication engine for MySQL
  Easy failover
  Multiple masters
  Multiple sources to a single slave
  Parallel replication
  Replicate to Oracle and PostgreSQL
  O'Reilly MySQL Application of the Year 2011


  http://code.google.com/p/tungsten-replicator/
Key Points




Transaction History Logs (THL)
  Global Transaction ID
  Metadata
Service Database
TR 典型架构
扩展

MCQueueApplier
 Inspired by MongoDBApplier
 https://github.com/tailorcai/tungsten-queue-applier
实现细节
MySQL                        编码(JSON)
  Row Based Replication        Meta:
                                 Schema,Table
Kestrel                          Action:
                                 Insert/Update/Delete
  Memcache Protocol
                               Row Data
  High Performance
  Persistence
  Fan-out Queue              Tungsten
  Reliable Get                 ReplicationFilter
  https://github.com/robey     ColNamesFilter
  /kestrel
优化配置
                          Replication                         Queue
   extractor   ColNames                 Applier   Extractor
                            Filter                            Applier




                                                              Kestre
     MySQL                                                    Queue



独立服务器
BinLog
                            “Trigger” Server
No THL
3   赶集网CDC项目实践
Availability?
            需求
服务崩溃
 MySQL
            数据重复
 Tungsten
 Kestrel
             乱序?      数据丢失
 Hardware


网络故障
            对业务透明     自动响应
 数据丢失
 同步延迟
Master/Slave

         CDC
         Master       switcher

MySQL                            应用逻辑
Master

         CDC
         Slave




                  根据延迟信息进行切换
Master/Slave 2

P1    P2    P3    P4    P5    P6
                              P1    P7
                                    P2    P3
                                          ...



     P1    P2    P3    P4    P5    P6
                                   P1    P7
                                         P2     P3
                                                ...

     更新数据流
Master/Slave 2
   block1                                 block2

  P1    P2    P3    P4    P5    H1    P6
                                      P1       P7
                                               P2    …
                                                     P3



       P1    P2    P3    P4    P5    H1      P6
                                             P1     P7
                                                    P2    …
                                                          P3



                                              SN: 100
                                              Timestamp: 13000000
                                              Delay=now() - timestamp
定时更新heartbeat表,生成heartbeat数据

以Block为单位进行切换
Master处理完成一个Block后,通知Slave处理该Block

切换时,Slave重放当前Block,确保数据不丢失
Zookeeper

信息           格式                  描述

配置           主CDC服务器地址           启动,切换
             从CDC服务器地址
Switcher进程   0 – 主处理进程HOST:PID   任务分配
             1 – 从处理进程HOST:PID
             2 - 备份进程 HOST:PID
处理状态         主CDC                状态监控
             Block SN            同步
             最新的timestamp
优点

实时              高可用
系统延时 <100ms     可用于线上业务




                    独立性
                    对线上业务的非侵入性
                    可移植性
  事务友好

               灵活
               支持多库,多表
               同时支持多种后端应用,互相独立
   数据一致性       数据随意组合
   与DB保持严格一致
   数据可以回放
CDC的运维和监控

DBA要注意
 批量更新一定加Limit
 数据分片<5W
 插入sleep,缓解延迟影响
 注意BinLog 滚动
 编码方式


监控和报警(zabbix...)
 主从同步状态
 延迟(MySQL,CDC)
4   CDC在赶集的应用案例
Indexing & Caching

分类信息      写
                     MySQL

                                        CDC

读




        Searcher     Xapian   Indexer
                      Data



        Memcache



       批量数据更新?
跨机房同步
                App
主机房A

                                           延迟不一致
       Master
                      Message              产生数据错误
                       Queue
        DB




                                          MQ


                                                     Search/Cache
                                  Slave
                                   DB

                                               App
                            机房B
跨机房同步
主机房A
                          部署新机房 <2个月
                          代码修改工作量<1人月
   Master
                          没有延迟同步问题
    DB




                  Slave
                   DB           Search/Cache




                          CDC
            机房B
数据迁移
场景                   优点
 表结构调整                不需要修改现有业务
 存储调整                 不需要修改表结构
 异构数据库                停服时间短
     MySQL → NoSQL


关键点
 如何获取增量数据
 如何较少开发的工作量
 如何减少停服时间
更多...
 更新客户信息
  Call Center


  支付及收入
   ERP


数据更新历史记录
 Data + Version



   数据校验
计划 ...

应用开发
 历史数据回放/全量数据抽取
 更友好的API接口及订阅功能
 多种数据一致性保证


系统
 Tungsten 2.0.5
 JSON to BSON
     Int64? Binary?
 故障自动切换
类似项目
谢谢!



                   Questions?

We are hiring...
  PHP研发工程师
  WEB前端研发工程师

More Related Content

What's hot

Hbase在淘宝的应用与优化 修改
Hbase在淘宝的应用与优化 修改Hbase在淘宝的应用与优化 修改
Hbase在淘宝的应用与优化 修改yp_fangdong
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理haiyuan ning
 
OceanBase-破解数据库高可用难题
OceanBase-破解数据库高可用难题OceanBase-破解数据库高可用难题
OceanBase-破解数据库高可用难题everestsun
 
11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delaymaclean liu
 
基于Lucene的站内搜索 Beta
基于Lucene的站内搜索 Beta基于Lucene的站内搜索 Beta
基于Lucene的站内搜索 Betazwxgo
 
Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践maclean liu
 
Cassandra运维之道(office2003)
Cassandra运维之道(office2003)Cassandra运维之道(office2003)
Cassandra运维之道(office2003)haiyuan ning
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast sharerfyiamcool
 
分区表基础知识培训
分区表基础知识培训分区表基础知识培训
分区表基础知识培训maclean liu
 
PostgreSQL 9 Standby
PostgreSQL 9 StandbyPostgreSQL 9 Standby
PostgreSQL 9 StandbyMarch Liu
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践Wensong Zhang
 
淘宝Java中间件之路 it168
淘宝Java中间件之路 it168淘宝Java中间件之路 it168
淘宝Java中间件之路 it168vanadies10
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析frogd
 
Memcached vs redis
Memcached vs redisMemcached vs redis
Memcached vs redisqianshi
 

What's hot (17)

Norbert框架
Norbert框架Norbert框架
Norbert框架
 
SMACK Dev Experience
SMACK Dev ExperienceSMACK Dev Experience
SMACK Dev Experience
 
Hbase在淘宝的应用与优化 修改
Hbase在淘宝的应用与优化 修改Hbase在淘宝的应用与优化 修改
Hbase在淘宝的应用与优化 修改
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
 
OceanBase-破解数据库高可用难题
OceanBase-破解数据库高可用难题OceanBase-破解数据库高可用难题
OceanBase-破解数据库高可用难题
 
11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay
 
基于Lucene的站内搜索 Beta
基于Lucene的站内搜索 Beta基于Lucene的站内搜索 Beta
基于Lucene的站内搜索 Beta
 
Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践
 
Cassandra运维之道(office2003)
Cassandra运维之道(office2003)Cassandra运维之道(office2003)
Cassandra运维之道(office2003)
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast share
 
分区表基础知识培训
分区表基础知识培训分区表基础知识培训
分区表基础知识培训
 
PostgreSQL 9 Standby
PostgreSQL 9 StandbyPostgreSQL 9 Standby
PostgreSQL 9 Standby
 
No sql数据库笔谈
No sql数据库笔谈No sql数据库笔谈
No sql数据库笔谈
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
 
淘宝Java中间件之路 it168
淘宝Java中间件之路 it168淘宝Java中间件之路 it168
淘宝Java中间件之路 it168
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析
 
Memcached vs redis
Memcached vs redisMemcached vs redis
Memcached vs redis
 

Viewers also liked

美团技术沙龙04 - Kv Tair best practise
美团技术沙龙04 - Kv Tair best practise 美团技术沙龙04 - Kv Tair best practise
美团技术沙龙04 - Kv Tair best practise 美团点评技术团队
 
Python queue solution with asyncio and kafka
Python queue solution with asyncio and kafkaPython queue solution with asyncio and kafka
Python queue solution with asyncio and kafkaOndřej Veselý
 
Communication And Synchronization In Distributed Systems
Communication And Synchronization In Distributed SystemsCommunication And Synchronization In Distributed Systems
Communication And Synchronization In Distributed Systemsguest61205606
 
Inter-Process Communication in distributed systems
Inter-Process Communication in distributed systemsInter-Process Communication in distributed systems
Inter-Process Communication in distributed systemsAya Mahmoud
 
codecentric AG: CQRS and Event Sourcing Applications with Cassandra
codecentric AG: CQRS and Event Sourcing Applications with Cassandracodecentric AG: CQRS and Event Sourcing Applications with Cassandra
codecentric AG: CQRS and Event Sourcing Applications with CassandraDataStax Academy
 
Synchronization in distributed systems
Synchronization in distributed systems Synchronization in distributed systems
Synchronization in distributed systems SHATHAN
 
大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)Tim Y
 
Representation of class
Representation of classRepresentation of class
Representation of classhjgoldsmith
 
Aunties power point ECMM
Aunties power point ECMMAunties power point ECMM
Aunties power point ECMMcherise dash
 
HeroLympics Eng V03 Henk Vd Valk
HeroLympics  Eng V03 Henk Vd ValkHeroLympics  Eng V03 Henk Vd Valk
HeroLympics Eng V03 Henk Vd Valkhvdvalk
 
Pembelajaran elektronik kelompok x
Pembelajaran elektronik kelompok xPembelajaran elektronik kelompok x
Pembelajaran elektronik kelompok xRizki Maneli
 
Interfaccia, tra uomini, macchine, programmi: giochi e videogiochi
Interfaccia, tra uomini, macchine, programmi: giochi e videogiochiInterfaccia, tra uomini, macchine, programmi: giochi e videogiochi
Interfaccia, tra uomini, macchine, programmi: giochi e videogiochiguest7f82ed
 

Viewers also liked (18)

美团技术沙龙04 - Kv Tair best practise
美团技术沙龙04 - Kv Tair best practise 美团技术沙龙04 - Kv Tair best practise
美团技术沙龙04 - Kv Tair best practise
 
Python queue solution with asyncio and kafka
Python queue solution with asyncio and kafkaPython queue solution with asyncio and kafka
Python queue solution with asyncio and kafka
 
Communication And Synchronization In Distributed Systems
Communication And Synchronization In Distributed SystemsCommunication And Synchronization In Distributed Systems
Communication And Synchronization In Distributed Systems
 
Inter-Process Communication in distributed systems
Inter-Process Communication in distributed systemsInter-Process Communication in distributed systems
Inter-Process Communication in distributed systems
 
codecentric AG: CQRS and Event Sourcing Applications with Cassandra
codecentric AG: CQRS and Event Sourcing Applications with Cassandracodecentric AG: CQRS and Event Sourcing Applications with Cassandra
codecentric AG: CQRS and Event Sourcing Applications with Cassandra
 
Synchronization in distributed systems
Synchronization in distributed systems Synchronization in distributed systems
Synchronization in distributed systems
 
大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)
 
Контекстная реклама от Zebra Telecom
Контекстная реклама от Zebra TelecomКонтекстная реклама от Zebra Telecom
Контекстная реклама от Zebra Telecom
 
Representation of class
Representation of classRepresentation of class
Representation of class
 
250 th
250 th250 th
250 th
 
Tiago Peixoto: Pessimism of the Intellect and Open Government
Tiago Peixoto: Pessimism of the Intellect and Open GovernmentTiago Peixoto: Pessimism of the Intellect and Open Government
Tiago Peixoto: Pessimism of the Intellect and Open Government
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled Presentation
 
Aunties power point ECMM
Aunties power point ECMMAunties power point ECMM
Aunties power point ECMM
 
HeroLympics Eng V03 Henk Vd Valk
HeroLympics  Eng V03 Henk Vd ValkHeroLympics  Eng V03 Henk Vd Valk
HeroLympics Eng V03 Henk Vd Valk
 
Pembelajaran elektronik kelompok x
Pembelajaran elektronik kelompok xPembelajaran elektronik kelompok x
Pembelajaran elektronik kelompok x
 
Interfaccia, tra uomini, macchine, programmi: giochi e videogiochi
Interfaccia, tra uomini, macchine, programmi: giochi e videogiochiInterfaccia, tra uomini, macchine, programmi: giochi e videogiochi
Interfaccia, tra uomini, macchine, programmi: giochi e videogiochi
 
Strategies to Enhance Pedestrian Safety: From Theory to Practice
Strategies to Enhance Pedestrian Safety: From Theory to PracticeStrategies to Enhance Pedestrian Safety: From Theory to Practice
Strategies to Enhance Pedestrian Safety: From Theory to Practice
 
YouTube presentación
YouTube presentaciónYouTube presentación
YouTube presentación
 

Similar to Cdc@ganji.com

Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
大型系统的Java中间件实践q con北京
大型系统的Java中间件实践q con北京大型系统的Java中间件实践q con北京
大型系统的Java中间件实践q con北京vanadies10
 
王龙:百度数据库架构演变与设计
王龙:百度数据库架构演变与设计王龙:百度数据库架构演变与设计
王龙:百度数据库架构演变与设计YANGL *
 
Delta Lake Architecture: Delta Lake + Apache Spark Structured Streaming
Delta Lake Architecture: Delta Lake + Apache Spark Structured StreamingDelta Lake Architecture: Delta Lake + Apache Spark Structured Streaming
Delta Lake Architecture: Delta Lake + Apache Spark Structured StreamingXiao Li
 
百度分布式数据实践与进展
百度分布式数据实践与进展百度分布式数据实践与进展
百度分布式数据实践与进展yp_fangdong
 
淘宝对象存储与Cdn系统到服务
淘宝对象存储与Cdn系统到服务淘宝对象存储与Cdn系统到服务
淘宝对象存储与Cdn系统到服务drewz lin
 
Taobao图片存储与cdn系统到服务
Taobao图片存储与cdn系统到服务Taobao图片存储与cdn系统到服务
Taobao图片存储与cdn系统到服务Wensong Zhang
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析George Ang
 
Key value store
Key value storeKey value store
Key value storexuanhan863
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijingdrewz lin
 
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页liu sheng
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统智杰 付
 
淘宝图片存储与Cdn系统
淘宝图片存储与Cdn系统淘宝图片存储与Cdn系统
淘宝图片存储与Cdn系统Dai Jun
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Wensong Zhang
 
Taobao 海量图片存储与CDN系统02
Taobao 海量图片存储与CDN系统02Taobao 海量图片存储与CDN系统02
Taobao 海量图片存储与CDN系统02lovingprince58
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Michael Zhang
 
开源+自主开发 - 淘宝软件基础设施构建实践
开源+自主开发  - 淘宝软件基础设施构建实践开源+自主开发  - 淘宝软件基础设施构建实践
开源+自主开发 - 淘宝软件基础设施构建实践Wensong Zhang
 
百度 刘宁 系统也智慧
百度 刘宁 系统也智慧百度 刘宁 系统也智慧
百度 刘宁 系统也智慧guiyingshenxia
 
deep inside Sina App Engine cloud service
deep inside Sina App Engine cloud servicedeep inside Sina App Engine cloud service
deep inside Sina App Engine cloud servicecong lei
 

Similar to Cdc@ganji.com (20)

Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
大型系统的Java中间件实践q con北京
大型系统的Java中间件实践q con北京大型系统的Java中间件实践q con北京
大型系统的Java中间件实践q con北京
 
王龙:百度数据库架构演变与设计
王龙:百度数据库架构演变与设计王龙:百度数据库架构演变与设计
王龙:百度数据库架构演变与设计
 
Delta Lake Architecture: Delta Lake + Apache Spark Structured Streaming
Delta Lake Architecture: Delta Lake + Apache Spark Structured StreamingDelta Lake Architecture: Delta Lake + Apache Spark Structured Streaming
Delta Lake Architecture: Delta Lake + Apache Spark Structured Streaming
 
百度分布式数据实践与进展
百度分布式数据实践与进展百度分布式数据实践与进展
百度分布式数据实践与进展
 
淘宝对象存储与Cdn系统到服务
淘宝对象存储与Cdn系统到服务淘宝对象存储与Cdn系统到服务
淘宝对象存储与Cdn系统到服务
 
Taobao图片存储与cdn系统到服务
Taobao图片存储与cdn系统到服务Taobao图片存储与cdn系统到服务
Taobao图片存储与cdn系统到服务
 
Erlang and HTML5
Erlang and HTML5Erlang and HTML5
Erlang and HTML5
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析
 
Key value store
Key value storeKey value store
Key value store
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijing
 
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统
 
淘宝图片存储与Cdn系统
淘宝图片存储与Cdn系统淘宝图片存储与Cdn系统
淘宝图片存储与Cdn系统
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统
 
Taobao 海量图片存储与CDN系统02
Taobao 海量图片存储与CDN系统02Taobao 海量图片存储与CDN系统02
Taobao 海量图片存储与CDN系统02
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统
 
开源+自主开发 - 淘宝软件基础设施构建实践
开源+自主开发  - 淘宝软件基础设施构建实践开源+自主开发  - 淘宝软件基础设施构建实践
开源+自主开发 - 淘宝软件基础设施构建实践
 
百度 刘宁 系统也智慧
百度 刘宁 系统也智慧百度 刘宁 系统也智慧
百度 刘宁 系统也智慧
 
deep inside Sina App Engine cloud service
deep inside Sina App Engine cloud servicedeep inside Sina App Engine cloud service
deep inside Sina App Engine cloud service
 

Cdc@ganji.com

  • 3. 1 关于异构数据同步
  • 4. LAMP架构面临的挑战 性能提升 Caching 多平台 Key-Value web/wap/mobile Indexing 社交化(SNS) OLAP 离线/实时统计分析 Graph DB 数据挖掘 BigTable 多机房 ...
  • 5. Not Only SQL! MySQL的优势 放弃MySQL的障碍 ACID 大量业务代码 查询功能强大 熟悉的开发模式 成熟的运维方案 人员储备 技术风险 如何保证数据的同步?
  • 6. 应用层解决... 在业务代码中维护 缺点 多写 代码复杂,维护困难 消息中间件异步处理 工作量大,效率下降 简单,灵活 容易引入BUG 容错能力差 分布式事务? 开发效率? 服务化?
  • 7. 系统层面... 方案 项目 PHP mysqlnd Language API JDBC MySQL Proxy Data Middleware Vitess MySQL Trigger + UDF Flexviews MySQL Binlog Parser Amoeba JBinlog
  • 9. Change Data Capture 数据库级别实现的增量抽取解决方案 监视表的数据变化。 改善ETL的效率。 为检索系统提供数据更新。 实现第三方的数据同步。 提供外部的数据触发操作。
  • 10. 2 Tungsten Replicator介绍
  • 11. tungsten-replicator Data replication engine for MySQL Easy failover Multiple masters Multiple sources to a single slave Parallel replication Replicate to Oracle and PostgreSQL O'Reilly MySQL Application of the Year 2011 http://code.google.com/p/tungsten-replicator/
  • 12. Key Points Transaction History Logs (THL) Global Transaction ID Metadata Service Database
  • 14. 扩展 MCQueueApplier Inspired by MongoDBApplier https://github.com/tailorcai/tungsten-queue-applier
  • 15. 实现细节 MySQL 编码(JSON) Row Based Replication Meta: Schema,Table Kestrel Action: Insert/Update/Delete Memcache Protocol Row Data High Performance Persistence Fan-out Queue Tungsten Reliable Get ReplicationFilter https://github.com/robey ColNamesFilter /kestrel
  • 16. 优化配置 Replication Queue extractor ColNames Applier Extractor Filter Applier Kestre MySQL Queue 独立服务器 BinLog “Trigger” Server No THL
  • 17. 3 赶集网CDC项目实践
  • 18. Availability? 需求 服务崩溃 MySQL 数据重复 Tungsten Kestrel 乱序? 数据丢失 Hardware 网络故障 对业务透明 自动响应 数据丢失 同步延迟
  • 19. Master/Slave CDC Master switcher MySQL 应用逻辑 Master CDC Slave 根据延迟信息进行切换
  • 20. Master/Slave 2 P1 P2 P3 P4 P5 P6 P1 P7 P2 P3 ... P1 P2 P3 P4 P5 P6 P1 P7 P2 P3 ... 更新数据流
  • 21. Master/Slave 2 block1 block2 P1 P2 P3 P4 P5 H1 P6 P1 P7 P2 … P3 P1 P2 P3 P4 P5 H1 P6 P1 P7 P2 … P3 SN: 100 Timestamp: 13000000 Delay=now() - timestamp 定时更新heartbeat表,生成heartbeat数据 以Block为单位进行切换 Master处理完成一个Block后,通知Slave处理该Block 切换时,Slave重放当前Block,确保数据不丢失
  • 22. Zookeeper 信息 格式 描述 配置 主CDC服务器地址 启动,切换 从CDC服务器地址 Switcher进程 0 – 主处理进程HOST:PID 任务分配 1 – 从处理进程HOST:PID 2 - 备份进程 HOST:PID 处理状态 主CDC 状态监控 Block SN 同步 最新的timestamp
  • 23. 优点 实时 高可用 系统延时 <100ms 可用于线上业务 独立性 对线上业务的非侵入性 可移植性 事务友好 灵活 支持多库,多表 同时支持多种后端应用,互相独立 数据一致性 数据随意组合 与DB保持严格一致 数据可以回放
  • 24. CDC的运维和监控 DBA要注意 批量更新一定加Limit 数据分片<5W 插入sleep,缓解延迟影响 注意BinLog 滚动 编码方式 监控和报警(zabbix...) 主从同步状态 延迟(MySQL,CDC)
  • 25. 4 CDC在赶集的应用案例
  • 26. Indexing & Caching 分类信息 写 MySQL CDC 读 Searcher Xapian Indexer Data Memcache 批量数据更新?
  • 27. 跨机房同步 App 主机房A 延迟不一致 Master Message 产生数据错误 Queue DB MQ Search/Cache Slave DB App 机房B
  • 28. 跨机房同步 主机房A 部署新机房 <2个月 代码修改工作量<1人月 Master 没有延迟同步问题 DB Slave DB Search/Cache CDC 机房B
  • 29. 数据迁移 场景 优点 表结构调整 不需要修改现有业务 存储调整 不需要修改表结构 异构数据库 停服时间短 MySQL → NoSQL 关键点 如何获取增量数据 如何较少开发的工作量 如何减少停服时间
  • 30. 更多... 更新客户信息 Call Center 支付及收入 ERP 数据更新历史记录 Data + Version 数据校验
  • 31. 计划 ... 应用开发 历史数据回放/全量数据抽取 更友好的API接口及订阅功能 多种数据一致性保证 系统 Tungsten 2.0.5 JSON to BSON Int64? Binary? 故障自动切换
  • 33. 谢谢! Questions? We are hiring... PHP研发工程师 WEB前端研发工程师