這裡記錄每週值得分享的科技內容,週五發佈。
本雜誌開源,歡迎投稿。另有《誰在招人》服務,發佈程序員招聘信息。合作請郵件聯繫([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 新產品
谷歌本週公開了兩個新產品。

這是谷歌最新的"文生圖"模型,可以在官網免費使用,參見介紹文章。
我覺得,圖片生成速度很快,效果相當好(比如下圖"機器人拿著一塊紅色滑板")。


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 文件的命令行工具。

面向企事業單位內網環境的一個"語音轉文字"的管理協作平臺。(@weynechen 投稿)

一個開源的 Windows 遠程桌面工具,直接運行可執行文件打開遠程桌面,無需配置和安裝。(@miroslavpejic85 投稿)

一個開源硬件項目,基於 ESP8266 的智能時鐘,可以顯示時間和天氣,支持小愛同學語音控制,自帶 Web 和小程序客戶端。(@AkenClub 投稿)

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

Firefox 瀏覽器的開源插件,為頁面生成類似 Chrome 的二維碼。(@liuliangsir 投稿)

Chrome 瀏覽器的離線翻譯插件,基於瀏覽器新的 Translator API 和 Language Detector API,不用網絡也能翻譯。(@AnYi-0 投稿)

這個網站可以將 ipynb 文件轉化為 PDF、HTML 和 Python。(@CurioChen77 投稿)
一個 Python 腳本,用於從指定鏡像源下載 Docker 鏡像,支持併發下載、智能緩存(layer 增量更新)。(@luckfu 投稿)
10、Make Graph

在線圖表製作網站,支持主流圖表類型,可導出 SVG。(@bimohxh 投稿)
另有一個類似工具 ChartFromText,輸入數據,在線生成各種圖表。(@StevenWuHao 投稿)

AI 相關

OpenAI 的官方項目,展示 AI 的發展歷程:每一年,同樣的提示語,不一樣的輸出。

這個 Web 應用可以用作 MCP 客戶端,指定 AI 模型和 MCP 服務器,在線使用。(@mcpexplorer 投稿)

基於終端的 AI 編碼代理,Claude Code 的開源替代品。(@Blushyes 投稿)
4、Claude Code Status Bar Monitor

Claude Code 的插件,實時顯示使用量和重置時間等信息。(@leeguooooo 投稿)
資源

中央人民廣播電臺中小學語文示範誦讀庫的 Web 前端,課文按年級、學期分類。(@ZedeX 投稿)
2、在線硬件測試平臺

網頁測試各種硬件(GPU、屏幕、網絡、攝像頭、聲音、鼠標、鍵盤)。(@linhuaqian 投稿)
3、業餘無線電執照考試模擬(2025 題庫)

基於官方最新題庫構建的在線模擬與練習的 Web 應用。(@AlliotTech 投稿)

這個網站讓你感受在世界200多個城市步行/開車/飛無人機。選擇城市和移動方式後,它會全屏播放相應的 Youtube 視頻,體驗不錯。
圖片
推薦 Youtube 的一個視頻。
一群藝術家爬上智利最高的沙丘之一,在上面扔下一隻輪胎,用無人機全程拍攝,看看它會滾動多久。

輪胎在沙漠裡,差不多滾動了三分鐘,視頻就是這三分鐘的全程滾動,非常壯觀和紓壓。


文摘
1、沃茲尼亞克的故事
今年8月11日,是蘋果公司聯合創始人史蒂夫·沃茲尼亞克 (Steve Wozniak) 75 歲的生日。

網絡論壇 Slashdot 轉載了新聞媒體關於他的生日報道。有人留言,惋惜地說,如果他沒有賣掉蘋果股票,早就是世界數一數二的富翁了。
沃茲尼亞克本人看到這條留言,在下面回覆了一段話。
"我賣掉和捐贈了所有蘋果股票,原因是財富和權力不是我生活的目的。
我更希望自己擁有快樂和幸福。我資助了聖何塞(我出生在那裡)的許多博物館和藝術團體,他們還以我的名字命名了一條街道。
二十年來,我一直公開演講,收入可能達到1000萬美元。這足夠我用了。"
這段話令人想起一本介紹蘋果公司歷史的書籍,裡面曾經提到沃茲的故事。
從學生時代起,他就對自己的財富漫不經心。後來有錢了,也依然如此。
他從不記錄自己的開銷,也懶得聽取理財建議。別人尋求幫助時,他經常當場開出支票。
與喬布斯嚴格保管自己的蘋果股票不同,他送給了父母、姐姐和弟弟400萬美元股票,送給了朋友200萬美元股票。父親在他車裡撿到過25萬美元的未兌現支票,感嘆說:"像他這樣的人不應該有那麼多錢。"
有一次,他來到蘋果公司大聲宣佈:"我的律師建議多元化投資,所以我剛剛買下了一家電影院。"但這件事後來引起了一些麻煩。這家電影院位於聖何塞東區貧民窟,放映了一部黑幫電影,引發了社區的抗議。他參加了幾次社區會議,聽取了當地居民的意見,承諾他的劇院不會放映暴力或色情電影,然後他在空蕩蕩的、黑暗的劇院裡度過了幾個下午,坐著不停看電影,扮演審查員的角色。
言論
1、
我計劃寫一本 Gleam 編程語言的書。但是,AI 已經能非常清晰地解釋 Gleam 了,而且還能回應讀者的任何要求。
雖然我自信,自己目前寫得要比 AI 好,但是實在沒有理由,說服自己去這樣做。你花數百小時寫書,賺到的錢根本不值得這樣付出。
有了 AI,我不知道,人們以後寫書的動力是什麼,大概只會為了樂趣而寫作。
-- 《AI 引發的身份危機》
2、
讓我難以抗拒的是,與中國打交道比與世界其他任何地方打交道都容易得多。我給中國某人發郵件,對方肯定會在24小時內回覆,更有可能在4小時內。
給一家歐盟或美國公司發郵件,通常要等上好幾天才能收到回覆。在與中國公司打交道時,我從未見過這種情況,一次也沒有。而且,他們的 B2B 大型電商平臺幾乎總是提供全天候在線客服和採購支持。
3、
AI 不會減少你掌握新技能所需要付出的努力,只會讓你產生不必學習就已經學會的錯覺。
4、
可靠、透明的程序通常不符合程序設計者的利益。
-- 尼克勞斯·維爾特(Niklaus Wirth),計算機科學家,圖靈獎得主
往年回顧
一份谷歌離職報告(#315)
WiFi 的後面是 LiFi(#265)
互聯網最喜歡的行為模式(#215)
全端 App 的時代(#165)
(完)












