
兼容 是对前人努力的尊重 是确保业务平稳过渡的基石 然而 这仅仅是故事的起点
上回书说到这套同步软件跑得快、源支持得多。但说实话,快慢这个事吧,真上了生产你反而没那么在意了。你天天提心吊胆的是另一件事------它哪天不高兴了,给你捅个篓子怎么办。
我先问你们一个问题啊,不用回答,心里想想。一条同步链路,半夜三点断了,早上八点你才发现。这五个小时里,数据是丢了还是没丢?你敢拍胸脯吗?
我是不敢。除非这套东西在设计上就把"断"当成常态来对待。所以这篇我不聊它好的时候,专聊它倒霉的时候。
先说最扎心的:到底会不会丢
领导其实根本不关心你用的什么CDC、什么日志解析,他每次就那一句话,翻来覆去:"那要断了呢?"
最早我还跟人解释一堆原理,后来学乖了,直接画个图。
同步这东西怕的根本不是断。网络嘛,哪有不断的,机房割个光纤、交换机重启一下、目标库打个补丁,太正常了。真正要命的是断了以后你两眼一抹黑,不知道自己干到哪了。重连的时候两种死法:一种胆子大,从老地方又来一遍,好家伙数据全重了;另一种更阴,它自作主张跳过中间那截,悄没声地接着往后跑,表面看一切正常,月底一对账差一片,这种最坑人,因为它不报警啊,你连个查的方向都没有。
KFS处理这个,说白了就是老老实实记账。干到哪儿了,记一个位点,Oracle那边叫SCN,MySQL那边是binlog的位置,反正就是个坐标。关键是这个坐标得写到盘上,不能放内存里------你放内存,机器一重启就归零,那记了等于没记。
我给你们比划一下这个过程,特别好懂。
markdown
跑得好好的: 日志 → 干到100 → 干到200 → 干到300
每干完一段,坐标落一次盘
倒霉时刻: 正处理到263呢,进程没了
但盘上最后一个"确认干完"的坐标是200
重新活过来: 读到坐标200,从这儿接着干
200到263之间:提交过的重新放一遍(有去重,不会重)
没提交的整个扔掉(不允许放半个事务)
263往后:该咋咋
这里头有个地方我得专门拎出来夸,就是坐标是卡着"事务提交"往前挪的,不是读到一条日志就挪一下。啥意思呢,一个事务哪怕改了两百行,它没commit,这个坐标就钉死不动,commit那一下才整体跳过去。这样万一死在半道,目标端绝不可能出现"进去了一百行,另外一百行没了"的灵异场面。
别小看这个。我早年真踩过一个同步工具的坑,它就是按读日志的进度记账的,源库那边一个大事务跑到一半被回滚了,它倒好,回滚之前读到的几十行已经给我塞目标库去了,回滚它没跟上。我擦了一下午屁股。所以现在我看任何同步产品,第一个就问它位点是不是事务级的,不是的话基本免谈。
说到这个我又想起另一档子事,有年帮个客户排查,他们同步天天半夜断,白天自己又好了,邪门得很。查了快一周,最后发现根本不是软件的锅,是他们机房每晚两点做存储快照,那二十分钟磁盘IO被抢得死死的,采集端读日志超时就断了。后来调大了超时、把重连间隔放宽,再把快照时间错开,彻底好了。我说这个啥意思呢,就是同步断流十次里头可能有六次根子不在同步软件本身,在底下的存储、网络、归档配置。你别软件一报错就骂软件,顺着位点、IO、归档日志保留这几样往下摸,往往真凶在更底下。这套位点和重连机制好就好在,哪怕你底下折腾一宿,它恢复以后能自己找准位置接着干,不至于让你一宿的折腾变成数据事故。这个"兜得住别人作的妖"的能力,是我后来越用越觉得踏实的地方。
它自带的那几样保命的东西我也念叨念叨。开机自启,这个真的,平时觉得没啥,等你凌晨被电话喊起来、迷迷糊糊登上去发现服务自己已经拉起来了,你会感谢这个功能的。自动重连,网络抖一下它不寻死觅活,自己憋着劲重试,通了就接着干,类似这么个配法:
properties
retry.enable = true
retry.interval = 5s
retry.max.interval = 60s
retry.max.times = unlimited
connect.timeout = 30s
还有个多实例热备,就是整两套,一套在那儿干活,一套在旁边蹲着,干活那套要是整个没了,蹲着的顶上。
但这里我必须说句扫兴的。这些功能你在PPT上看到的是"支持高可用",落到现实里全看你怎么部署。我亲眼见过一个客户,热备买了,两套实例装同一台物理机上了。我问他你这备的是啥呢,机器一断电俩一起死,这不是热备,这是俩人坐一条船上还互相以为对方带了救生圈。还有脑裂的事,两套都觉得自己是主,都往里写,那场面......所以这种东西,交付前你一定得作一把,真拔电源、真拔网线,亲眼看着它切过去,再说话。功能开关和"真的能用"之间,隔着至少一次故障演练。
然后是我最在意的:它说没丢,我凭什么信
这是我的职业病,改不了。任何同步软件拍胸脯说不丢不重,我心里都打个问号。我只信一样东西------能不能验。
为啥同步链路明明绿着、一条报错没有,两端还能对不上?原因能列一长串。目标库有人手贱改了数据,这个真的天天发生,运维查问题随手update一下忘了where条件,然后装没事人;初始化那会儿漏了几张表;以前某次故障处理完留了个尾巴;目标端有触发器或者外键级联,自己又动了数据;字符集没对齐,写进去看着一样实际变了。你数吧,哪个是同步链路能感知到的?一个都感知不到。链路没报错,跟数据一致,是两码事。
所以校验这块在我心里分量特别重。它有两个点戳我。
一个是不用停机就能核。老办法核数你得锁表或者干脆把同步停了,一张几亿行的表核一天,业务还做不做了。它能在数据还在哗哗变、同步还在跑的情况下,把存量增量一块儿核了。另一个是核完不光告诉你"这几行不一样",它还能自己修,把差异行重新给你对齐。报警和擦屁股是两个境界的事,前者把你从床上喊起来,后者让你压根不用起来。
具体那个链式校验怎么一层层过滤、怎么先粗后精,我前面单独写过一篇,这儿不啰嗦。就说那个思路,我是真喜欢------它不跟你玩蛮力,不是五亿行一行行死磕,是先拿摘要、校验和把本来就一样的大块大块地排除掉,最后只剩那么一点点可疑的,再下死力气精确比对,然后修。五亿行里可能真正不一致的就二十行,结果你为这二十行把五亿行全算了一遍,那不叫严谨,那叫浪费电。
arduino
笨办法: 五亿行 ───→ 五亿次比较,跑到天荒地老
它这个: 先大块摘要筛,99.9%的块直接判"一致"走人
剩下可疑的块,进去按行抠
抠出差异行,自动补
真花力气的就最后那一丢丢
还有个事我特意去翻了资料确认,没看错------这功能是自带的,不要钱。而OGG那边干这个活得靠Veridata,单独一个组件,单独签合同。我不是说谁良心谁黑啊,商业模式不同而已,但你真做预算的时候,大项目里这么个组件的授权费,够你喝好几壶的。一个打包一个单点,这个差别做过采购的都懂。
当然,老规矩,我不会因为它自带就夸。校验这东西水很深,早期我见过太多产品的校验就是个按钮,点一下转圈圈,转完告诉你"一致",你都不知道它比没比内容。有的只比行数------我的哥,行数一样内容不同它也告诉你一致,这有啥用。有的倒是能查出差异,但不管修,甩给你一张几百万行的差异清单让你自己看着办。所以这块别听介绍,你就埋雷:同步跑起来以后,你手动去目标库改几行、删两行、再把一个值改掉,然后跑校验,看它能不能在不停业务的情况下把这些雷全排出来,还能自己填回去。过了这一关,它说的一致才叫可验证的一致,不然都是"我觉得一致"。
最变态的网络,它得能活下来
这个没踩过的人完全没概念,我当年第一次在一个政务项目里见到那个东西的时候,愣了好一会儿。
咱们平时觉得网络嘛,源和目标能连上不就行了。等你进了政务、军工、某些能源央企的环境你再看,那网络限制得能让你怀疑人生。广域网又窄又抖是轻的,中间有网闸、有隔离装置,最绝的是一种单向光闸------物理上就只让数据从里往外一个方向流,回来的通道根本不存在,连根线都没有。你平时写的那些个同步逻辑,这边发一嘟噜、那边回一个"收到"、这边再发下一嘟噜,这套在单向链路上直接就瘫了,因为"收到"那俩字它永远回不来。
资料里倒是都列了,跨广域网、隔离装置、单向光闸、物理隔离、防火墙,都支持。我就盯着单向光闸这个琢磨了半天,因为这个最能看出真功夫。
markdown
咱们熟的: 源端 ←→→→ 目标端 有来有往,发一批等个确认
光闸那套: 源端 ────//▶ 目标端 就一根单向管道,物理上回不来
光闸
改成闷头发,不等回执
目标端自己按事务ID去重、自己排序
你想想,没有回执这事多别扭。发的人不知道对方收没收着,那只能假设可能丢、可能重,于是重复发也没关系,因为接收端自己会去重;顺序乱了也没关系,接收端按事务ID自己排。这一套设计跟普通双向握手完全是两个路子。能在一根物理单向的管道上还保证事务完整、不重不丢,协议层面是重新设计过的,不是加个配置能糊弄的。
我为啥把这个能力看得这么重?因为它是个门票。政务、军工、能源这些行业,信创预算足、对自主可控抠得也最死,人家网络就是这么建的,你的同步软件过不了光闸,连投标那扇门都摸不到。这不是加分项,是入场券,有它你才上桌,没有直接出局。
跟着网络一块儿说的还有加密。资料里写的是国密算法加密传输。这个现在没啥好解释的,密评、合规都在那儿卡着,数据跨网走,必须加密,而且人家认国密那套,你要是只能上国际算法,某些场景就是过不了审。还有个说法叫代码自主率百分之百自研,做安全审查的时候这个是要被问到的,意思是核心那坨东西在自己手里,没有来路不明的黑盒,出事了能从源码层面给你兜底。我也不装,百分之百自研这种话谁家都说,底层难免沾点开源,但核心引擎自主这个,在安全语境里是真有用,不是纯口号。
拉几个同行出来遛遛,我说点可能得罪人的
产品力这东西,自己说自己好不算数,得放一块儿比。资料里有一套竞品对比,但我先把丑话说前头------那是人家卖货视角写的,天生往自己脸上贴金,你要是照着那个对比表下结论,那就跟看着相亲照找对象差不多。我结合自己的理解聊聊,好坏都讲。
先说OGG、Qlik、SharePlex这帮国外的。资料里干脆没把它们叫竞品,叫"被替代对象",这话有点狂但大方向没毛病。人家技术上真不弱,OGG干了多少年了,多少银行运营商的核心系统压在上头,那是真刀真枪喂出来的。客户换它真不是嫌它难用,是信创这阵风刮过来,合规、自主、钱,三座山。KFS对上它们,赢在几件事:自研国密过审没问题;校验自带,OGG那个Veridata得另掏钱;再有就是国产数据库当源头这块------国外软件普遍不怎么搭理国产库,源和目标两头都不怎么支持,这是人家的盲区,而KFS本来就是这个坑里长出来的。但是啊,你让我说OGG在那些个犄角旮旯的老版本兼容、奇奇怪怪的异构组合、几十年攒下来的case上没积累?那是睁眼说瞎话,人家的厚度在那儿,国产要全面撵上,得靠一个一个项目去喂,急不得。所以我的看法是,纯信创场景天平往KFS这边偏,但你要是个到处都是老古董系统的环境,别想当然,先测。
再就是DSG、英方这种国内专门做数据集成的,这拨才是真对手,正面碰的那种。
头一条,KES当源头。这个有个技术上的门道,KES那个日志格式没对外开放,第三方拿不到规范,你让它怎么解析?只能干瞪眼或者解析得别别扭扭。KFS是一个家族的,内核那边能搭把手,所以KES往外发数据它支持得最顺。这个说白了是生态闭环给的护城河,DSG英方再努力,短期也跨不过去,因为那不是努不努力的事,是人家根本不给你图纸。可是我得补一句公道话,这优势是有条件的------你库里跑的得是KES它才成立,你源和目标全是别家数据库,这条优势当场消失,那时候拼的是通用本事,谁强谁弱得另说。
第二条是KES加KFS一块儿卖的那个联合方案。KES自己内核就能兼容好多种SQL方言,应用迁过来改动小;第三方没这个待遇,只能在同步软件这一层硬做语句转换,转换这活儿在中间层做和在数据库内核里做,效果差着档次呢,这个我前面写SQL Server迁移那篇有体感,硬转总有转不利索的边角。
第三条还是校验,不展开了,前面说透了,不停机能修这块第三方普遍弱。还有什么CMMI几级ITSS几级的,那是投标时候的门槛分,技术党不关心这个,略。
最后是达梦它们自家带的同步工具,DMDRS那个。资料里说了几条我觉得挺实在。一是跨平台,KFS是Java写的,天生哪儿都能跑;DMDRS是C写的,换个操作系统换个CPU,编译适配就够喝一壶,跨平台这事儿基因里吃亏。二是那个方向问题我觉得最微妙------DMDRS不支持KES当源头,但KFS反过来可以把达梦当源头抽。你品品这意味着啥:一个环境里要是好几家数据库混着,KFS更像根中立的水管,谁家的水都能抽;数据库厂商自带的工具呢,天生围着自家孩子转,别人家的库当源头它上不上心,你自己琢磨。
随口归纳下,别当圣旨:
OGG们 厚、稳、贵、信创受限,国产库支持是短板
DSG英方 真对手,通用能力有,但KES源头拿不到图纸
DM自带 跨平台吃亏,偏自家生态,中立性差口气
KFS KES生态里最顺,国产源头广,校验白送,生态外要实测
行了,黑完别人也得黑自己一句。我上面这套对比,你就当成一张"该测什么"的清单,千万别当成结论。它说自己KES源头最顺,你就真搭个KES往外抽压一压;它说别人跨平台不行,你真换台国产芯片机器装一装;它说校验领先,你就真去埋雷。对比表最大的用处是告诉你战场在哪儿,不是告诉你谁赢了。能写进PPT的话谁都会说,数据不会撒谎。
那些降本数字,我是这么看的
资料里还甩了组数字,什么替掉人工脚本省百分之五六十到八十的人力,数据获取从天级变秒级、决策快十倍,还有减少对账错误、库存不准的损失。
这种数字你肯定跟我一样,一看就皱眉。我说说我怎么消化。
天级变秒级,这个我信,而且不是它多神,是路线决定的,批处理它本来就是T+1啊,你凌晨跑一轮,白天看的当然是昨天的数;CDC本来就是日志一动就跟着动,亚秒是这个技术的本分。这一条不算吹牛,是事实陈述。
省人力那个五成到八成,得看你起点。你要是真还停留在养一帮人写脚本、手工导表、月底关起门来对对对的阶段,那上了自动同步确实能砍掉一大批重复活儿,这比例不离谱;可你要是本来就有成熟的数据平台、团队也齐整,那它带来的更多是提效,你别真照着这比例去裁人,要出事的。同一个数字,对不同起点的人含金量完全不一样,宣传材料不会跟你讲这个前提。
至于减少业务损失,这条最没法量化,但我个人觉得最值。我开头不是讲过嘛,月结那天差了几万块、全楼等我一个人找。那次损失的何止那几万块,是财务结账的时间窗口,是业务部门看IT的眼神。同步软件把"数据总是准的"变成一个你不用惦记的底座,它替你挡掉的是那种平时看不见、来一次要命的事故。这东西没发量化成ROI,等你出过一次就懂了。
它还提了句给AI、给数据治理供数据管道。这话搁两年前我觉得是蹭热点,现在我信了。你大模型吹得再凶、AI分析画得再炫,底下数据要是T+1的、是断的、是各系统互相不通的,上面全是空中楼阁,喂进去的是垃圾出来的能是啥。先让数据实时地、通着、干净地流起来,这是所有上层花活儿的地基,越往后越明显。
最后碎碎念两句
你要问我选这种东西到底看啥,我也没啥体系,就几句大白话:好的时候它得快、得什么源都接得住;倒霉的时候它得能接着跑、不能丢;出了岔子它最好能自己闻出来还给你擦干净;最后,它吹的这些得真在大风大浪里滚过,而不是只活在发布会的大屏上。就这么点事。
KFS这几年我用下来,这几条大体是站得住的,但站得住不等于没短板------个别冷门异构组合还得人去补,热备你自己部署错了照样白搭,那些个"对比优势"很多都有"你得用KES"的前提。这些我前面一个字没替它瞒。
工具嘛,说到底就是把你从那种又重复、又危险、还容易背锅的破事里捞出来。我到现在都记得对账对到天亮那个早上的感觉。现在能让数据自己安安静静、准准确确地在系统之间流,我腾出来的脑子能想点正经事,这就够了。