QIAOPANG.COM · 陈天(TYR CHEN)2013–2026 精选技术与随笔文集 · 共 260 篇按时间顺序浏览(2013 → 2026)↗
程序人生 · 陈天文集QiaoPang · Systems, Craft & Agentic Era
时间轴 ↗

浅谈unix之美

浅谈unix之美

在『高效能程序员的七个习惯』里,我谈了 unix 的哲学。这里举个例子:

$ docker ps -a -q | xargs docker rm

先解释一下,docker ps -a -q 列出了系统中所有container的id,docker rm 根据id删除某个container。但是我要删除所有的container怎么办?难道要我再做一个新的命令 docker rm-all,或者 docker rm --all?

两种方式都不优雅。其实我们需要的就是把两个已有的功能组合起来使用。怎么办?

unix的pipe和xargs就是为此设计的。pipe创建了一个管道,允许左右两端的进程通讯;xargs将管道左边的进程的标准输出重定向到管道右边的进程的标准输入,任其处理。用人话来说就是,pipe好比水管一样,xargs好比阀门,控制让水从一头流向另一头。

乍一看,本来我要实现一个程序,现在反而多实现了两个,有点不经济啊?其实这就是unix的哲学 —— 做一件事,做好它。

pipe只关心水管做得结不结实,xargs只关心水流是不是正确从左边流到了右边,docker ps -q -a 只显示container id,docker rm 只做删除一个container。四个彼此互相并不认识的命令,凑在一起,优雅地解决了一个问题。有没有乐高积木的感觉?

复杂是软件的大敌,当你把一件事情做得足够简单的时候,你犯错的机会就少了很多,程序的健壮性就得到了保证。简单还有一些其它的美妙的副作用:

  • 灵活,可以使用在很多你想象不到的场景
  • 高效,你可以进行彻底地局部优化,而不用担心制肘
  • 可伸缩,因为只做了一件事,使用者可以按照自己希望的方式将其并行或并发运行

有一个叫minecraft的游戏,游戏中你只能干一件事,搭积木(不好意思,我还真没玩过,只听说过)。你的基本素材就是方块。就是这样一个简单而又开放的游戏,造就了许许多多的奇迹。题图中的企业号(To 非星迷,请脑补星际迷航)就是一群天才一点点用一个个小方块搭建成的。

简单 = 无穷无尽的想象

复杂 = 思维禁锢并僵化

回到unix。

几天前工作的时候要解决一个问题:两个进程本来在同一台机器上用unix socket通信,后来其中一个进程转到了另外一台机器,两者还要通信,怎么办?

我们当然可以打开源码,将unix domain socket转成tcp socket进行通讯。

但是,如果其中一个进程的源码不受你的控制怎么办?

想想unix的解决之道吧?

MORE IN 系统与架构

同专栏延伸阅读

查看「系统与架构」全部文章 →

日志的未来:必也正名乎

我们花了十年,把可观测性盖成一座漂亮的大厦,地基却是漂浮的字符串:字段名靠默契、基数靠运气、账单靠忍。这篇文章给出一个激进的方案,用 protobuf 给每一件被观测的事正名,把日志、指标、审计统一成一份带版本、带 owner、带保留策略的事件目录,旁边留一扇叫 ForensicEvent 的逃生舱兜住所有未知未知。AI 已经成为代码的主笔,schema-first 的最后一道阻力随之消失。是时候让 schema 重新成为可观测性大厦的

New Hope (2025–2026)10,772 字 · 24 分钟

彻底抛弃多环境:用 Rust 与 Pingora 重塑下一代 Serverless 架构

当我们退回原点重新思考"计算"的本质,会发现多环境是个幻觉,K8s 是个过度抽象,而 Serverless 的冷启动和连接池风暴是自找的。这篇文章拆解一套基于 Baggage Header 路由、Pingora 智能网关、Firecracker 微虚拟机和 Rust Data Bus 的无环境架构,试图回答:Post-Kubernetes 时代的计算该长什么样。

New Hope (2025–2026)23,788 字 · 53 分钟