高并发系统设计:从理论到实践,一个被裁外包狗的血泪复盘

@赵雨萱
2026-03-11 14:27
阅读 1847

去年十月,我被裁了。

那天下午三点,HR把我叫进会议室,说了句“公司战略调整”,递给我一份N+1协议。我盯着那张纸,脑子里一片空白——下个月房租3500,老婆还在另一个城市等我周末过去,她刚换了工作,暂时没收入。我甚至没敢看她微信,怕自己绷不住。

但生活不等人。两周后,我接了第一个外包项目:一个要做“高并发”的内容推荐系统,预算8万,工期三个月。甲方老板在Zoom上笑眯眯地说:“我们要支持十万QPS,对标抖音那种。”我表面点头,心里骂了一句:你当我是神仙?


一、纸上谈兵 vs 现实暴打

以前在大厂,高并发是PPT里的架构图,有SRE团队兜底,数据库扛不住了就加机器,缓存炸了就扩容Redis集群。可现在,我一个人,一台MacBook Pro,外加一个2核4G的云服务器(因为预算有限,只能选最便宜的)。

第一周,我信心满满地用Java搭了个Spring Boot服务,接入MySQL,加了Redis缓存,还上了Guava RateLimiter做限流。自测跑500并发,稳如老狗。结果甲方一压测,2000请求进来,系统直接502。日志里全是Connection pool exhaustedOutOfMemoryError

我瘫在出租屋的地板上,点了根烟(戒了两年,又捡起来了),看着窗外北京五环外灰蒙蒙的天。老婆发来消息:“项目顺利吗?”我回了个“还行”,删掉了后面那句“快崩了”。


二、资源,永远是最稀缺的奢侈品

高并发的核心,不是代码多牛,而是资源分配的艺术

我在大厂时,资源是“无限”的——数据库可以分库分表,CDN随便开,Kafka集群管够。但现在,我的总预算连8万都不到,还得留20%当应急。每一毛钱都得精打细算。

于是,我开始做“减法”:

  • 数据库:放弃MySQL,改用H2内存数据库(测试阶段)+ PostgreSQL(生产)。只存核心数据,其他全扔缓存。
  • 缓存:Redis不敢开集群,就用单节点+本地Caffeine缓存二级缓冲。热点Key手动预热。
  • 计算:能异步的全丢到线程池,用CompletableFuture串行化非关键路径。

最狠的一招是:限流 + 降级。我在网关层加了Sentinel,超过1000 QPS就返回“服务繁忙,请稍后再试”。甲方一开始不乐意:“用户会流失的!”我说:“总比全站挂了强吧?”

他沉默了三秒,说:“行,你说了算。”


三、RAG + Embedding:不是银弹,但能救命

这个项目有个需求:用户输入一段话,系统要实时推荐相关内容。最初我想用传统关键词匹配,但效果太差。甲方说:“能不能像ChatGPT那样理解语义?”

我差点笑出声——我们连GPU都没有,还语义?

但转念一想,RAG(Retrieval-Augmented Generation) 其实不一定需要大模型。我可以用轻量级Embedding模型,把内容向量化,存进向量数据库,再用近似最近邻(ANN)搜索。

具体操作:

  1. Sentence-BERT(开源的,CPU能跑)生成文本的Embedding,维度768。
  2. 存入HNSWLib(纯Java实现,无依赖,内存友好)。
  3. 查询时,用户输入也转成Embedding,做相似度检索,Top 5结果返回。

整个过程不用调外部API,不依赖GPU,Java单机跑得飞起。虽然精度不如大模型,但比关键词匹配强太多。甲方测试后眼睛一亮:“这感觉对了!”

那一刻,我突然意识到:高并发系统里,AI不是炫技,而是优化资源利用的工具。Embedding把复杂语义压缩成向量,省去了大量规则引擎和人工标注的成本。


四、Java,还是那个稳如老狗的Java

很多人说Java过时了,高并发该用Go或Rust。但在这个项目里,Java救了我命。

  • 生态成熟:Spring Cloud Gateway做网关,Resilience4j做熔断,Micrometer监控指标——全都有现成轮子。
  • JVM调优空间大:通过-Xmx、G1GC参数调整,硬是在2G内存里跑起了服务。
  • 线程模型可控:用Virtual Thread(Project Loom)原型版试了下,虽然不稳定,但普通线程池+异步回调已经够用。

最关键是:我熟啊!半夜两点系统OOM,我能靠MAT(Memory Analyzer Tool)快速定位内存泄漏点。换成新语言?光查文档就得三天。


五、异地周末,是我唯一的充电站

上个月底,终于交付了。甲方满意,尾款到账。我立刻买了高铁票去见老婆。

她在车站接我,手里拎着我最爱吃的酱牛肉。晚上,我们挤在她租的小屋里,泡面配啤酒。她问:“累吗?”我说:“累,但没那么怕了。”

以前在大厂,我觉得技术就是写代码、卷架构。现在才懂,真正的高并发设计,是在资源极度受限下,用最小成本达成最大可用性。它不是炫技,是生存。

而我的“资源”,除了服务器和代码,还有她的那句“我在”。


六、给后来者的几点真心话

如果你也在做高并发系统,尤其是单干或小团队,记住:

  1. 别迷信理论:CAP、BASE、DDD……学得再透,不如先让系统跑起来。能跑,才有资格优化。
  2. 资源优先级 > 技术先进性:没钱没机器,就做减法。缓存、限流、降级,比微服务拆分更重要。
  3. RAG和Embedding是平民AI利器:不需要大模型,也能做语义理解。关键是用对场景。
  4. Java依然能打:别被新语言带节奏,稳定、生态、熟悉度,才是小团队的生命线。
  5. 人,是最重要资源:别熬垮身体,别冷落家人。系统可以重启,人生不能。

现在,我又接了个新项目,做跨境电商的库存扣减系统,要求“秒杀级”高并发。预算12万,工期四个月。

上周五晚上,我和老婆视频,她说:“这次别熬夜太晚。”我笑着答应,然后默默打开了IntelliJ IDEA。

窗外,北京的夜雨淅沥。我知道,明天又是硬仗。但至少,我不再是那个被裁后手足无措的程序员了。

我是谁?一个被裁员后自己接外包的全栈开发,和老婆异地,周末才能见面。
但我在路上,用代码,一点点把生活撑起来。

高并发不可怕,可怕的是,你忘了自己为什么出发。

评论 0

最热最新
暂无评论
@赵雨萱Lv.1
0
影响力
0
文章
0
粉丝