明朗北街七万号·数研工坊
引子#
五年前,我以为做技术的终点是「什么都能做」。
五年后我才明白,真正的分水岭是——在什么都不能做的时候,你还能做什么。
我从华为云出来,辗转了几家公司,最后落地在雄安。这些年我待过的环境,有一个共同特点:没有公网。
你能想象吗?一台刚装好的服务器摆在面前,没有 yum 源,没有 pip 源,没有 Docker Hub。你会的所有框架、所有工具,全停在联网这一步。
一开始我很崩溃。后来我发现,这恰恰是我最值钱的经验。
这些年下来,我总结了三个认知。
认知一:技术越深,越要学会「不做什么」#
我刚入行的时候有个毛病——追求技术上的「全栈」。
看到 Flink 火了就去学 Flink,看到 K8s 火了就去搭 K8s。那时候我的电脑里存了几十个目录,每个都是「入门到精通」的学习笔记。
直到有一次,我在内网搭一个数据平台。
按照我当时的思维,第一反应是上 K8s——微服务、容器编排、弹性伸缩,一步到位。方案写得很漂亮,架构图画得也很好看。
然后我发现,集群一共就三台服务器。K8s 的控制平面一装,资源已经吃掉了三分之一。
更致命的是——Docker 镜像拉不下来。
你学了一身屠龙技,结果发现龙根本不在这个房间里。
那是我第一次意识到:「会做什么」不是你的上限,「能在什么条件下做」才是你的壁垒。
从那以后,我不再追求技术广度,而是开始深耕一个问题:
在没有条件的时候,怎么把事情做成。
我开始学怎么从源码编译、怎么搭本地镜像源、怎么把十个微服务塞进一个 Tomcat。这些活儿说出去不高级,但它们有一个共同的特点——离开公网,全得靠这些。
你会的框架再多,装不上就是零。
认知二:架构的本质是妥协#
我在上篇文章里讲过,我把六个 Spring Boot 服务塞进了一个 Tomcat。
有人问:为什么不用 K8s?为什么不做微服务?为什么不搞容器化?
因为做不到。
不是因为技术不行,是因为资源的约束摆在那里。
三台机器,二十几个服务,不可能每个服务一个独立进程。没有完美的方案,只有在当前约束下的最优解。这就是我要说的第二个认知——架构的本质不是设计,是妥协。
没有条件的架构,和你从教科书上学到的架构,完全是两回事。
教科书教你:服务要拆分、数据库要读写分离、缓存要集群。
现实告诉你:就一台 4G 内存的机器,你看着办。
在现实的约束下,我开始做一些「不优雅」的决定。
把多个服务合并部署到同一个容器里。用同一个数据库实例承载多个业务模块。放弃 K8s,用 Shell 脚本加 SSH 完成自动化部署。
每一件事单独拿出来,放在技术社区里都会被骂。但组合在一起,它们构成了一个在三台机器上稳定运行了两年多、服务了两千多人的数据平台。
后来我总结了一句话,写在了我的笔记本首页:
没有完美的方案,只有当前约束下的最优解。
这不是妥协。这是认清现实后的理性选择。
认知三:真正值钱的不是技术,是解决「不能」的能力#
几年前,一个朋友问我:你觉得在这个行业里,什么能力最值钱?
我当时回答:算法、架构、业务理解。
现在我会说:解决「不能」的能力。
什么是解决「不能」的能力?
是不能联网的时候,你用 ISO 挂载搭起了 yum 源。
是不能下载的时候,你用外网机器把依赖一个个打包回来,传到内网。
是没有 GPU 的时候,你在 CPU 上跑通了模型推理。
是国产操作系统不支持 HDP 的时候,你一行一行改源码完成了适配。
这些事情的技术含量真的高吗?不高。GCC 编译、挂载 ISO、写 Shell 脚本——这些都是基础功。
但为什么别人做不到?
因为大多数人在能联网、能下载、能随便装包的环境下工作。他们从来没有被逼着去解决「不能」的问题。而当他们真的面对一个不能联网的环境时,他们连第一步都迈不出去。
而你已经迈了几百步了。
这些年在内网环境下,我沉淀了一套自己的工具链和流程:
- 从裸机到可用平台的部署流程
- 离线环境下的镜像源搭建方案
- 资源受限时的架构决策框架
这些经验很大可能永远也上不了那些热门的技术大会。但在那些真正需要的人眼里——比如同在受限环境下工作的工程师们——这些东西比任何新技术都值钱。
因为你在帮他们解决一个很多人解决不了的问题:在没有条件的时候,把事情做成。
尾声:为什么我开始输出#
说实话,做了五年技术,我从来没想过写文章。
促使我动笔的原因很简单:我翻自己的博客,发现自己这些年踩过的坑、总结的经验,很多已经开始模糊了。
写下来不是为了让别人看,最开始是为了让自己记住。
但写着写着,我发现这些内容对别人也可能有用。在这个行业里,大多数人走的是「宽路」——海量的资源、成熟的工具链、完善的基础设施。少部分人走的是「窄路」——有限的资源、自给自足、从零到一。
我走的是窄路。而且很幸运,我走通了。
所以我想把这些年的记录整理出来,形成一系列文章。聊受限环境下的数据平台实战,聊资源紧张时的架构选择,聊那些「不优雅但有用」的方案。
下一篇开始,我会从最基础的环境搭建讲起——内网环境下的操作系统安装、镜像源搭建、离线编译。
希望我的弯路,能成为你的捷径。
本文首发于掘金 · 作者:七万号 扎根雄安新区中关村科技园,专注受限环境下软件搭建与数据平台落地