大厂的成功故事剪掉约束条件之后,剩下的轮廓在发光。
"我们上了微服务。"——会议室里,这句话说完,没有人质疑。
这不是段子。就在你身边,无数技术团队正把一套套大名鼎鼎的技术请进自己的系统:微服务、K8s、数据中台、Flink。请的时候没人问为什么,因为它们的名字自带光环。
光环是什么?是"先进"。是简历上写"高并发"三个字时面试官眼里的一亮。是"我们跟大厂对齐了"这句话带来的安全感。规模化工程技术——高并发、大数据、分布式——是软件行业最亮的一圈神光,亮到没人敢问:这束光,照的到底是谁?
先把概念说清楚,否则后面的讨论没有地基。
软件里绝大多数问题,一个简单方案就能解决:存一条数据,开个表;算一个聚合,跑个查询;卖一个商品,扣一下库存。单机、单进程、一把锁,问题本身没有变复杂。
规模化工程技术解决的是另一件事:同一个简单问题,在数据量很大、或者很多人同时使用的时候,原来的方案失效了。
拆开是两个维度:
- 数据量大——空间维度。数据放不下、算不动。单机磁盘 10T,全量数据 100T,怎么办?于是有了分库分表、分布式计算。
- 同时用的人多——时间维度。同一时刻一万人抢同一个库存,一把锁把所有人串起来,一秒只能处理几百个,怎么办?于是有了缓存、队列、并发设计。
注意关键词:问题没变,是约束变了。 存数据还是存数据,卖商品还是卖商品。变的是物理上限(放不下、算不动)、争抢(同时太多人)、和故障概率(机器越多坏得越频繁)。
所以规模化技术的本质是:用复杂度换规模。 把单机方案换成分布式方案,业务逻辑没变,但你开始要处理网络、副本、分片、一致性——这些在简单方案里根本不存在的复杂度,全部是"规模"这两个字的入场费。
这个定义是后面所有讨论的地基:约束匹配,复杂度是入场费,值;约束不匹配,复杂度是白付的税。这正好引出后面的光环问题。
先问:光环从哪来?
它来自大厂的成功故事。而所有成功故事,在传播时都会做一件事——剪掉约束条件。
Netflix 的微服务:前提是几千名工程师在一个代码库里改代码,单体已经成了发布事故的源头。1968 年 Conway 定律说,架构是组织的投影——微服务本来就是 Netflix 组织形态的镜像。剪掉这个前提,"微服务"三个字就变成了"先进架构"。
Google 的 MapReduce:前提是"我们要把整个互联网索引进来,单机物理上不可能"。剪掉这个前提,分布式计算就变成了"大数据标配"。
剪掉约束条件之后,故事就变成了"最佳实践"。"最佳"两个字是结果,不是原因。但传播的时候,原因没了,只剩结果。于是每个听故事的人都以为:用了这套技术,就拥有了大厂的结果。
这就是光环的机制:不是技术本身发光,是故事把约束条件剪掉之后,剩下的轮廓在发光。
那么问题来了:这些技术到底能不能抄?
能。而且必须承认——所有规模化技术,共享同一套骨架。缓存、队列、分片、分布式计算,翻来覆去就这几块积木。CPU、内存、磁盘、网络的物理约束没变,解法就会收敛。这套骨架是行业几十年的公共财富,谁都可以用。
但骨架是共性,目标是个性。
同一个 Kafka,在秒杀系统里是削峰队列(消息=任务,丢了可以重发);在流批一体平台里是管道本体(消息=数据本身,必须可重放、分区有序、exactly-once)。组件一样,因为目标不同,语义、配置、可靠性要求完全不同。
同一个 Redis,在秒杀里是原子计数器(库存扣减,宁可错杀不可超卖);在搜索系统里是结果缓存(丢了拉倒,重查一遍);在金融系统里只敢当纯缓存,账不敢放进去。
技术方案是共性的,可以共享、可以抄、可以学。建设目标是私有的,必须自己捋。捋清楚目标,需求自然出来;需求出来了,技术是最后一公里的选择题。
抄方案不抄目标,是什么?刻舟求剑。记号没记错,错的是忘了船在动。目标不同了,问题的位置早就变了。
到这里有个更扎心的问题:既然道理这么清楚,为什么企业内部照抄还是比比皆是?
因为照抄不是认知错误,是理性选择。
你是一个团队负责人,你面临两个选项:
- A. 跟大厂对齐,上微服务。成了,是"决策有远见";败了,可以解释为"业界标准做法,我们只是落地得早"。
- B. 根据自身目标,裁剪甚至不上。成了,是"应该的";败了,你要为你的裁断负全责。
选项 A 的期望收益,无论成败,都高于选项 B。抄错了怪大厂,裁错了担责任。跟最强的人站在一起,总比自己走夜路安全。
"跟大厂对齐"这句话最妙的地方在于:它同时是决策、汇报、和免责声明。一句话三种用途,这几乎是组织行为学的完美产物。光环不灭,不是因为它技术上正确,而是因为它政治上有用。
最典型的案例,是"练技术"。
领导说:大家要练练技术,所以上微服务。初衷没错——技术团队需要成长。但这个目标错得隐蔽:练技术的正确载体,是内部工具、沙箱、demo、可废弃的实验项目——便宜、见效快、练完能扔。他们选的载体,是生产级基础设施——昂贵、要长期维护,还要配套一堆系统:自动发布、监控、配置中心、网关、链路追踪。
练技术的成本是一次性的,生产基础设施的代价是持续性的。为了练开车去买辆卡车跑物流——练车本身没错,错在把卡车当成练习场。
结局通常是"鬼城":基础设施建好了,没有业务入驻。路修好了、楼盖好了,没有人住。物业费还得照交——那些配套系统的维护成本,一个子儿都不会少。而练出来的技术因为没有业务验证,等于屠龙之技,龙从头到尾没出现——下次真遇到规模问题,这套东西好不好使,没人知道。
没有使用者的基础设施是负债,不是资产。这句话,城市化已经付过一次学费,技术圈正在付第二次。
到这里有人会问:那新技术的账,到底怎么算?总不能因噎废食。
对,不能。但答案不是"学会了就上",而是让技术等业务。
先说一个区别:工作不是学生学习。
学生时代,学一个技术,评价标准是"学会了吗",没有业务成本。学完恨不得马上用上,一步到位——因为学生没有生产环境要负责。
工作里引入一个技术,是要付业务代价的:生产环境、维护成本、团队学习成本、配套系统的建设成本。所以"我学会了,所以我们必须大规模上"——这句话是学生思维的残余,它默认了"学会"等于"该用",跳过了业务验证这一步。
正确做法是什么?我自己做计算选型时的习惯:开一个口子。
选一个边缘业务——不核心、不关键、挂了不影响主流程——用新技术去做。在这一小块真实业务里,把技术跑起来,验证它、养团队、攒经验。它做成了,团队里有懂这套技术的人;它做砸了,代价很小,撤了重来。等真正的机会来了——业务增长、新需求出现、规模真的到了——你已经有了验证过的方案和练过兵的团队,可以大规模上。
这叫技术储备。它不是不跟进技术,是把跟进变成一种节奏:小口子进、边缘验证、机会来了再放量。 技术等业务,而不是业务等技术。
对比一下你就知道哪个对:
- 错误的练法:练技术 → 直接上生产基础设施 → 鬼城。业务没来,技术先建了,建完干等。
- 正确的储备:开小口子 → 边缘业务验证 → 等机会 → 放量。技术跟业务同节奏,机会来了刚好接住。
养兵千日,用兵一时。但养兵不是把整个军营盖成空城——是把兵放在最不心疼的地方养着,等要打仗的时候,拉得出来。
那么,该不该抄?判断不靠感觉,靠三个问题:
- 我的建设目标是什么?——为谁建?成功标准是什么?哪个指标不能牺牲?(延迟?吞吐?正确性?成本?)
- 这套方案的目标前提是什么?——大厂当初在什么约束下长出这套方案?(多少人?多少流量?多大数据?)
- 前提匹配吗?——匹配,抄骨架;不匹配,裁剪或不上。
小数据上微服务,第三个问题的答案是"不匹配"——前提差着一个数量级,方案就是负资产。这不是说微服务不好,是说微服务的目标不是你的目标。
而"练技术"这种目标,第一个问题就让它暴露了:练技术的建设目标不是系统,是人。那就别用生产系统当练习场——给团队一个沙箱,比给团队一个鬼城,体面得多。
最后说一句可能不讨喜的话:光环祛魅,不是否定技术。
微服务很好,K8s 很好,Flink 很好。它们是这个行业几十年里长出来的真东西。问题从来不在技术,在传播——在成功故事被剪掉约束条件后,它们被当成了"用了就先进"的符咒。
摘掉光环的人,不是不敬畏技术,是敬畏技术真正的来源:约束条件、目标、和判断。
规模化工程技术的光环,照亮的从来不是技术本身,而是"跟大厂对齐"的安全感。能判断"哪些能抄、哪些必须自己长"的人,不需要光环——因为他知道,技术是共性的,可以抄;目标是私有的,只能自己捋。
这个能力,别人替不了你,也抄不了。它只能从你自己的目标里长出来。