后端架构演进:从单体到云原生——一个裸辞半年的前大厂人的碎碎念

岁月如歌
2026-01-06 09:00
阅读 4142

上周五晚上十一点,我蹲在老家阳台上抽完最后一根烟,盯着手机里那个“Go微服务容器化部署方案”的文档发呆。风吹得有点凉,但比不上心里那种空落落的感觉。

去年十月,我从北京某大厂后端岗裸辞,带着攒下的十几万存款和一身疲惫回到南方小城。当时月薪22k,房租3500,加班到凌晨是家常便饭。老婆说:“再这样下去,你迟早进ICU。” 我想了想,算了,gap半年吧,看看世界,也看看自己。

结果“世界”没看成,倒是把简历投了一轮又一轮,面试聊得最多的话题,居然是“你们当年是怎么从单体架构迁移到云原生的?”


单体时代:我和爬虫一起熬过的夜

刚入行那会儿(大概2018年),我在一家做电商数据服务的公司,整个后端就一个Java项目,代码量快上百万行。数据库一张主表,用户、商品、订单全塞一块儿,连日志都写同一个库里。

最离谱的是,我们居然还要写爬虫!对,就是那种半夜偷偷抓别人网站数据的玩意儿。老板说:“友商价格更新快,咱们得实时监控。” 于是我和另一个同事,硬是在这个庞大的单体应用里,硬塞了一个Python写的爬虫模块——用subprocess调外部脚本,结果经常把整个服务搞崩。

有一次凌晨三点,生产环境挂了。我一边重启服务,一边改爬虫的User-Agent轮换逻辑,嘴里骂着“这破架构谁设计的”,转头发现设计者就是我自己三个月前写的PR。

那时候的开发心得就一条:能跑就行,别动线上。


微服务初体验:拆!拆!拆!

后来跳槽进了大厂,赶上了微服务浪潮。团队决定把那个“巨无霸”拆成十几个服务:用户中心、商品服务、订单系统、爬虫调度平台……每个服务独立部署,用gRPC通信。

我被分去负责爬虫调度服务,用Go重写。为什么选Go?因为并发强、启动快、内存占用低——特别适合做高频IO的爬虫任务。而且Go的goroutine写起来爽得不行,再也不用担心Python的GIL锁住线程了。

记得第一次上线那天,我和运维老张在机房守到早上六点。他叼着烟说:“你这Go服务才80MB内存,Java那边动不动2G,真省资源。” 我嘿嘿一笑,心里其实慌得一批——万一出问题,我这“新兵蛋子”可扛不住P0事故。

但事实证明,微服务确实香。某个服务挂了,不会拖垮整个系统;爬虫崩了,用户照样能下单。迭代也快了,以前改个功能要全量回归测试,现在只测自己服务就行。

不过代价也很明显:分布式事务、链路追踪、服务注册发现……这些词突然成了日常。有次排查一个超时问题,查了三天才发现是etcd选举卡住了。那一刻我深刻体会到:微服务不是银弹,它只是把单体的问题,换了一种更复杂的方式呈现。


云原生:K8s救我狗命

真正让我感受到“架构自由”的,是上云原生。

大厂那会儿,我们开始全面拥抱Kubernetes。每个微服务打包成Docker镜像,推到Harbor仓库,用Helm Chart一键部署到K8s集群。自动扩缩容、健康检查、滚动更新……运维老张终于不用半夜被叫起来重启服务了。

我的Go爬虫服务也做了改造:

  • 把配置外置到ConfigMap
  • 日志输出到stdout交给Fluentd收集
  • 用Prometheus暴露指标,比如“每分钟抓取页数”、“失败率”
  • 资源限制设为CPU 500m,内存256Mi

最爽的是弹性伸缩。比如双十一大促前,我们提前把爬虫Pod副本从3扩到20,活动一结束自动缩回去。再也不用像以前那样,手动开十几台虚拟机,活动完还得一台台关——累死不说,还容易漏。

但云原生也有坑。有次我忘了给Pod加liveness probe,结果程序假死,K8s以为它还活着,流量一直打进来,最后导致下游API被刷爆。那次复盘会上,TL看着我说:“架构演进不是堆技术,是堆责任。”

这句话我记到现在。


裸辞后的反思:技术之外,人在哪?

Gap这半年,我回老家陪父母,也接了些外包活儿维持生计。上个月帮一个本地农产品电商重构后端,他们还在用PHP+MySQL的单体架构,爬虫直接写在WordPress插件里……

我差点脱口而出:“你们得上微服务!上K8s!”
但看到老板娘一边哄孩子一边算账的样子,我把话咽了回去。

不是所有业务都需要云原生。如果日活就几百人,单体+合理分层+良好监控,完全够用。强行上微服务,只会增加维护成本,让本就不多的开发资源更加捉襟见肘。

这让我想起自己在大厂时的“技术傲慢”——总觉得架构越复杂越高级,却忘了问一句:业务真的需要吗?


回老家,还是回大厂?

上周,一家二线城市的大数据公司给我开出了18k的offer,要求用Go搭建云原生数据采集平台,包含分布式爬虫调度。老婆问我:“去吗?”

我沉默了很久。
大厂节奏快、技术新,但身心俱疲;老家生活安逸,可技术氛围薄弱,成长慢。月薪从22k降到18k,但房租只要800,还能天天回家吃饭。

最终我答应了。不是因为钱,而是因为——他们愿意让我从0到1设计架构,而不是在已有体系里当一颗螺丝。

这次,我想把开发心得真正落地:

  • 小步快跑,先跑通核心链路
  • 爬虫服务用Go + Redis队列 + 动态代理池
  • 监控用Loki+Promtail+Grafana轻量组合
  • 部署上阿里云ACK,但初期只开3个Node

不追求一步到位云原生,而是“够用且可演进”。毕竟,架构是为人服务的,不是反过来。


写在最后

从单体到微服务,再到云原生,技术一直在变。但不变的是:我们写代码,终究是为了让人活得更好一点——不管是用户,还是我们自己。

如果你也在纠结要不要裸辞、要不要回老家、要不要学Go、要不要搞云原生……我的建议是:

先问问自己:

“我现在做的东西,五年后回头看,会觉得值得吗?”

如果答案是否定的,那就改变。哪怕慢一点,哪怕绕点路。

毕竟,人生不是K8s集群,没有“自动修复”功能。但好在,我们还有选择的权利。

—— 一个正在老家调试Go爬虫服务的前大厂人,于2024年6月

评论 0

最热最新
暂无评论
岁月如歌Lv.1
0
影响力
0
文章
0
粉丝