Vitalik Buterin:以太坊创始人谈前端架构的分布式事务思维
|
去年二月那场评审会,Vitalik那篇关于前端架构的分布式事务思维,我原以为又是那种「技术正确但没人落地」的玩意儿——结果老王拍着白板说「这不就是优胜劣汰吗?」,空调突然滴水在他刚写的「状态同步」四个字上,他抹了把脸继续说:「前端组件现在跟智能合约似的,谁扛不住高并发谁先死。」 当时会议室里十二个人,七台手机在震。小张的MacBook插着三个扩展坞,投影仪对焦不准,他蹲在地上调了十分钟,最后直接把屏幕怼到我们脸上:「你们看这个转账按钮的埋点数据——上周灰度版本上线后,点击率涨了17%,但转化率跌了23%。」我盯着他屏幕上密密麻麻的漏斗图,突然想起Vitalik那篇文章里说的「前端事务的原子性」——用户点按钮是开始,收到确认弹窗是结束,中间任何一步卡住,整个事务就废了。可现实是,我们连「卡住」的边界都定义不清:是网络延迟300ms算卡?还是后端接口超时算卡?还是前端组件渲染超过500ms算卡?
文章配图,仅供参考 老王把白板笔摔在桌上——那支笔早就没水了,摔出「啪」一声响:「去年Q3我们做那个NFT交易页,前端拆了八个微服务,结果呢?用户点「买入」按钮,前端先调合约接口,再调支付接口,再调通知接口,最后还要更新UI状态——这他妈哪是分布式事务,这是俄罗斯套娃!」他指着小张的漏斗图:「你看转化率跌的那段,正好是我们把「确认弹窗」从前端组件改成独立服务的时候——本来一步到位的事,非要拆成三步,用户等得烦躁,直接关页面了。」我原以为Vitalik说的「优胜劣汰」是指技术选型,结果老王扯到产品逻辑:「前端架构现在跟生态竞争一样,你组件响应慢0.1秒,用户就跑去用竞品了。就像以太坊堵车的时候,大家都往Layer2跑——不是Layer2技术多好,是它活下来了。」他翻出手机里的监控图:「上周五晚高峰,我们主链TPS飙到800,前端组件挂了三个,但用户没感觉——因为失败的事务自动降级到备用节点了。这不就是Vitalik说的「柔性事务」吗?」 桌上那摞打印的需求单没人收,最上面一张是「优化交易确认页动画效果」,优先级标着「P0」。小张冷笑:「这需求在排期表里躺了两个月了——动画效果再炫,用户看不到确认弹窗有个屁用。」他戳着屏幕上的转化率曲线:「你看,每次前端版本更新,转化率都要抖三天——不是我们代码写差了,是用户习惯被训练出来了:新版本=可能出问题,所以他们等别人先试水。」 这让我想起Vitalik那篇文章里举的例子:以太坊升级时,部分节点跑旧版本,部分跑新版本,事务在两个版本间流转,靠的是「兼容层」兜底。我们前端现在不也一样?用户手机里可能装着三个不同版本的APP,浏览器缓存着半个月前的JS文件,后端接口还留着去年双十一的兼容代码——整个系统就是个「分布式兼容层」,谁先扛不住谁先崩。 老王突然站起来,椅子腿在地上划出刺耳的声音:「所以前端架构的分布式事务思维,核心就一句话:别把用户当傻子,他们知道哪个组件更靠谱。」他指着窗外:「你看楼下那家奶茶店,点单小程序卡的时候,用户直接去隔壁买——隔壁的小程序可能更丑,但能下单。这就是优胜劣汰,技术再炫,扛不住流量也是白搭。」 会议室的空调还在滴水,滴在小张的键盘上。他抹了把水,继续说:「所以Vitalik那套东西,落地到前端就是三件事:第一,把事务拆小,小到每个组件能独立处理失败;第二,给每个事务加超时机制,超时就自动回滚;第三,监控每个事务的成功率,成功率低的组件直接降级。」他翻开笔记本:「上周我们试了,把「确认弹窗」从独立服务改回前端组件,转化率回升了12%——不是技术倒退,是用户用脚投票。」 我盯着白板上的「状态同步」四个字,水渍已经干了,但字迹模糊。Vitalik那篇文章里还提到「前端事务的最终一致性」——用户看到的数据可能不是最新的,但最终会一致。可现实是,用户根本不关心「最终」,他们只关心「现在」:现在点按钮有没有反应,现在看到的价格对不对,现在能不能完成交易。你跟他说「稍等,系统在同步」,他早就切换到竞品了。 老王拍了拍我肩膀:「所以别纠结什么分布式事务理论了,就盯两点:第一,用户能不能顺利完成操作;第二,系统能不能扛住流量。做不到这两点,你架构再优雅也是白搭。」他指了指那摞需求单:「就像这个动画效果需求——P0?排期排到下季度吧,先把交易确认页的稳定性提上去。」 散会时,小张把那支没水的白板笔扔进垃圾桶。我捡起来看了看,笔杆上印着「2021年Q4技术峰会纪念品」——原来它已经陪我们熬过三个版本了,就像那些被我们优化掉的前端组件,曾经重要,现在没用,但没人记得为什么存在。 后来我翻Vitalik那篇文章,发现他最后写的是:「分布式系统的本质,是允许部分失败。」可前端架构的失败太显眼了——用户一眼就能看到按钮卡住、页面白屏、弹窗不出现。所以优胜劣汰在这里更残酷:不是你的代码不够好,是用户等不起。 现在每次评审会,我都先问两个问题:这个功能失败了怎么办?用户等不及走了怎么办?如果答案模糊,就直接砍掉——就像老王说的,前端架构的分布式事务思维,不是怎么避免失败,是怎么在失败时让用户感觉不到。 (编辑:草根网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


YOLOv8建站太难?3小时跑通首例——分布式事务专家亲测
那些用Go实现的分布式事务框架



浙公网安备 33038102330471号