本期内容概要介绍了 GitHub 高级工程师关于良好系统设计的十条核心经验,强调从简单系统演进,并有效管理状态、数据库、缓存和事件。同时,内容涵盖了中国首艘火箭回收船的下水、谷歌发布的新 AI 产品 Imagen 4 和学习平台,以及多项科技动态和开源工具推荐。最后,通过苹果联合创始人沃兹尼亚克的故事和多条业界言论,探讨了财富、创造力与技术发展的关系。
GitHub 工程师谈系统设计
GitHub 高级工程师肖恩·戈德克分享了他对良好系统设计的理解,核心观点是:良好的系统是从有效的简单系统发展而来的。
程序设计是组装代码,系统设计是组装服务。 系统设计的组件是服务器、数据库、缓存、队列等。
一个良好设计的系统,能长时间不出错。如果代码让你觉得“比我想的要简单”,那它的设计就是优秀的。
千万不要从零开始设计一个复杂的系统。始终从一个有效的简单系统开始,逐步发展。
系统设计的难点在于状态。应尽量采用无状态组件,并最小化有状态组件的数量。状态的复杂性在于,一旦出错,往往需要手动修复。
状态需要保存在数据库中。数据库的设计目标应该是每张表都易于理解,避免复杂的表结构,因为它会给代码带来极大的复杂性和性能约束。
数据库往往是系统瓶颈。为避免瓶颈,可以采用一个写入节点和多个只读副本的架构。数据查询发往只读副本,写入操作发往写入节点。
耗时的操作要拆分出来,放在后台作业中,通过队列服务和作业运行器来异步完成。
当数据生成和读取速度不匹配时,经典的解决方案是缓存。
- 初级工程师希望缓存所有内容,而高级工程师希望尽量少用缓存。
- 因为缓存是状态的另一个来源,会引入状态校验和过期处理的复杂性。
大型系统通常还有事件中心(如 Kafka),它也是一个队列,用于存放“某件事发生了”的消息,并通知订阅该事件的多个服务。
不要过度使用事件,很多时候,让一个服务直接请求另一个服务的 API 是更简单的做法。
推拉模型:在向多处传送数据时,拉取(Pull)通常更简单,而推送(Push)更节省资源。具体选择要视情况而定。
谷歌的两个 AI 新产品
Imagen 4 模型 这是谷歌最新的“文生图”模型,图片生成速度快,效果好。
Learning About 一个使用 AI 生成学习教程的新平台。用户输入想学习的主题,它会生成一篇简单的入门教程,并列出可供深入学习的相关主题。
科技动态
- 英国警车将加装面部识别系统,在行驶中扫描路人面孔,与警方数据库比对,寻找可疑人士。
- 美国公司推出 Keeps 语音明信片,用户上传照片并录制语音,生成带二维码的实体明信片,收件人扫描即可收听。
- 维基百科最多语言的条目曾是艺术家大卫·伍德沃德,拥有335种语言版本,后被证实是长达十多年的自我推销行为,现已大量删除。
文章
- GitHub Models 的免费 AI 服务: GitHub 提供免费的 AI 模型调用,包括 GPT-4o、Llama 3 等,但有用量限制。
- 用 JavaScript 生成迷宫: 文章用通俗的语言介绍了一种生成迷宫的简单算法。
- Cloudflare 不是 CDN: 解释了除了流量,CDN 还有其他重要指标,解释了其免费与收费服务的区别。
- Git 如何处理大文件: 讨论了使用 Git LFS 处理大文件的问题,并提出改进建议。
- 10个有用的 VS Code 插件: 作者介绍了10个他离不开的 VS Code 插件。
- TCP 初始拥塞窗口的问题: 通俗地解释了 TCP 的“拥塞窗口”概念,并提出了改进方案。
工具
- doxx: 在终端查看 docx 文件的命令行工具。
- IntraScribe: 面向企事业单位内网的“语音转文字”协作平台。
- P2P Remote Desktop: 开源的 Windows 远程桌面工具,无需安装。
- CuteClock: 基于 ESP8266 的开源智能时钟项目。
- CleanYourMac: 开源的 Mac 智能清理工具。
- Next QR Code Generator: 为 Firefox 浏览器生成页面二维码的插件。
- Translator 快速翻译: Chrome 浏览器的离线翻译插件。
- Jupyter Notebook 转换网站: 可将 ipynb 文件转化为 PDF、HTML 等格式。
- Docker Pull Script: 支持并发下载和增量更新的 Docker 镜像下载脚本。
- Make Graph: 在线图表制作网站,支持多种图表类型。
AI 相关
- OpenAI Progress: OpenAI 的官方项目,展示 AI 在不同年份对相同提示语的输出演进。
- MCP Playground: 一个可用作 MCP 客户端的 Web 应用,可在线调用 AI 模型。
- Coro Code: 基于终端的 AI 编码代理,是 Claude Code 的开源替代品。
- Claude Code Status Bar Monitor: Claude Code 的插件,用于实时显示用量信息。
资源
- 中小学语文示范诵读库: 中央人民广播电台官方诵读库的 Web 前端。
- 在线硬件测试平台: 可在网页上测试 GPU、屏幕、摄像头、网络等各种硬件。
- 业余无线电执照考试模拟: 基于官方最新题库的在线模拟练习应用。
- Citywalki: 一个让你体验在全球200多个城市步行、开车或飞无人机的网站。
文摘
沃兹尼亚克的故事
苹果公司联合创始人史蒂夫·沃兹尼亚克在75岁生日前夕,回应了网友对他卖掉苹果股票感到惋惜的言论。
我卖掉和捐赠了所有苹果股票,原因是财富和权力不是我生活的目的。
我更希望自己拥有快乐和幸福。我资助了圣何塞的许多博物馆和艺术团体,他们还以我的名字命名了一条街道。
二十年来,我一直公开演讲,收入可能达到1000万美元。这足够我用了。
他从年轻时就对财富漫不经心,有钱后也依然如此。他曾将数百万美元的股票送给家人和朋友。他的父亲曾感叹:“像他这样的人不应该有那么多钱。”
言论
我计划写一本 Gleam 编程语言的书。但是,AI 已经能非常清晰地解释 Gleam 了……有了 AI,我不知道,人们以后写书的动力是什么,大概只会为了乐趣而写作。
让我难以抗拒的是,与中国打交道比与世界其他任何地方打交道都容易得多。我给中国某人发邮件,对方肯定会在24小时内回复,更有可能在4小时内。
AI 不会减少你掌握新技能所需要付出的努力,只会让你产生不必学习就已经学会的错觉。
可靠、透明的程序通常不符合程序设计者的利益。 — 尼克劳斯·维尔特,计算机科学家,图灵奖得主