这里记录每周值得分享的科技内容,周五发布。
本杂志开源[1],欢迎投稿[2]。另有《谁在招人》[3]服务,发布程序员招聘信息。合作请邮件联系[4](yifeng.ruan@gmail.com[5])。
封面图
中国首艘火箭回收船“星际归航”本月成功下水,它的40米x60米的甲板,将用于火箭在海上降落。该船的拥有者是民营航天公司“星际荣耀”。(via[6])
GitHub 工程师谈系统设计
上周,我读到一篇文章,作者是 GitHub 的高级工程师肖恩·戈德克[7](sean goedecke)。
文章题目是《我所知的良好的系统设计》[8]。
读完后,我觉得写得不错。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 模型[9]
这是谷歌最新的“文生图”模型,可以在官网免费使用[10],参见介绍文章[11]。
我觉得,图片生成速度很快,效果相当好(比如下图“机器人拿着一块红色滑板”)。
2、Learning About[12]
Learning About 是谷歌的新型学习平台[13],使用 AI 生成学习教程。
先输入你想要学习的主题,比如 Java 语言。
它会返回一篇简单的教程,
除了总体介绍,里面还会列出各种学习主题,可以进一步深入学习。
科技动态
1、英国内政部宣布,英国的警车将加装面部识别系统[14]。
警车一边开,一边扫描路上行人的面孔,跟警方的数据库比对。如果发现可疑人士,就发出警报。
据称,该技术在伦敦试运行期间,12个月内已抓到了580名嫌疑人。
2、很多人喜欢旅行时邮寄明信片,作为纪念。
但是,明信片需要手写,而且只能传递文字,在手机时代显得很落伍。
一家美国公司最近推出了 Keeps[15](上图)。用户在它的网站,上传照片,并留下一段语音(下图)。
它会把照片打印成明信片,背后是一个二维码,然后把明信片寄给你指定的收件人。对方收到后,手机扫描二维码,就能听到你留下的语音。
3、维基百科的条目,有各种语言的版本。你知道最多语言的条目,是哪一篇吗?
出乎意料,居然是一个名不见经传的艺术家,名叫
大卫·伍德沃德[16](David Woodard)。
他的条目居然有335种语言版本,是所有条目中最多的。
他的大部分语言版本都是一个叫做 Swmmng 的用户创建的,而且 IP 地址也一样,时间跨度持续了十多年。
很显然,这是一起自我推销行为,这个艺术家为了出名,为自己生成各种语言的维基百科条目。现在,他的大部分语言版本已被删除,只留下20种语言。
文章
1、GitHub Models 的免费 AI 服务[17](英文)
我刚刚知道,GitHub 提供免费的 AI 模型调用,有 GPT-4o、DeepSeek-R1、Llama 3 等模型,不过有用量限制。
2、用 JavaScript 生成迷宫[18](英文)
本文用通俗的语言,介绍一种生成迷宫的简单算法,给出 JS 的实现。
3、Cloudflare 不是 CDN[19](英文)
Cloudflare 提供无限流量的免费 CDN,那么为什么它还有收费的 CDN?本文告诉你,除了流量,CDN 还有其他指标。
4、Git 如何处理大文件[20](英文)
几十 MB 的大文件,不适合放入 Git 仓库。如果一定要放,要使用一个扩展 Git LFS。但是它不太好用,作者提出改进建议。
5、10个有用的 VS Code 插件[21](英文)
作者介绍10个他已经离不开的 VS Code 插件。
6、TCP 初始拥塞窗口的问题[22](英文)
TCP 协议有一个“拥塞窗口”的设计,会根据网络状况,自动调整发送数据包的数量。本文通俗地解释这个概念,并提出改进的方案。
工具
1、doxx[23]
终端查看 docx 文件的命令行工具。
2、IntraScribe[24]
面向企事业单位内网环境的一个“语音转文字”的管理协作平台。(@weynechen[25] 投稿)
3、P2P Remote Desktop[26]
一个开源的 Windows 远程桌面工具,直接运行可执行文件打开远程桌面,无需配置和安装。(@miroslavpejic85[27] 投稿)
4、CuteClock[28]
一个开源硬件项目,基于 ESP8266 的智能时钟,可以显示时间和天气,支持小爱同学语音控制,自带 Web 和小程序客户端。(@AkenClub[29] 投稿)
5、CleanYourMac[30]
开源的 Mac 应用,智能清理工具,使用 AI 分析要删除的文件。(
@GitDzreal93[31] 投稿)
6、Next QR Code Generator[32]
Firefox 浏览器的开源插件,为页面生成类似 Chrome 的二维码。(@liuliangsir[33] 投稿)
7、Translator 快速翻译[34]
Chrome 浏览器的离线翻译插件,基于浏览器新的 Translator API 和 Language Detector API,不用网络也能翻译。(@AnYi-0[35] 投稿)
8、Jupyter Notebook 转换网站[36]
这个网站可以将 ipynb 文件转化为 PDF、HTML 和 Python。(@CurioChen77[37] 投稿)
9、Docker Pull Script[38]
一个 Python 脚本,用于从指定镜像源下载 Docker 镜像,支持并发下载、智能缓存(layer 增量更新)。(@luckfu[39] 投稿)
10、Make Graph[40]
在线图表制作网站,支持主流图表类型,可导出 SVG。(@bimohxh[41] 投稿)
另有一个类似工具 ChartFromText[42],输入数据,在线生成各种图表。(@StevenWuHao[43] 投稿)
AI 相关
1、OpenAI Progress[44]
OpenAI 的官方项目,展示 AI 的发展历程:每一年,同样的提示语,不一样的输出。
2、MCP Playground[45]
这个 Web 应用可以用作 MCP 客户端,指定 AI 模型和 MCP 服务器,在线使用。(@mcpexplorer[46] 投稿)
3、Coro Code[47]
基于终端的 AI 编码代理,Claude Code 的开源替代品。(@Blushyes[48] 投稿)
4、
Claude Code Status Bar Monitor[49]
Claude Code 的插件,实时显示使用量和重置时间等信息。(@leeguooooo[50] 投稿)
资源
1、中小学语文示范诵读库[51]
中央人民广播电台中小学语文示范诵读库[52]的 Web 前端,课文按年级、学期分类。(@ZedeX[53] 投稿)
2、在线硬件测试平台[54]
网页测试各种硬件(GPU、屏幕、网络、摄像头、声音、鼠标、键盘)。(@linhuaqian[55] 投稿)
3、业余无线电执照考试模拟[56](2025 题库)
基于官方最新题库构建的在线模拟与练习的 Web 应用。(@AlliotTech[57] 投稿)
4、Citywalki[58]
这个网站让你感受在世界200多个城市步行/开车/飞无人机。选择城市和移动方式后,它会全屏播放相应的 Youtube 视频,体验不错。
图片
1、滚动时间最长的滚轮胎[59]
推荐 Youtube 的一个视频[60]。
一群艺术家爬上智利最高的沙丘之一,在上面扔下一只轮胎,用无人机全程拍摄,看看它会滚动多久。
轮胎在沙漠里,差不多滚动了三分钟,视频就是这三分钟的全程滚动,非常壮观和纾压。
文摘
1、沃兹尼亚克的故事[61]
今年8月11日,是苹果公司联合创始人史蒂夫·沃兹尼亚克 (Steve Wozniak) 75 岁的生日。
网络论坛 Slashdot 转载了新闻媒体关于他的生日报道。有人留言,惋惜地说,如果他没有卖掉苹果股票,早就是世界数一数二的富翁了。
沃兹尼亚克本人看到这条留言,在下面回复了一段话。
“我卖掉和捐赠了所有苹果股票,原因是财富和权力不是我生活的目的。
我更希望自己拥有快乐和幸福。我资助了圣何塞(我出生在那里)的许多博物馆和艺术团体,他们还以我的名字命名了一条街道。
二十年来,我一直公开演讲,收入可能达到1000万美元。这足够我用了。“
这段话令人想起一本介绍苹果公司历史的书籍,里面曾经提到沃兹的故事。
从学生时代起,他就对自己的财富漫不经心。后来有钱了,也依然如此。
他从不记录自己的开销,也懒得听取理财建议。别人寻求帮助时,他经常当场开出支票。
与乔布斯严格保管自己的苹果股票不同,他送给了父母、姐姐和弟弟400万美元股票,送给了朋友200万美元股票。父亲在他车里捡到过25万美元的未兑现支票,感叹说:“像他这样的人不应该有那么多钱。”
有一次,他来到苹果公司大声宣布:“我的律师建议多元化投资,所以我刚刚买下了一家电影院。”但这件事后来引起了一些麻烦。这家电影院位于圣何塞东区贫民窟,放映了一部黑帮电影,引发了社区的抗议。他参加了几次社区会议,听取了当地居民的意见,承诺他的剧院不会放映暴力或色情电影,然后他在空荡荡的、黑暗的剧院里度过了几个下午,坐着不停看电影,扮演审查员的角色。
言论
1、
我计划写一本 Gleam 编程语言的书。但是,AI 已经能非常清晰地解释 Gleam 了,而且还能回应读者的任何要求。
虽然我自信,自己目前写得要比 AI 好,但是实在没有理由,说服自己去这样做。你花数百小时写书,赚到的钱根本不值得这样付出。
有了 AI,我不知道,人们以后写书的动力是什么,大概只会为了乐趣而写作。
-- 《AI 引发的身份危机》[62]
2、
让我难以抗拒的是,与中国打交道比与世界其他任何地方打交道都容易得多。我给中国某人发邮件,对方肯定会在24小时内回复,更有可能在4小时内。
给一家欧盟或美国公司发邮件,通常要等上好几天才能收到回复。在与中国公司打交道时,我从未见过这种情况,一次也没有。而且,他们的 B2B 大型电商平台几乎总是提供全天候在线客服和采购支持。
-- Hacker News 读者[63]
3、
AI 不会减少你掌握新技能所需要付出的努力,只会让你产生不必学习就已经学会的错觉。
-- 《AI 让人产生虚假的掌控感》[64]
4、
可靠、透明的程序通常不符合程序设计者的利益。
-- 尼克劳斯·维尔特[65](Niklaus Wirth),计算机科学家,图灵奖得主
往年回顾
一份谷歌离职报告[66](#315)
WiFi 的后面是 LiFi[67](#265)
互联网最喜欢的行为模式[68](#215)
全端 App 的时代[69](#165)
(完)
References
[1]
开源:https://github.com/ruanyf/weekly
[2]
投稿:https://github.com/ruanyf/weekly/issues
[3]
《谁在招人》:https://github.com/ruanyf/weekly/issues/7408
[4]
邮件联系:
mailto:yifeng.ruan@gmail.com
[5]
yifeng.ruan@gmail.com:mailto:yifeng.ruan@gmail.com
[6]
via:https://www.geekpark.net/news/352799
[7]
肖恩·戈德克:https://www.seangoedecke.com/
[8]
《我所知的良好的系统设计》:https://www.seangoedecke.com/good-system-design/
[9]
Imagen 4 模型:https://aistudio.google.com/prompts/new_image
[10]
免费使用:https://aistudio.google.com/prompts/new_image
[11]
介绍文章:https://developers.googleblog.com/en/announcing-imagen-4-fast-and-imagen-4-family-generally-available-in-the-gemini-api/
[12]
Learning About:https://learning.google.com/experiments/learn-about/signup
[13]
新型学习平台:https://learning.google.com/experiments/learn-about?src=signup
[14]
面部识别系统:https://news.sky.com/story/facial-recognition-vans-to-be-rolled-out-across-police-forces-in-england-13410613
[15]
Keeps:https://www.sendkeeps.com/
[16]
大卫·伍德沃德:https://en.wikipedia.org/wiki/Wikipedia:Wikipedia_Signpost/2025-08-09/Disinformation_report
[17]
GitHub Models 的免费 AI 服务:https://github.blog/ai-and-ml/llms/solving-the-inference-problem-for-open-source-ai-projects-with-github-models/
[18]
用 JavaScript 生成迷宫:https://jrsinclair.com/articles/2025/joy-of-immutable-data-recursion-pure-functions-javascript-mazes/
[19]
Cloudflare 不是 CDN:https://magecdn.com/blog/2025/08/11/cloudflare-not-a-cdn/
[20]
Git 如何处理大文件:https://tylercipriani.com/blog/2025/08/15/git-lfs/
[21]
10个有用的 VS Code 插件:https://www.xda-developers.com/vs-code-extensions-i-cant-live-without/
[22]
TCP 初始拥塞窗口的问题:https://jeclark.net/articles/tcp-initcwnd/?tag=performance
[23]
doxx:https://github.com/bgreenwell/doxx
[24]
IntraScribe:https://github.com/weynechen/intrascribe
[25]
@weynechen:https://github.com/ruanyf/weekly/issues/7542
[26]
P2P Remote Desktop:https://github.com/miroslavpejic85/p2p
[27]
@miroslavpejic85:https://github.com/ruanyf/weekly/issues/7547
[28]
CuteClock:https://github.com/AkenClub/CuteClock
[29]
@AkenClub:https://github.com/ruanyf/weekly/issues/7553
[30]
CleanYourMac:https://github.com/GitDzreal93/clean-your-mac
[31]
@GitDzreal93:https://github.com/ruanyf/weekly/issues/7555
[32]
Next QR Code Generator:https://github.com/chromium-style-qrcode/next-qrcode-generator
[33]
@liuliangsir:https://github.com/ruanyf/weekly/issues/7563
[34]
Translator 快速翻译:https://github.com/AnYi-0/Translator
[35]
@AnYi-0:https://github.com/ruanyf/weekly/issues/7562
[36]
Jupyter Notebook 转换网站:https://ipynbtopdf.net/
[37]
@CurioChen77:https://github.com/ruanyf/weekly/issues/7587
[38]
Docker Pull Script:https://github.com/luckfu/docker_pull
[39]
@luckfu:https://github.com/ruanyf/weekly/issues/5931#issuecomment-3205330268
[40]
Make Graph:https://makegraph.app/editor
[41]
@bimohxh:https://github.com/ruanyf/weekly/issues/7597
[42]
ChartFromText:https://chartfromtext.com/
[43]
@StevenWuHao:https://github.com/ruanyf/weekly/issues/7601
[44]
OpenAI Progress:https://progress.openai.com/
[45]
MCP Playground:https://mcpso.cc/kchat/index.html
[46]
@mcpexplorer:https://github.com/ruanyf/weekly/issues/7550
[47]
Coro Code:https://github.com/Blushyes/coro-code
[48]
@Blushyes:https://github.com/ruanyf/weekly/issues/7561
[49]
Claude Code Status Bar Monitor:https://github.com/leeguooooo/claude-code-usage-bar
[50]
@leeguooooo:https://github.com/ruanyf/weekly/issues/7588
[51]
中小学语文示范诵读库:https://zedex.github.io/mandarin-reading-resource/
[52]
中小学语文示范诵读库:https://edu.cnr.cn/eduzt/ywkwsfsd/
[53]
@ZedeX:https://github.com/ruanyf/weekly/issues/7556
[54]
在线硬件测试平台:https://volumeshader.org/zh
[55]
@linhuaqian:https://github.com/ruanyf/weekly/issues/7552
[56]
业余无线电执照考试模拟:https://github.com/AlliotTech/ham-exam-web
[57]
@AlliotTech:https://github.com/ruanyf/weekly/issues/7585
[58]
Citywalki:https://www.citywalki.com
[59]
滚动时间最长的滚轮胎:https://kottke.org/25/08/roll-on-you-crazy-tire
[60]
一个视频:https://www.youtube.com/watch?v=tLpQ5bcxouw
[61]
沃兹尼亚克的故事:https://daringfireball.net/linked/2025/08/15/woz-on-slashdot
[62]
《AI 引发的身份危机》:https://dusty.phillips.codes/2025/06/08/my-ai-driven-identity-crisis/
[63]
Hacker News 读者:https://news.ycombinator.com/item?id=44936016
[64]
《AI 让人产生虚假的掌控感》:https://playtechnique.io/blog/ai-doesnt-lighten-the-burden-of-mastery.html
[65]
尼克劳斯·维尔特:https://en.wikiquote.org/wiki/Niklaus_Wirth
[66]
一份谷歌离职报告:https://www.ruanyifeng.com/blog/2024/08/weekly-issue-315.html
[67]
WiFi 的后面是 LiFi:https://www.ruanyifeng.com/blog/2023/08/weekly-issue-265.html
[68]
互联网最喜欢的行为模式:https://www.ruanyifeng.com/blog/2022/07/weekly-issue-215.html
[69]
全端 App 的时代: https://www.ruanyifeng.com/blog/2021/07/weekly-issue-165.html