科技爱好者周刊(第 362 期):GitHub 工程师谈系统设计

作者: 阮一峰

日期: 2025年8月22日

这里记录每周值得分享的科技内容,周五发布。

本杂志开源,欢迎投稿。另有《谁在招人》服务,发布程序员招聘信息。合作请邮件联系([email protected])。

封面图

中国首艘火箭回收船"星际归航"本月成功下水,它的40米x60米的甲板,将用于火箭在海上降落。该船的拥有者是民营航天公司"星际荣耀"。(via)

GitHub 工程师谈系统设计

上周,我读到一篇文章,作者是 GitHub 的高级工程师肖恩·戈德克(sean goedecke)。

文章题目是《我所知的良好的系统设计》。

读完后,我觉得写得不错。GitHub 工程师总结经验,教大家设计一个良好的系统,不是空泛之谈。下面是我的一些摘录。

1、

程序设计是组装代码,系统设计是组装服务。

程序设计的组件是变量、函数、类等,系统设计的组件是服务器、数据库、缓存、队列、事件总线、代理等。

2、

如果一个系统很长时间不出错,它的设计就是良好的。

如果你进一步看了代码,脱口而出:"哈,这比我想的要简单",或者"这个部分不用我操心,即使出问题也容易解决",它的设计就是优秀的。

3、

良好的系统设计,总是从一个有效的简单系统发展而来。千万不要从零开始设计一个复杂的系统。

4、

系统设计的难点在于状态。尽量采用无状态组件,最小化"有状态组件"的数量。

状态的复杂性在于,你无法简单地重启服务。一旦出错,往往需要手动修复状态。

5、

状态需要保存在数据库。数据库是最重要的系统组件,用来管理状态。

数据库的设计目标是每张表易于理解:打开看一下表结构,就能大致了解存储的数据内容及其原因。

千万不要采用复杂的表结构(也就是数据结构),会给代码带来极大的复杂性和性能约束。

6、

数据库往往是系统瓶颈,因为每个页面请求可能要调用数十次、数百次数据库,而且是按顺序调用。

为了避免瓶颈,数据库可以做成一个写入节点和多个只读副本。数据查询都发往只读副本,数据写入发往写入节点。

写入节点与只读副本之间,存在数据复制延迟。如果更新一条记录后,你需要立即读取它,那么可以将数据放入内存,写入数据库成功后从内存读取。

7、

耗时的操作要拆分出来,放在后台作业(即系统外部的单独服务),排队完成。

后台作业主要分成两个组件:一个队列服务,一个作业运行器(从队列中获取任务并执行)。

队列任务的软件,可以用 Redis(需要尽快执行的任务),也可以用数据库(不着急的任务)。

8、

如果数据的生成速度和读取速度不匹配,经典解决方案就是缓存。

缓存的最简单做法,就是把数据保存在内存,否则就使用专门的键值存储软件(比如 Redis 或 Memcached),后者的好处是多个服务器可以共享缓存。

初级工程师希望缓存所有内容,而高级工程师希望尽量少用缓存。因为缓存是状态的来源,不可避免需要校验状态和处理状态过期。

9、

除了缓存和后台作业,大型系统通常还有事件中心,一般用的是 Kafka。

事件中心也是一个队列,存放的是"某件事发生了"的消息。比如,用户注册触发了"新帐户创建"事件,该事件就放入事件中心,然后由事件中心去通知订阅该事件的多个服务:发送欢迎电子邮件、设置个人空间等等。

事件中心适用于,发送事件的代码不关心其他服务如何处理事件,或者事件量很大且对响应时间不太敏感。

不要过度使用事件,很多时候,更简单的做法是让一个服务请求另一个服务的 API。

为了便于除错,所有日志最好都放在一起,你可以立即看到另一个服务的响应。

10、推拉

如果数据需要传送到多处,有拉取(pull)和推送(push)两种选择。

一般来说,拉取比较简单(比如大多数网站采用的轮询),推送更节省资源,不需要用户主动请求数据,一旦后端数据发生变化,服务器主动将数据推送给每个客户端。

如果你确实需要向100万个客户端提供最新数据(就像 GMail 那样),应该采用推送还是拉取?这要视情况而定。如果采用推送,就要把每次推送放入一个事件队列,并让一大群事件处理器从队列中拉取数据并推送。如果采用拉取,就要部署一堆(比如100台)快速的只读缓存服务器,处理所有读取流量。

谷歌的两个 AI 新产品

谷歌本周公开了两个新产品。

1、Imagen 4 模型

这是谷歌最新的"文生图"模型,可以在官网免费使用,参见介绍文章。

我觉得,图片生成速度很快,效果相当好(比如下图"机器人拿着一块红色滑板")。

2、Learning About

Learning About 是谷歌的新型学习平台,使用 AI 生成学习教程。

先输入你想要学习的主题,比如 Java 语言。

它会返回一篇简单的教程,

除了总体介绍,里面还会列出各种学习主题,可以进一步深入学习。

科技动态

1、英国内政部宣布,英国的警车将加装面部识别系统。

警车一边开,一边扫描路上行人的面孔,跟警方的数据库比对。如果发现可疑人士,就发出警报。

据称,该技术在伦敦试运行期间,12个月内已抓到了580名嫌疑人。

2、很多人喜欢旅行时邮寄明信片,作为纪念。

但是,明信片需要手写,而且只能传递文字,在手机时代显得很落伍。

一家美国公司最近推出了 Keeps(上图)。用户在它的网站,上传照片,并留下一段语音(下图)。

它会把照片打印成明信片,背后是一个二维码,然后把明信片寄给你指定的收件人。对方收到后,手机扫描二维码,就能听到你留下的语音。

3、维基百科的条目,有各种语言的版本。你知道最多语言的条目,是哪一篇吗?

出乎意料,居然是一个名不见经传的艺术家,名叫大卫·伍德沃德(David Woodard)。

他的条目居然有335种语言版本,是所有条目中最多的。

他的大部分语言版本都是一个叫做 Swmmng 的用户创建的,而且 IP 地址也一样,时间跨度持续了十多年。

很显然,这是一起自我推销行为,这个艺术家为了出名,为自己生成各种语言的维基百科条目。现在,他的大部分语言版本已被删除,只留下20种语言。

文章

1、GitHub Models 的免费 AI 服务(英文)

我刚刚知道,GitHub 提供免费的 AI 模型调用,有 GPT-4o、DeepSeek-R1、Llama 3 等模型,不过有用量限制。

2、用 JavaScript 生成迷宫(英文)

本文用通俗的语言,介绍一种生成迷宫的简单算法,给出 JS 的实现。

3、Cloudflare 不是 CDN(英文)

Cloudflare 提供无限流量的免费 CDN,那么为什么它还有收费的 CDN?本文告诉你,除了流量,CDN 还有其他指标。

4、Git 如何处理大文件(英文)

几十 MB 的大文件,不适合放入 Git 仓库。如果一定要放,要使用一个扩展 Git LFS。但是它不太好用,作者提出改进建议。

5、10个有用的 VS Code 插件(英文)

作者介绍10个他已经离不开的 VS Code 插件。

6、TCP 初始拥塞窗口的问题(英文)

TCP 协议有一个"拥塞窗口"的设计,会根据网络状况,自动调整发送数据包的数量。本文通俗地解释这个概念,并提出改进的方案。

工具

1、doxx

终端查看 docx 文件的命令行工具。

2、IntraScribe

面向企事业单位内网环境的一个"语音转文字"的管理协作平台。(@weynechen 投稿)

3、P2P Remote Desktop

一个开源的 Windows 远程桌面工具,直接运行可执行文件打开远程桌面,无需配置和安装。(@miroslavpejic85 投稿)

4、CuteClock

一个开源硬件项目,基于 ESP8266 的智能时钟,可以显示时间和天气,支持小爱同学语音控制,自带 Web 和小程序客户端。(@AkenClub 投稿)

5、CleanYourMac

开源的 Mac 应用,智能清理工具,使用 AI 分析要删除的文件。(@GitDzreal93 投稿)

6、Next QR Code Generator

Firefox 浏览器的开源插件,为页面生成类似 Chrome 的二维码。(@liuliangsir 投稿)

7、Translator 快速翻译

Chrome 浏览器的离线翻译插件,基于浏览器新的 Translator API 和 Language Detector API,不用网络也能翻译。(@AnYi-0 投稿)

8、Jupyter Notebook 转换网站

这个网站可以将 ipynb 文件转化为 PDF、HTML 和 Python。(@CurioChen77 投稿)

9、Docker Pull Script

一个 Python 脚本,用于从指定镜像源下载 Docker 镜像,支持并发下载、智能缓存(layer 增量更新)。(@luckfu 投稿)

10、Make Graph

在线图表制作网站,支持主流图表类型,可导出 SVG。(@bimohxh 投稿)

另有一个类似工具 ChartFromText,输入数据,在线生成各种图表。(@StevenWuHao 投稿)

AI 相关

1、OpenAI Progress

OpenAI 的官方项目,展示 AI 的发展历程:每一年,同样的提示语,不一样的输出。

2、MCP Playground

这个 Web 应用可以用作 MCP 客户端,指定 AI 模型和 MCP 服务器,在线使用。(@mcpexplorer 投稿)

3、Coro Code

基于终端的 AI 编码代理,Claude Code 的开源替代品。(@Blushyes 投稿)

4、Claude Code Status Bar Monitor

Claude Code 的插件,实时显示使用量和重置时间等信息。(@leeguooooo 投稿)

资源

1、中小学语文示范诵读库

中央人民广播电台中小学语文示范诵读库的 Web 前端,课文按年级、学期分类。(@ZedeX 投稿)

2、在线硬件测试平台

网页测试各种硬件(GPU、屏幕、网络、摄像头、声音、鼠标、键盘)。(@linhuaqian 投稿)

3、业余无线电执照考试模拟(2025 题库)

基于官方最新题库构建的在线模拟与练习的 Web 应用。(@AlliotTech 投稿)

4、Citywalki

这个网站让你感受在世界200多个城市步行/开车/飞无人机。选择城市和移动方式后,它会全屏播放相应的 Youtube 视频,体验不错。

图片

1、滚动时间最长的滚轮胎

推荐 Youtube 的一个视频。

一群艺术家爬上智利最高的沙丘之一,在上面扔下一只轮胎,用无人机全程拍摄,看看它会滚动多久。

轮胎在沙漠里,差不多滚动了三分钟,视频就是这三分钟的全程滚动,非常壮观和纾压。

文摘

1、沃兹尼亚克的故事

今年8月11日,是苹果公司联合创始人史蒂夫·沃兹尼亚克 (Steve Wozniak) 75 岁的生日。

网络论坛 Slashdot 转载了新闻媒体关于他的生日报道。有人留言,惋惜地说,如果他没有卖掉苹果股票,早就是世界数一数二的富翁了。

沃兹尼亚克本人看到这条留言,在下面回复了一段话。

"我卖掉和捐赠了所有苹果股票,原因是财富和权力不是我生活的目的。

我更希望自己拥有快乐和幸福。我资助了圣何塞(我出生在那里)的许多博物馆和艺术团体,他们还以我的名字命名了一条街道。

二十年来,我一直公开演讲,收入可能达到1000万美元。这足够我用了。"

这段话令人想起一本介绍苹果公司历史的书籍,里面曾经提到沃兹的故事。

从学生时代起,他就对自己的财富漫不经心。后来有钱了,也依然如此。

他从不记录自己的开销,也懒得听取理财建议。别人寻求帮助时,他经常当场开出支票。

与乔布斯严格保管自己的苹果股票不同,他送给了父母、姐姐和弟弟400万美元股票,送给了朋友200万美元股票。父亲在他车里捡到过25万美元的未兑现支票,感叹说:"像他这样的人不应该有那么多钱。"

有一次,他来到苹果公司大声宣布:"我的律师建议多元化投资,所以我刚刚买下了一家电影院。"但这件事后来引起了一些麻烦。这家电影院位于圣何塞东区贫民窟,放映了一部黑帮电影,引发了社区的抗议。他参加了几次社区会议,听取了当地居民的意见,承诺他的剧院不会放映暴力或色情电影,然后他在空荡荡的、黑暗的剧院里度过了几个下午,坐着不停看电影,扮演审查员的角色。

言论

1、

我计划写一本 Gleam 编程语言的书。但是,AI 已经能非常清晰地解释 Gleam 了,而且还能回应读者的任何要求。

虽然我自信,自己目前写得要比 AI 好,但是实在没有理由,说服自己去这样做。你花数百小时写书,赚到的钱根本不值得这样付出。

有了 AI,我不知道,人们以后写书的动力是什么,大概只会为了乐趣而写作。

-- 《AI 引发的身份危机》

2、

让我难以抗拒的是,与中国打交道比与世界其他任何地方打交道都容易得多。我给中国某人发邮件,对方肯定会在24小时内回复,更有可能在4小时内。

给一家欧盟或美国公司发邮件,通常要等上好几天才能收到回复。在与中国公司打交道时,我从未见过这种情况,一次也没有。而且,他们的 B2B 大型电商平台几乎总是提供全天候在线客服和采购支持。

-- Hacker News 读者

3、

AI 不会减少你掌握新技能所需要付出的努力,只会让你产生不必学习就已经学会的错觉。

-- 《AI 让人产生虚假的掌控感》

4、

可靠、透明的程序通常不符合程序设计者的利益。

-- 尼克劳斯·维尔特(Niklaus Wirth),计算机科学家,图灵奖得主

往年回顾

一份谷歌离职报告(#315)

WiFi 的后面是 LiFi(#265)

互联网最喜欢的行为模式(#215)

全端 App 的时代(#165)

(完)

留言(53条)

可靠、透明的程序通常不符合程序设计者的利益,甚至都不符合软件团队管理者的利益

能及时回复更多的是生存无奈吧,要是生活好一点,中国的节奏也不会这么快。

wiki这个为啥要删呢,是违反什么准则吗

“可靠、透明的程序通常不符合程序设计者的利益。”
这句有点意思。所谓善战者无赫赫之功,如果一个服务一直很稳定,一次错都没出过,后面负责开发维护服务的那个人大概率就要给优化了。如果写得太透明,容易上手,又很容易给其他新人接手。

让我难以抗拒的是,与中国打交道比与世界其他任何地方打交道都容易得多。我给中国某人发邮件,对方肯定会在24小时内回复,更有可能在4小时内。
从另外的角度看来,这说明了什么?细品

引用C的发言:

wiki这个为啥要删呢,是违反什么准则吗

可能是ai翻译。

引用C的发言:

wiki这个为啥要删呢,是违反什么准则吗

质量太低且重复了可能?

“初级工程师希望缓存所有内容,而高级工程师希望尽量少用缓存。”
特别赞同,每次听到领导代码一言不合就丢进缓存里然后洋洋得意的炫耀性能得到多少的翻倍,我心里已经想到下次出问题又得问我怎么办了...

> GitHub Models 的免费 AI 服务(英文)

GitHub Models 去年这时候就已经提供免费服务了

沃兹尼亚确实是富养出来的,苹果上市后很多老员工没有获得股票,乔布斯觉得他们不值得拥有,沃兹尼亚克慷慨的赠送了他的部分。

引用Friday的发言:

能及时回复更多的是生存无奈吧,要是生活好一点,中国的节奏也不会这么快。

很难说,另一方面我们也确实在客服上投入了更多的资金。

Learning About 要申请

引用Fallever的发言:

Learning About 要申请

你上网方式不对

> 对方肯定会在24小时内回复,更有可能在4小时内。

我笑不出来。

"Learn About isn’t currently available in your location"
好像也用不了

引用Boerma的发言:

你上网方式不对

你那儿可以吗?

Translator快速翻译 你们可以用吗?我挂载梯子都下载不了

引用haneki的发言:

> 对方肯定会在24小时内回复,更有可能在4小时内。

我笑不出来。

人太便宜了

虽然有利于帮助孩子学习,但本质上来说,未经授权发布中小学语文示范诵读库音频属于侵权行为,建议阮老师后续注意甄别资源的合理合法性。

引用Fallever的发言:

你那儿可以吗?

我在东京 会有地域限制 好像目前只开放了美国地区

> 有了 AI,我不知道,人们以后写书的动力是什么,大概只会为了乐趣而写作。

AI确实影响了很多方面,随着AI的能力不断提升,或许以后也可以独立写出一篇巨著。

引用momo的发言:

让我难以抗拒的是,与中国打交道比与世界其他任何地方打交道都容易得多。我给中国某人发邮件,对方肯定会在24小时内回复,更有可能在4小时内。
从另外的角度看来,这说明了什么?细品

让我想到了中国快递。在中国,高效便捷的购物体验,是无数的中国人勤劳的结果。

如果可以,我希望所有的工作的人都能够有充足的休息时间,不必及时回复。


安得闲暇千万时,大济天下劳者尽开颜!无扰无忧心自安。

12个月内已抓到了580名嫌疑人
----伦敦真是个巨大的监狱

《我所知的良好的系统设计》截图里的services被漏掉了。。。

>>> 原文是 What is system design? In my view, if software design is how you assemble lines of code, system design is how you assemble 【services】.

引用央广007的发言:

虽然有利于帮助孩子学习,但本质上来说,未经授权发布中小学语文示范诵读库音频属于侵权行为,建议阮老师后续注意甄别资源的合理合法性。

央广的定位本来就应是非盈利性质的公共服务机构,发布这些音频内容的初衷也不应是用于商业营利目的。第三方将这些音频应用于商业用途才存在侵权问题。不知道您起这个名字和央广有什么联系,但还是建议您或请您转告央广,要严于律己,宽以待人。

建议每条信息下面都可以进行评论,这样互动起来更方便一些。

引用elvis的发言:

可靠、透明的程序通常不符合程序设计者的利益,甚至都不符合软件团队管理者的利益

写的太好了 容易被开吗

据称,该技术在伦敦试运行期间,12个月内已抓到了580名嫌疑人。

西方不是不允许随便弄摄像头吗?会被告侵犯隐私。像咱们天网这种我记得他们是完全不可接受的。
这怎么一个流动摄像头还能存在的?

那个滚轮胎的看着一点都不解压。穿越机飞的技术太差了。
中间好几次画面跟丢,看得我血压都升高了。

引用kero990的发言:

西方不是不允许随便弄摄像头吗?会被告侵犯隐私。像咱们天网这种我记得他们是完全不可接受的。
这怎么一个流动摄像头还能存在的?

伦敦的摄像头密度超过大部分中国城市,仅次于哈尔滨。

引用Friday的发言:

能及时回复更多的是生存无奈吧,要是生活好一点,中国的节奏也不会这么快。

我也感觉受到了冒犯~

引用C的发言:

wiki 这个为啥要删呢,是违反什么准则吗

自己修改关于自己的维基百科页面,严重违反了维基百科的核心方针 —— “利益冲突”指引,是官方极不推荐的行为。
维基百科的三大核心内容方针是:中立的观点、可供查证、非原创研究。

引用kero990的发言:

西方不是不允许随便弄摄像头吗?会被告侵犯隐私。像咱们天网这种我记得他们是完全不可接受的。
这怎么一个流动摄像头还能存在的?

伦敦的摄像头不少的

引用momo的发言:

让我难以抗拒的是,与中国打交道比与世界其他任何地方打交道都容易得多。我给中国某人发邮件,对方肯定会在24小时内回复,更有可能在4小时内。
从另外的角度看来,这说明了什么?细品

有没有可能大多数中国人不使用邮件

引用momo的发言:

让我难以抗拒的是,与中国打交道比与世界其他任何地方打交道都容易得多。我给中国某人发邮件,对方肯定会在24小时内回复,更有可能在4小时内。
从另外的角度看来,这说明了什么?细品

一想到喜欢说细品的都是什么样的人我就想笑

中国人习惯使用即时通讯工具,而不是邮件~~~~

让我难以抗拒的是,与中国打交道比与世界其他任何地方打交道都容易得多。我给中国某人发邮件,对方肯定会在24小时内回复,更有可能在4小时内。-------------有没有可能回复是一回事,给你回复的内容质量是另一回事啊,有的人作为工作不得不回复,这是什么对人很好的事情嘛

可靠、透明的程序通常不符合程序设计者的利益,那符合了谁的利益,大概是程序所有者的利益,程序设计者并不是程序的所有者,旧故事的新叙事。

因为阿里巴巴国际站有一个指标叫24小时回复率,会统计这个数据,中国老板最喜欢把这个拿来当做KPI指标

引用和光同尘的发言:

央广的定位本来就应是非盈利性质的公共服务机构,发布这些音频内容的初衷也不应是用于商业营利目的。第三方将这些音频应用于商业用途才存在侵权问题。不知道您起这个名字和央广有什么联系,但还是建议您或请您转告央广,要严于律己,宽以待人。

能在广播和央广系网站上免费听,不代表可以在未授权的情况下传播和使用。
作为一名央广人,我认为你应该好好学习如何尊重知识产权,”严于律己,宽以待人“ 从你嘴里说出来,其实更适合你自己。

引用momo的发言:

让我难以抗拒的是,与中国打交道比与世界其他任何地方打交道都容易得多。我给中国某人发邮件,对方肯定会在24小时内回复,更有可能在4小时内。
从另外的角度看来,这说明了什么?细品

估计是销售问题。如果是售后问题,估计就不行了。

音频的网站好像没法用

vscode插件收下了

好想使用Citywalki看各城市街景,但我没有梯子 :(

Citywalki非常好

写入节点与只读副本之间,存在数据复制延迟。如果更新一条记录后,你需要立即读取它,那么可以将数据放入内存,写入数据库成功后从内存读取。
----是写入数据库成功后从数据库读取吧

引用Boolean Char12的发言:

写入节点与只读副本之间,存在数据复制延迟。如果更新一条记录后,你需要立即读取它,那么可以将数据放入内存,写入数据库成功后从内存读取。
----是写入数据库成功后从数据库读取吧

是放入内存。就是因为有读取延迟问题,才不能从数据库读。

引用lz的发言:

让我想到了中国快递。在中国,高效便捷的购物体验,是无数的中国人勤劳的结果。

如果可以,我希望所有的工作的人都能够有充足的休息时间,不必及时回复。

是的,作为牛马,我并不因此而感到骄傲和开心,我觉得很羞耻。

引用Boolean Char12的发言:

写入节点与只读副本之间,存在数据复制延迟。如果更新一条记录后,你需要立即读取它,那么可以将数据放入内存,写入数据库成功后从内存读取。
----是写入数据库成功后从数据库读取吧

原文说的是更新到内存,而不是写入数据库之后再读取。这里表述的有问题。

citywalk好有意思 可惜打不开。。。提醒需要登录却没有登录入口

引用kero990的发言:

西方不是不允许随便弄摄像头吗?会被告侵犯隐私。像咱们天网这种我记得他们是完全不可接受的。
这怎么一个流动摄像头还能存在的?

注意“西方”是一个非常广的概念,实际上不同西方国家的理念也很不一致。

引用momo的发言:

让我难以抗拒的是,与中国打交道比与世界其他任何地方打交道都容易得多。我给中国某人发邮件,对方肯定会在24小时内回复,更有可能在4小时内。
从另外的角度看来,这说明了什么?细品

说明中国人有礼貌不喜欢让人等,不像其他人傲慢

您分享的工具 P2P Remote Desktop 在下载时触发病毒警告 Trojan:Win32/Vigorf.A
我大胆地下载了源码,在 VS 打开源码时又触发病毒警告
再次大胆地编译了 EXE 尝试运行,结果又触发病毒警告 Trojan:MSIL/AgentTesla.LQL!MTB
这工具是工具作者本身投稿的,到底是否恶意借您的平台散播病毒?还是 Windows Defender 虚假警报?

3、P2P Remote Desktop
一个开源的 Windows 远程桌面工具,直接运行可执行文件打开远程桌面,无需配置和安装。(@miroslavpejic85 投稿)

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接