缓存、数据库源码开源

【Canal源码分析】整体架构

2018-05-30  本文已影响231人  端木轩

本文详解canal的整体架构。

一、整体架构

canal架构图.png canal架构图2.png

说明:

instance模块:

二、各模块架构

2.1 Parser

EventParser架构.png

整个parser过程大致可分为几步:

2.2 Sink

Sink.png

说明:

1 数据1:n业务 :

为了合理的利用数据库资源, 一般常见的业务都是按照schema进行隔离,然后在mysql上层或者dao这一层面上,进行一个数据源路由,屏蔽数据库物理位置对开发的影响,阿里系主要是通过cobar/tddl来解决数据源路由问题。 所以,一般一个数据库实例上,会部署多个schema,每个schema会有由1个或者多个业务方关注。

2 数据n:1业务:

同样,当一个业务的数据规模达到一定的量级后,必然会涉及到水平拆分和垂直拆分的问题,针对这些拆分的数据需要处理时,就需要链接多个store进行处理,消费的位点就会变成多份,而且数据消费的进度无法得到尽可能有序的保证。 所以,在一定业务场景下,需要将拆分后的增量数据进行归并处理,比如按照时间戳/全局id进行排序归并.

2.3 Store

目前实现了Memory内存、本地file存储以及持久化到zookeeper以保障数据集群共享。
Memory内存的RingBuffer设计:

store ringBuffer.png

定义了3个cursor

借鉴Disruptor的RingBuffer的实现,将RingBuffer拉直来看:

store ringBuffer2.png

实现说明:

Put/Get/Ack cursor用于递增,采用long型存储
buffer的get操作,通过取余或者与操作。(与操作: cusor & (size – 1) , size需要为2的指数,效率比较高)

上一篇 下一篇

猜你喜欢

热点阅读