那会儿写系统就像把一大盘菜端到饭桌上,指望厨师端上来就能直接下肚。系统一大了,数据量像洪水冲垮堤坝,运维团队得围在服务器旁边,拿着日志本和监控大屏,生怕哪一行报错是业务逻辑不对,哪一行是网络抖动。

那时候架构就是那种巨无霸,代码长得像藤蔓一样缠绕,改一个接口要改两天,还要预约下周一才能上线。大家见面都累得气喘吁吁,生怕哪位把根目录给改了,最终搞出个回环引用。 那时候的架构讲究“大一统”,就像盖一座楼,大家轮流搬砖,哪位想不想早点完工?一旦领导来了,可能就要推倒重来,重新规划一层,就连把地基都挖了。

这种模式到了数据量上来之后就彻底崩了,遇到一次大规模宕机,整个系统都得拉闸断电,排查缘由得钻代码里找断点,就像在沙漠里找水源,干等了半天,可能半天前几公里就被沙埋了,根本定位不到源头。 后来有人启动动脑子,启动尝试把一个大系统拆成几个小模块,拿个扳手狠狠掰开。便出现了微服务。但这玩意儿并不是说把一个大包拆成几十个小包那么好办,得把各个包都喂给不同的机器,再让它们各自呼吸。

这时候就得找对老板——你得找到够硬气的老板,愿意给你授权,哪怕你折腾一点,他都得给你撑腰。 刚启动去混的时候,老板一脸严肃:“你这方案有点漏洞,数据务必在一台机器上跑,要么用共享内存,否则数据敢动一动就掉链子。小微服务别看看着撇脱,但一旦网络断了,数据全白跑了,责任哪位的,怪哪位?”你得看他脸色,看他的眼神,看他在群里发的消息,然后把你那套“微服务原理”的一套一套地讲给他听,最终还得跟他说:“行行行,您说得对,我们得把数据锁死,不然您这权威就没了。” 等老板点头给了个“能行”的眼神,你再怂一点,说“那咱们就试试只把好办的逻辑切分开,数据存有一起,网络断了就自动聚合并重”。

这时候老板可能还会挑你的刺,说你这种方案性能肯定不中,数据还得依赖外部存,哪儿找的存?这时候你就得再怂一点,就连得说:“老板,这有个大坑,您得签免责协议说您赶明儿出了事不认账,不然我也不敢动。” 等老板签了字,认定这事儿靠谱了,你就启动疯狂造轮子。先把数据库拆成两张表,一主外,那边写数据那边读数据,根本不用碰网络,网络一断数据就自己在数据库里走了一遍。

这时候你要是再敢在代码里埋逻辑判断,老板分分钟把你踢出局,说你这是为了优化而优化,结局数据全丢光了,到时候哪位都别想认领。 为了推行这种方案,你得先搞定团队里最牛的那个“技术大牛”。你得在他面前摆出这个挑战,让他认定这事儿能成。你问他:“能不能让数据独善其身,不用走网络?”他可能冷笑一声:“行啊,你让那 5000 行业务逻辑都粘在数据库里,除了写查询 SQL,连个变量都别动,不然影响性能?”你顺着他的话说:“那自然,那也叫 OAM,独立的数据计算(Orchestrator And Managed)。” 这时候你得先给团队定个规矩,哪位要是再敢在数据库里写业务逻辑,直接开除,然后让他去负责重构。你得让他知道,这是生死线,一旦数据丢了要么网络断了,他得负责把数据捞回来,还得保证所有数据都一致。你得把他培养成你新的“超级胶水”,能搞定各种乱七八糟的数据,能应付各种网络波动。 等你团队练熟了,启动改造真正的业务逻辑,比如订单系统,你想把支付逻辑切出去,变成个独立的微服务,这时候你得先搞定那个支付系统的老板。你得跟他说:“支付数据要是走了外部数据库,万一网络延迟要么数据库挂了,订单就丢号了,您得答应我,数据务必要在本地计算,要么走内部消息队列,不能直接写数据库。”他可能一启动还会认定不对劲:“那你说如何保证账目对得上?”你告诉他:“那得靠你们的系统自己保证,你们系统内部逻辑务必闭环,不能有任何外部依赖,不然哪位负责?” 当支付系统也认怂,认定这事儿不能搞,那你就只能把订单系统也卷进去。

这时候你得把那些原本归于订单服务的复杂业务逻辑,像拆积木一样拆下来,一个个塞进几个独立的服务里。 在这个过程中,你会发现微服务没那么美好。网络间或会丢包,这时候你得让数据在本地跑了一圈再回来,哪怕慢一点也没关系。代码量爆炸了,开发速度反而变慢了,出于要处理那种跨服务的调用,一个函数调用可能就是五六个服务,还要寻思网络延迟。

有时候还得手動修复网络难题,坏了还得自己去找服务器重启。 但好在,最终这东西还是得要用的,并且用的越来越顺手。数据不再是一锅粥,而是装在几个桶里,每个桶里只装一种东西。你只需求负责通知那个桶,哪位有数据,把数据扔那会儿就行,其他的服务互不干扰,别看间或也会堵一下。 目前回想起来,那时候那些大系统,哪一个不是靠这种“独善其身”的逻辑支撑起来的?数据能不能走网络,是运营团队的事;数据能不能算在本地,是运维团队的事。

只有你想往系统里塞逻辑判断,想随意改改数据格式,那才是大难题。 故此微服务化,本质不是要把一个大系统切成无数个零散的小包,而是把管住权还给业务,让每个包都能独当一面。别看过程中充满了坑,充满了需求靠关系、靠政治智慧去解决的技术债,但它确实让系统变得不再那么脆弱,也不那么臃肿。

说到底,就是要把那些该想到的都想到,该断的断断,该锁的锁锁,让数据在本地也能跑满,让网络断了也没多少损失。

这才是微服务该有的样子。