后端从单体切到微服务之后,很多团队会发现一件尴尬的事:业务代码分得清清楚楚,服务边界画得明明白白,可那份被所有服务共同引用的 .proto 文件,却成了没人说得清该归谁管的东西。「Proto 代码到底放哪里?」是社区里反复出现的经典讨论,也是一个存在已久的老问题。各方答案大致归成五类,每一轮讨论都吵得不可开交——有说放业务仓库里的,有说必须独立仓库的,还有说干脆搞个集中仓库一劳永逸的。争论多年,答案并没有收敛,但问题的外延却悄悄变大了:存放位置只是 proto 管理的一个切面
如何管理项目中的 Protobuf
2023-04-21•约 8.6 千字
源代码托管怎么选:Gerrit、GitLab、GitHub 与 Gitea
源代码托管平台看起来都差不多:建仓库、提变更、跑流水线、开 Issue。于是选型很容易变成截图对比:谁的功能更多、界面更新、免费额度更大。等真正迁移,才发现 Git 仓库只是最容易搬走的那一层,代码审查记录、流水线、权限、制品、机器人和团队习惯早已长在平台里面。Gerrit、GitLab、GitHub 和 Gitea 的根本区别,不是四套网页皮肤,而是四种协作模型:Gerrit 把严格审查当作提交代码的入口,GitLab 把仓库放进一体化 DevSecOps 平台,GitHu
2023-04-05•约 4.7 千字
关于微服务和单体的一些思考
一个系统有 30 个服务,它就比一个单体先进吗?未必。它也可能只是把原来一次函数调用能完成的事情,改成了 30 个进程互相发请求,再配上一套 Kubernetes、一条消息队列、三种数据库和一群半夜被告警叫醒的人。服务数量确实上去了,业务价值却不会因此自动上涨。微服务最容易被误解成一种代码组织方式:文件多了就拆仓库,类多了就拆服务,团队大了就上容器。其实它首先是部署边界、数据所有权和团队责任的重新划分。一刀切下去,切开的不只是代码,还包括事务、故障、版本、监控与值班责任。边界
2023-03-03•约 6.8 千字
简述 TCP/IP:从一个数据包说起
打开浏览器,输入一个网址,页面很快出现在眼前。这件事熟悉得近乎无聊,但若继续追问,问题马上就多了起来:电脑怎么知道服务器在哪?数据为什么没有走错门?跨过 Wi-Fi、光猫、运营商和海底光缆之后,对方又如何确认内容没有缺斤少两?很多回答会祭出一张 OSI 七层模型图,再从物理层一路背到应用层。图当然没错,只是背完之后,人仍然可能解释不了一个更实在的问题:当网络会丢包、乱序、重复、限速甚至中断时,TCP/IP 到底替应用做了什么,又故意没做什么?先给出一个不太严谨但好用的答案:I
2022-04-01•约 7.8 千字






