30 天前,這個系列是從一句話開始的: System Design 的第一步,不是畫架構圖,而是先把問題問清楚。 今天是最後一天,與其再加一個新元件,不如看...
昨天盤點了 PokeThreads 的攻擊面,列出幾個明確的缺口:擋不住分散式的爬蟲與洗版、看不懂檔案內容、管不到內部服務之間的信任、也完全沒有「這個人能不能做...
前面我們都在處理使用者變多的問題。今天討論資安層面,換一個角度提問: 「如果有人存心想搞垮這個系統,或是想從裡面偷走一些不該拿到的東西,他會從哪裡下手?」...
到目前為止,我們的 PokeThreads 已是一套有相當程度的分散式系統,元件包含 Load Balancer、Stateless Server、Read R...
前面內容幾乎都在講後端,今天把視角切回前端。 回想 Day 3,我們的 Feed API GET /feed?cursor=abc123&limit=2...
走過這麼多次的設計與迭代,PokeThreads 已經不是一個「單純」的系統了。 一個 GET /feed Request,背後可能經過: API Gatewa...
Day 11 我們做出了最陽春的 Notification,Day 12 用 Message Queue 把它從同步流程裡拆了出去: Like API 只負責...
PokeThreads 裡有一種資料,我們從很早就開始提到,卻從來沒有認真設計過,就是計數(Counter)。 Day 8 討論 Cache 的時候,用 Lik...
我們的 PokeThreads 走到現在,已經是一個具備 Load Balancer、Stateless Server、Sharded Database、Cac...
昨天在討論 Fan-out 時提到,擁有幾千萬追蹤者的帳號一發文,就可能讓 Fan-out on Write 的寫入量瞬間爆炸,所以今天就把這個狀況抽出來單獨討...
今天回頭加強 Feed 功能,看看原本陽春的做法會有什麼問題。 先回顧原本的做法 Day 3 我們做出了最陽春的 Feed 邏輯: SELECT * FROM...
昨天把 Database 拆成多個 Shard,解決了單一 Database 裝不下所有資料的問題。 今天把這個概念套用在一個具體場景上——Follow 功能,...
Day 17 用 CAP Theorem 收尾時提到一句話:這條線會一路貫穿到後面 Sharding、Counter System 這些主題。今天就從 Shar...
昨天討論 SQL 該不該換成 NoSQL,最後留下一個疑問,一旦資料開始分散在不同種類的 Storage 上,SQL、NoSQL、Cache 各存一部分。 怎...
PokeThreads 走到今天,已經不是一個單純的 CRUD 小玩具了,但從 Day 2 開始,Database 一直都是同一種選擇,也就是 SQL。這時候很...
昨天在 API Gateway 的職責清單裡,提到它很適合順便做 Rate Limiting,但只是輕輕帶過。今天把這件事攤開來講清楚。 為什麼需要限制流量 限...
昨天把 Notification 從 PokeThreads 的 Monolith 拆成了獨立的 Notification Service,跟原本的 API S...
到目前為止,PokeThreads 已經具備了 Load Balancer、Read Replica、Cache、Stateless Server、CDN 與...
昨天做出了最陽春的 Notification System,採用最直接的同步方式: Charmander -> POST /posts/:id/like...
上一篇,我們談到實驗課排程時,先把注意力放在一件很重要的事情上: 先找到一個符合所有條件的可行解 例如實驗課表必須滿足: 同一間實驗室不能重複借用 實驗室...
上一篇,我們把「人與工作之間的分配」畫成了一張 Graph。例如: 問題變成: 哪一個人應該被分配到哪一件工作? 這就是匹配想處理的問題。但如果真的打開一個...
前面幾天,PokeThreads 的架構已經慢慢演化成分散式系統,不過所有功能都還圍繞在「發文、讀文」上。 只有這麼簡單的功能,實在太像古早時期的社群網站,今天...
Day 15 定義了五個角色——誰來做。這一篇講怎麼做:那些反覆執行的流程,被寫成一份一份的 Skill 檔案。 第三代我保留了 Spec Kit 的骨架,...
昨天把 CDN 接上了 PokeThreads,圖片跟影片不再經過 Application Server,直接由 CDN 搭配 Object Storage 提...
六月底那一天,我把需求文件裡的 11 項分完類、安排執行順序後,回頭想,指揮中心能把工作分批、判斷誰跟誰能平行做,是使用我定義好的 Agent —— Front...
前面幾天,PokeThreads 的架構已經逐漸長成分散式系統的樣子,但焦點始終放在文字貼文要怎麼被處理跟讀取,現在想加入一個很自然的新功能:讓使用者也能上傳圖...
六月底的一天,我開始陸續調整畫面,那次在一份需求文件上一次列了11個要調整的地方項目。多數是文字調整或小 bug:欄位文字要改、某個預設值該拿掉、確認頁該顯示姓...
目前 PokeThreads 的架構已經有多台 Server 和 Primary / Replica Database: Read 壓力被 Replica 分...
前幾天把 Application Server 從一台變成多台,也把 Session 從 Server Memory 搬到共用的 Session Store:...
Day 11 我把功能驗收寫成 Scenario,讓 LLM 透過 Playwright MCP 依照前置條件操作頁面。Scenario 確認的是:使用者依既定...