范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Canal组件简介与vivo账号实践

  昨天推荐了vivo的架构探索中有对canal的简单介绍,但是我发现对一些细节问题没有说,这个就对Canal的讨论了
  互联网应用随着业务的发展,部分单表数据体量越来越大,应对服务性能与稳定的考虑,有做分库分表、数据迁移的需要,本文介绍了vivo帐号应对以上需求的实践。
  一、前言
  Canal 是阿里巴巴开源项目,关于什么是 Canal?又能做什么?我会在后文为大家一一介绍。
  在本文您将可以了解到vivo帐号使用 Canal 解决了什么样的业务痛点,基于此希望对您所在业务能有一些启示。
  二、Canal介绍
  1. 简介
  Canal [kə"næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
  早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
  2. 工作原理
  2.1 MySQL 主备复制原理
  Canal最核心的运行机制就是依赖于MySQL的主备复制,我们优先简要说明下MySQL主备复制原理。
  MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)。
  MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)。
  MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据。
  2.2 MySQL Binary Log介绍
  MySQL-Binlog是 MySQL 数据库的二进制日志,用于记录用户对数据库操作的SQL语句(除了数据查询语句)信息。
  如果后续我们需要配置主从数据库,如果我们需要从数据库同步主数据库的内容,我们就可以通过 Binlog来进行同步。
  2.3 Canal 工作原理
  Canal 模拟MySQL slave的交互协议,伪装自己为MySQL slave,向MySQL master发送dump协议。
  MySQL master收到dump请求,开始推送binary log给slave(也就是Canal)。
  Canal 解析 binary log 对象(原始为byte流)。
  Canal 把解析后的 binary log 以特定格式的进行推送,供下游消费。
  2.4 Canal 整体架构
  说明: server 代表一个canal运行实例,对应于一个jvm instance 对应于一个数据队列 (1个server对应1..n个instance)
  instance模块: EventParser (数据源接入,模拟slave协议和master进行交互,协议解析)
  与数据库交互模拟从库,发送dump binlog请求,接收binlog进行协议解析并做数据封装,并将数据传递至下层EventSink进行存储,记录binlog同步位置。 EventSink (Parser和Store链接器,进行数据过滤,加工,分发的工作)
  数据过滤、数据归并、数据加工、数据路由存储。 EventStore (数据存储)
  管理数据对象存储,包括新binlog对象的写入管理、对象订阅的位置管理、对象消费成功的回执位置管理。 MetaManager (增量订阅&消费信息管理器)负责binlog对象整体的发布订阅管理器,类似于MQ。
  2.5 Canal 数据格式
  下面我们来一起看下Canal内部封装的 Binlog对象格式,更好的理解 Canal。
  Canal能够同步 DCL、 DML、 DDL。
  业务通常关心 INSERT、 UPDATE、 DELETE引起的数据变更。
  EntryProtocol.proto  Entry     Header         logfileName [binlog文件名]         logfileOffset [binlog position]         executeTime [binlog里记录变更发生的时间戳]         schemaName [数据库实例]         tableName [表名]         eventType [insert/update/delete类型]     entryType   [事务头BEGIN/事务尾END/数据ROWDATA]     storeValue  [byte数据,可展开,对应的类型为RowChange]   RowChange     isDdl       [是否是ddl变更操作,比如create table/drop table]     sql     [具体的ddl sql]     rowDatas    [具体insert/update/delete的变更数据,可为多条,1个binlog event事件可对应多条变更,比如批处理]         beforeColumns [Column类型的数组]         afterColumns [Column类型的数组]   Column     index       [column序号]     sqlType     [jdbc type]     name        [column name]     isKey       [是否为主键]     updated     [是否发生过变更]     isNull      [值是否为null]     value       [具体的内容,注意为文本]
  (滑动可查看)
  2.6 Canal 示例 demo
  下面我们通过实际代码逻辑的判断,查看 Binlog解析成Canal 对象的数据模型,加深理解
  insert 语句
  delete语句
  update语句
  2.7 Canal HA 机制
  线上服务的稳定性极为重要,Canal是支持HA的,其实现机制也是依赖Zookeeper来实现的,与HDFS的HA类似。
  Canal的HA分为两部分,Canal server和Canal client分别有对应的HA实现。 Canal Server: 为了减少对mysql dump的请求,不同server上的instance要求同一时间只能有一个处于running,其他的处于standby状态。
  Canal Client: 为了保证有序性,一份instance同一时间只能由一个canal client进行get/ack/rollback操作,否则客户端接收无法保证有序。
  依赖Zookeeper的特性(本文不着重讲解zookeeper特性,请在网络上查找对应资料): Watcher机制  EPHEMERAL节点(和session生命周期绑定)
  大致步骤:
  Canal server要启动某个canal instance时都先向zookeeper进行一次尝试启动判断 (实现:创建EPHEMERAL节点,谁创建成功就允许谁启动)。
  创建 ZooKeeper节点成功后,对应的Canal server就启动对应的Canal instance,没有创建成功的Canal instance就会处于standby状态。
  一旦ZooKeeper发现Canal server A创建的节点消失后,立即通知其他的Canal server再次进行步骤1的操作,重新选出一个Canal server启动instance。
  Canal client每次进行connect时,会首先向ZooKeeper询问当前是谁启动了Canal instance,然后和其建立链接,一旦链接不可用,会重新尝试connect。
  2.8 Canal 使用场景
  上面介绍了Canal 的原理与运行机制,下面我们从实际场景来看,Canal 能够为我们业务场景解决什么样的问题。
  2.8.1 不停服迁移
  业务在发展初期,为了快速支撑业务发展,很多数据存储设计较为粗放,比如用户表、订单表可能都会设计为单表,此时常规手段会采用分库分表来解决容量和性能问题。
  但数据迁移会面临最大的问题:线上业务需要正常运行,如果数据在迁移过程中有变更,如何保证数据一致性是最大的挑战。
  基于Canal,通过订阅数据库的 Binlog,可以很好地解决这一问题。
  可详见下方vivo帐号的不停机迁移实践。
  2.8.2 缓存刷新
  互联网业务数据源不仅仅为数据库,比如 Redis 在互联网业务较为常用,在数据变更时需要刷新缓存,常规手段是在业务逻辑代码中手动刷新。
  基于Canal,通过订阅指定表数据的Binlog,可以异步解耦刷新缓存。
  2.8.3 任务下发
  另一种常见应用场景是"下发任务",当数据变更时需要通知其他依赖系统。
  其原理是任务系统监听数据库变更,然后将变更的数据写入MQ/Kafka进行任务下发。
  比如帐号注销时下游业务方需要订单此通知,为用户删除业务数据,或者做数据归档等。
  基于Canal可以保证数据下发的精确性,同时业务系统中不会散落着各种下发MQ的代码,从而实现了下发归集,如下图所示:
  2.8.4 数据异构
  在大型网站架构中,数据库都会采用分库分表来解决容量和性能问题,但分库分表之后带来的新问题。
  比如不同维度的查询或者聚合查询,此时就会非常棘手。一般我们会通过数据异构机制来解决此问题。
  所谓的数据异构,那就是将需要join查询的多表按照某一个维度又聚合在一个DB中。
  基于Canal可以实现数据异构,如下图示意:
  3、Canal 的安装及使用
  Canal的详细安装、配置与使用,请查阅官方文档 >> 链接
  三、帐号实践
  1、实践一:分库分表
  1.1 需求
  难点:
  表数据量大,单表3亿多。
  常规定时任务迁移全量数据,时间长且对业务有损。
  核心诉求:
  不停机迁移,最大化保证业务不受影响
  "给在公路上跑着的车换轮胎"
  1.2 迁移方案
  1.3 迁移过程
  整体过程大致如下:
  分析帐号现有痛点 单表数据量过大:帐号单表3亿+  用户唯一标识过多  业务划分不合理
  确定分库分表方案
  存量数据迁移方案
  使用传统的定时任务迁移,时长过长,且迁移过程中为了保证数据一致性,需要停机维护,对用户影响较大。
  确定使用canal进行迁移,对canal做充分调研与评估,与中间件及DBA共同确定,可支持全量、以及增量同步。
  迁移过程通过开关进行控制,单表模式 → 双写模式 → 分表模式。 数据迁移周期长,迁移过程中遇到部分未能预估到的问题,进行了多次迁移。 迁移完成后,正式切换至双写模式,即单表及分表同样写入数据,此时数据读取仍然在单表模式下读取数据,Canal仍然订阅原有单表,进行数据变更。 运行两周后线上未产生新问题,正式切至分表模式,此时原有单表不再写入数据,即单表不会再有新的Binlog产生,切换后线上出现了部分问题,即时跟进处理,"有惊无险"。
  2、实践二:跨国数据迁移
  2.1 需求
  在vivo海外业务开展初期,海外部分国家的数据存储在中立国新加坡机房,但随着海外国家法律合规要求越来越严格,特别是欧盟地区的GDPR合规要求,vivo帐号应对合规要求,做了比较多的合规改造工作。
  部分非欧盟地区的国家合规要求随之变化,举例澳洲当地要求满足GDPR合规要求,原有存储在新加坡机房的澳洲用户数据需要迁移至欧盟机房,整体迁移复杂度增加,其中涉及到的难点有: 不停机迁移,已出货的手机用户需要能正常访问帐号服务。  数据一致性,用户变更数据一致性需要保证。  业务方影响,不能影响现网业务方正常使用帐号服务。
  2.2 迁移方案
  2.3 迁移过程
  在新加坡机房搭建备库,主从同步 Binlog。 搭建 Canal 的server及client端,同步订阅消费Binlog。 client端基于订阅的Binlog进行解析,将数据加密传输至欧盟GDPR机房。 欧盟应用数据解析传输的数据,落地存储。 数据同步完成后运维同事协助将上层域名的DNS解析转发至欧盟机房,完成数据切换。 观察新加坡机房Canal服务运行情况,没有异常后停止Canal服务。 通过业务方,帐号侧完成切换。 待业务方同步切换完成后,将新加坡机房的数据清除。
  3、经验总结
  1.1 数据序列化
  Canal底层使用protobuf作为数据数据列化的方式,Canal-client在订阅到变更数据时,为null的数据会自动转换为空字符串,在ORM侧数据更新时,因判断逻辑不一致,导致最终表中数据更新为空字符串。
  3.2 数据一致性
  帐号本次线上Canal-client只有单节点,但在数据迁移过程中,因业务特性,导致数据出现了不一致的现象,示例大致如下: 用户换绑手机号A。  Canal此时在还未订阅到此 Binlog position。  用户又换绑手机号B。  在对应时刻,Canal消费到更新手机号A的Binlog,导致用户新换绑的手机号做了覆盖。
  3.3 数据库主从延时
  出于数据一致性地考虑(结合帐号业务数据未达到需要分库的必要性),帐号分表在同一数据库进行,即迁移过程中分表数据不断地进行写入,加大数据库负载的同时造成了从库读取延时。
  解决方案:增加速率控制,基于业务的实际情况,配置不同的策略,例如白天业务量大,可以适当降低写入速度,夜间业务量小,可以适当提升写入速度。
  3.4 监控告警
  在整体数据迁移过程中,vivo帐号在client端增加了实时同步数据的简易监控手段,即基于业务表基于内存做计数。
  整体监控粒度较粗,包括以上数据不一致性,在数据同步完成后,未能发现异常,导致切换至分表模式下出现了业务问题,好在逻辑数据可以通过补偿等其他手段弥补,且对线上数据影响较小。
  四、拓展思考
  1、现有问题分析
  以上是基于 Canal现有架构画出的简易图,虽然基于HA整体高可用,但细究后还是会发现一些隐患,其中标记红色X的节点,可以视为可能出现的故障点。
  2、通用组件复用
  基于以上可能出现的问题点,我们可以尝试做上图中的优化。
  3、延展应用-多数据中心同步
  在互联网行业,大家对"异地多活"已经耳熟能详,而数据同步是异地多活的基础,所有具备数据存储能力的组件如:数据库、缓存、MQ等,数据都可以进行同步,形成一个庞大而复杂的数据同步拓扑,相互备份对方的数据,才能做到真正意义上"异地多活"。
  本逻辑不在本次讨论范围内,大家可以参阅以下文章内容,笔者个人认为讲解较为详细
  http://www.tianshouzhi.com/api/tutorials/canal/404
  五、参考资料
  https://github.com/alibaba/canal https://github.com/alibaba/otter
  来自:vivo的技术团队
  原链接:https://mp.weixin.qq.com/s/X1OFhjpHZSuIMr5PmxXBRQ

米莎重回OG担任教练,DOTA命中不可缺少OG队长米莎在击败CG战队后接受媒体采访。在接受采访时,他谈到了他与GC的比赛以及他在2021年TI10担任教练的经历。说起CG,他没想到这个结果。现在每支球队都想击败对手,每个人王者荣耀玩家晒出老图,初代杨玉环颜值天花板,老版韩信帅过李白随着王者荣耀的发展,峡谷中的英雄越来越多,并且伴随版本的更新,大量的英雄无法适应当前赛季的节奏和需求,都被重做更新甚至是优化。一些英雄初始的样子已经逐渐被玩家所遗忘,近日有玩家晒出盘点王者荣耀中那些适合配合闪现来释放技能的英雄王者荣耀中有很多英雄,可以使用技能在蓄力之后打出爆炸伤害。但是缺点就是在技能蓄力的时候不能位移,那么这个时候配合闪现来使用就可以打出很好的效果。今天我们就来盘点一下那些适合配合闪现最新资讯!天美公布S26赛季皮肤王者营地三周年活动记得参加距离S26新赛季越来越近了,官方也开始爆料新皮肤啦!就在刚刚,官方首先爆料的就是S26赛季皮肤的归属并不是黄忠,而是给到了达摩。随老叔一起看看今天的最新资讯吧!这个消息是由王者荣耀王者荣耀英雄的前世今生国士无双韩信篇人可以忍受屈辱到什么时候?答案是并不能忍受多久。对于一个余孽来说,生存太过艰难。韩信不想死。他想继续活下去。所以他并不是忍受,而是选择。他选择的也不是屈辱,而是生存。因此,当年轻的机甲SRPGRelayer定于明年3月24日发布,PS4版可免费升级到PS5文MarkRelayer近日,角川游戏在一份新闻稿中宣布即将推出的机甲SRPGRelayer(PS5PS4)将于2022年3月24日在全球(包括日本)发布。这一决定是为了让游戏的日世嘉如龙0将离开XGP!如龙012即将退出Gamepass服务微软GamePass订阅服务中常常会添加一些新的游戏供订阅者游玩,不过这不是永久性的,在一段时间后,有的游戏就会推出GamePass服务。最近,世嘉旗下如龙系列的0极1和极2三款游热血传奇页游传奇的兴起随着时间推移,我们来到2001年,那年11月,传奇由盛大从韩国wemade公司引入中国。在当时国内网游不发达的时候,传奇可以说是引爆了国内网游的热潮,还让中国网游从零基础开始进入了幻塔第一代执行者来了,曾是首席身份,能和斯嘉丽打平手?这几天玩幻塔,大家有没有眼馋过艾达之子的几个赦免天使?最早是拿着紫红色长刀的斯嘉丽,后来是半机甲装备出场的伊希斯,都给人一种很强的感觉。从早期官方发布的PV来看,完成改造后的奈美西怒火一刀热血传奇洗点水怎么获得逆世战神传奇手游洗点水获得攻略哈喽,大家好呀,我是钟爱传奇的传奇老玩家小彤呀,欢迎来到小彤的传奇之路。今天给小伙伴们带来的是关于怒火一刀三职业传奇手游的相关攻略哦。怒火一刀的洗点水不知道小伙伴们有没有听过,我们吕德华成虎牙2哥后,率神鸡营进KPI杯决赛,直播装菜比赛乱杀时下王者荣耀仍然是最为火爆的一款手游,而作为5V5的Moba游戏,组排要比单排更加有趣,同时也更为考验玩家的实力。因此在王者荣耀圈除了职业队以外,主播路人大神也会经常通过关系网或者
更新后琴女Debuff消失,73胜率怪物出来了LOL里的极地大乱斗这张地图是很多休闲玩家的最爱。这个地图和召唤师峡谷生态不一样,因为其狭窄的地图和无法回城补给的特色,以及更快的节奏,在这里面很多英雄的表现是和召唤师峡谷天差地别S12赛季法强破千有多难?不靠风暴聚集和大小龙,仅3位英雄能做到目前英雄联盟已经来到了11。24版本,在当前版本中又有两件AP装备的法强迎来了下调,破碎王后之冕降低了10点,星界驱驰降低了10点(对比S11赛季末降低15点),除此之外,法穿棒大暗黑破坏神不朽阵营系统永恒纷争(一)如何加入暗影会大家好,暗黑破坏神不朽中,存在两大阵营,不朽者和暗影会而玩家一开始是没有阵营的冒险者,那么如何加入阵营,阵营系统又有哪些新的玩法和奖励呢,快来跟大锤一起看看吧。本文将介绍如何加入暗陈欧旗下共享充电现身鱿鱼游戏,想不到这才是绝招?如果要问最近有什么热剧流行,韩剧鱿鱼游戏绝对位列第一。除了多次登上国内微博热搜坐拥15亿阅读量的热度,鱿鱼游戏在国外也是一炮而红。YouTubeIns微博知乎等各大平台上,鱿鱼游戏游戏速递MMORPGVOID的元宇宙世界在一个半死不活的世界上,在冰河时代,被杀手机器人主宰,人类为生存而争先恐后。探索MMORPG开放世界并在史诗般的战场上激战,玩家在这片危险的土地上寻找一席之地时控制和发展角色。你会夹子哥的玩法技巧和出装铭文推荐峡谷夹子拆塔狂魔,提到这两个词,你们最先想到的是谁呢?米莱狄?当然不是啦。他有肉输出还高,能对抗能辅助,拆塔的速度比米莱狄快多啦!小江今天就给小伙伴们带来刘禅的玩法技巧和出装铭文推国产恐怖游戏鬼哭岭官宣跳票还需打磨至明年发售IT之家12月13日消息,今日,国产恐怖解密游戏鬼哭岭的官方制作组在微博发布声明称,由于进度和宣发的问题,该作将推迟到2022年发售。IT之家了解到,官方制作组还称,游戏其实已经即分享几个S12季前赛版本极地大乱斗通用套路玩法分享几个新版本大乱斗通用的套路玩法1冰拳恶魔之拥末日寒冬适用于大部分近战英雄(不分APAD英雄),优点是三件套成型肉的同时输出也不低高,当队伍缺少前排英雄时可以用该出装套路。代表英大话西游2无仙器男人如何玩出高端感觉?装备选择很重要哈喽!小伙伴们大家好,我是一心,很高兴和大家在这里相遇。关于平民和土豪之间的界定,一直是大话2玩家所争论的焦点,如何定义平民和土豪呢?至今没有给到一个合适的答案,有兄弟说看属性来断第五人格IVLZQ状态回暖再拿一分,终于逃离危险区第五人格IVL秋季赛的常规赛阶段已经打了很长时间,尽管在比赛初期阶段的时候,多数队伍的积分差距非常小,但随着比赛次数的不断增加,以及队伍状态的不断调整,一些强队依旧来到了积分榜相对索尼PS4全系主机被破解,PS5也危险IT之家12月14日消息,PlayStation4虽然是索尼的上一代主机,但仍有很多人对其感兴趣。现在有黑客发现了该主机新的漏洞,这个漏洞能够使得所有在9。0及以下固件版本的PS4