iT邦幫忙

system design相關文章
共有 58 則文章
鐵人賽 Software Development DAY 30

技術 Day 30 從一台 Server 到今天的系統設計回顧

30 天前,這個系列是從一句話開始的: System Design 的第一步,不是畫架構圖,而是先把問題問清楚。 今天是最後一天,與其再加一個新元件,不如看...

鐵人賽 Software Development DAY 29

技術 Day 29 資安不能只靠一道牆:Security Architecture

昨天盤點了 PokeThreads 的攻擊面,列出幾個明確的缺口:擋不住分散式的爬蟲與洗版、看不懂檔案內容、管不到內部服務之間的信任、也完全沒有「這個人能不能做...

鐵人賽 Software Development DAY 28

技術 Day 28 Threat Modeling 研究哪裡會出包

前面我們都在處理使用者變多的問題。今天討論資安層面,換一個角度提問: 「如果有人存心想搞垮這個系統,或是想從裡面偷走一些不該拿到的東西,他會從哪裡下手?」...

鐵人賽 Software Development DAY 27

技術 Day 27 Multi-region 與 Data Center

到目前為止,我們的 PokeThreads 已是一套有相當程度的分散式系統,元件包含 Load Balancer、Stateless Server、Read R...

鐵人賽 Software Development DAY 26

技術 Day 26 社群網站的 Frontend

前面內容幾乎都在講後端,今天把視角切回前端。 回想 Day 3,我們的 Feed API GET /feed?cursor=abc123&limit=2...

鐵人賽 Software Development DAY 25

技術 Day 25 Observability 讓你知道系統壞在哪

走過這麼多次的設計與迭代,PokeThreads 已經不是一個「單純」的系統了。 一個 GET /feed Request,背後可能經過: API Gatewa...

鐵人賽 Software Development DAY 24

技術 Day 24 深入 Notification System

Day 11 我們做出了最陽春的 Notification,Day 12 用 Message Queue 把它從同步流程裡拆了出去: Like API 只負責...

鐵人賽 Software Development DAY 23

技術 Day 23 Counter System 如何 Scaling

PokeThreads 裡有一種資料,我們從很早就開始提到,卻從來沒有認真設計過,就是計數(Counter)。 Day 8 討論 Cache 的時候,用 Lik...

鐵人賽 Software Development DAY 22

技術 Day 22 深入探討 Search System

我們的 PokeThreads 走到現在,已經是一個具備 Load Balancer、Stateless Server、Sharded Database、Cac...

鐵人賽 Software Development DAY 21

技術 Day 21 一個人讓系統爆炸:Hot User 與 Hot Post

昨天在討論 Fan-out 時提到,擁有幾千萬追蹤者的帳號一發文,就可能讓 Fan-out on Write 的寫入量瞬間爆炸,所以今天就把這個狀況抽出來單獨討...

鐵人賽 Software Development DAY 20

技術 Day 20 Feed 走向大型系統的 Fan-out 做法

今天回頭加強 Feed 功能,看看原本陽春的做法會有什麼問題。 先回顧原本的做法 Day 3 我們做出了最陽春的 Feed 邏輯: SELECT * FROM...

鐵人賽 Software Development DAY 19

技術 Day 19 深入探討 Follow 功能

昨天把 Database 拆成多個 Shard,解決了單一 Database 裝不下所有資料的問題。 今天把這個概念套用在一個具體場景上——Follow 功能,...

鐵人賽 Software Development DAY 18

技術 Day 18 Database Sharding

Day 17 用 CAP Theorem 收尾時提到一句話:這條線會一路貫穿到後面 Sharding、Counter System 這些主題。今天就從 Shar...

鐵人賽 Software Development DAY 17

技術 Day 17 CAP Theorem - 你無法全都要

昨天討論 SQL 該不該換成 NoSQL,最後留下一個疑問,一旦資料開始分散在不同種類的 Storage 上,SQL、NoSQL、Cache 各存一部分。 怎...

鐵人賽 Software Development DAY 16

技術 Day 16 資料庫是否該用 NoSQL

PokeThreads 走到今天,已經不是一個單純的 CRUD 小玩具了,但從 Day 2 開始,Database 一直都是同一種選擇,也就是 SQL。這時候很...

鐵人賽 Software Development DAY 15

技術 Day 15 Rate Limiter 控制流量

昨天在 API Gateway 的職責清單裡,提到它很適合順便做 Rate Limiting,但只是輕輕帶過。今天把這件事攤開來講清楚。 為什麼需要限制流量 限...

鐵人賽 Software Development DAY 14

技術 Day 14 API Gateway 負責引導

昨天把 Notification 從 PokeThreads 的 Monolith 拆成了獨立的 Notification Service,跟原本的 API S...

鐵人賽 Software Development DAY 13

技術 Day 13 Monolith vs Microservices

到目前為止,PokeThreads 已經具備了 Load Balancer、Read Replica、Cache、Stateless Server、CDN 與...

鐵人賽 Software Development DAY 12

技術 Day 12 Message Queue 不讓客人等

昨天做出了最陽春的 Notification System,採用最直接的同步方式: Charmander -> POST /posts/:id/like...

鐵人賽 JavaScript DAY 28

技術 Day 27|推薦系統真的只是在找你最喜歡的東西嗎?

上一篇,我們談到實驗課排程時,先把注意力放在一件很重要的事情上: 先找到一個符合所有條件的可行解 例如實驗課表必須滿足: 同一間實驗室不能重複借用 實驗室...

鐵人賽 JavaScript DAY 26

技術 Day 25|外送平台怎麼決定誰來送你的餐?

上一篇,我們把「人與工作之間的分配」畫成了一張 Graph。例如: 問題變成: 哪一個人應該被分配到哪一件工作? 這就是匹配想處理的問題。但如果真的打開一個...

鐵人賽 Software Development DAY 11

技術 Day 11 Notification System 初型

前面幾天,PokeThreads 的架構已經慢慢演化成分散式系統,不過所有功能都還圍繞在「發文、讀文」上。 只有這麼簡單的功能,實在太像古早時期的社群網站,今天...

鐵人賽 AI Engineering DAY 16

技術 Day 16|Skill:把流程寫成一份可以維護的檔案

Day 15 定義了五個角色——誰來做。這一篇講怎麼做:那些反覆執行的流程,被寫成一份一份的 Skill 檔案。 第三代我保留了 Spec Kit 的骨架,...

鐵人賽 Software Development DAY 10

技術 Day 10 Media Pipeline 上傳一張圖片,中間發生了什麼事?

昨天把 CDN 接上了 PokeThreads,圖片跟影片不再經過 Application Server,直接由 CDN 搭配 Object Storage 提...

鐵人賽 AI Engineering DAY 15

技術 Day 15|Frontend、API、QA、Security、Documentation:agent 角色定義

六月底那一天,我把需求文件裡的 11 項分完類、安排執行順序後,回頭想,指揮中心能把工作分批、判斷誰跟誰能平行做,是使用我定義好的 Agent —— Front...

鐵人賽 Software Development DAY 9

技術 Day 9 運用 CDN 處理多媒體素材

前面幾天,PokeThreads 的架構已經逐漸長成分散式系統的樣子,但焦點始終放在文字貼文要怎麼被處理跟讀取,現在想加入一個很自然的新功能:讓使用者也能上傳圖...

鐵人賽 AI Engineering DAY 14

技術 Day 14|六月底那一週:一條流程,只做一個功能,這樣可以如何加速

六月底的一天,我開始陸續調整畫面,那次在一份需求文件上一次列了11個要調整的地方項目。多數是文字調整或小 bug:欄位文字要改、某個預設值該拿掉、確認頁該顯示姓...

鐵人賽 Software Development DAY 8

技術 Day 8 Cache 讓你不用每次都要讀 Database

目前 PokeThreads 的架構已經有多台 Server 和 Primary / Replica Database: Read 壓力被 Replica 分...

鐵人賽 Software Development DAY 7

技術 Day 7 一顆 Database 不夠用:Database Replication

前幾天把 Application Server 從一台變成多台,也把 Session 從 Server Memory 搬到共用的 Session Store:...

鐵人賽 AI Engineering DAY 12

技術 Day 12|Step 7:加上資安審查步驟

Day 11 我把功能驗收寫成 Scenario,讓 LLM 透過 Playwright MCP 依照前置條件操作頁面。Scenario 確認的是:使用者依既定...