[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-why-distributed-systems-feel-so-weird-zh":3,"tags-why-distributed-systems-feel-so-weird-zh":33,"related-lang-why-distributed-systems-feel-so-weird-zh":44,"related-posts-why-distributed-systems-feel-so-weird-zh":48,"series-industry-5d130eaa-4020-425f-8560-79a030c9f957":85},{"id":4,"title":5,"content":6,"summary":7,"source":8,"source_url":9,"author":10,"image_url":11,"keywords":12,"language":21,"translated_content":10,"views":22,"is_premium":23,"created_at":24,"updated_at":24,"cover_image":11,"published_at":25,"rewrite_status":26,"rewrite_error":10,"rewritten_from_id":27,"slug":28,"category":29,"related_article_id":30,"status":31,"google_indexed_at":32,"x_posted_at":10,"tweet_text":10,"title_rewritten_at":10,"title_original":10,"key_takeaways":10,"topic_cluster_id":10,"embedding":10,"is_canonical_seed":23},"5d130eaa-4020-425f-8560-79a030c9f957","分散式系統為何這麼怪","\u003Cp>1999 年的 Amazon，伺服器少到會幫機器取名。像是「fishy」和「online-01」。聽起來很可愛，但問題一點也不萌。只要系統跨過多台機器，故障就不再是偶發 bug，而是日常。\u003C\u002Fp>\u003Cp>在 \u003Ca href=\"https:\u002F\u002Faws.amazon.com\u002Fbuilders-library\u002Fchallenges-with-distributed-systems\u002F\" target=\"_blank\" rel=\"noopener\">AWS Builders’ Library\u003C\u002Fa> 這篇文章裡，核心意思很直接。一次請求看起來像一個函式呼叫。實際上，它會變成一串網路傳送、驗證、狀態更新和回應。每一步都可能壞掉。\u003C\u002Fp>\u003Cp>所以你會覺得分散式系統很怪。不是你太菜。是它本來就違反直覺。單機程式的思路，到了多機環境，常常直接失靈。\u003C\u002Fp>\u003Ch2>三種系統，三種痛法\u003C\u002Fh2>\u003Cp>AWS 把分散式系統分成三類。離線系統、軟即時系統、硬即時系統。這個切法很實用。因為不同工作負載，能承受的失敗成本差很多。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1775171208214-bz3p.png\" alt=\"分散式系統為何這麼怪\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>離線系統最舒服。像批次運算、影像渲染、資料分析。慢一點沒關係。重試幾次也沒差。反正沒人坐在螢幕前等它回來。\u003C\u002Fp>\u003Cp>軟即時系統介於中間。像搜尋索引更新、EC2 憑證傳播、壞機器偵測。它們要快，但不是每毫秒都要命。延遲可以忍，前提是結果最後要對。\u003C\u002Fp>\u003Cp>硬即時系統就比較慘。像 Web API、訂單流程、付款授權、電話系統。使用者現在就在等。你不能慢吞吞，也不能一直重送。\u003C\u002Fp>\u003Cul>\u003Cli>離線系統：批次處理、資料分析、渲染農場\u003C\u002Fli>\u003Cli>軟即時系統：搜尋索引、狀態同步、憑證更新\u003C\u002Fli>\u003Cli>硬即時系統：API、付款、訂單、直播控制流程\u003C\u002Fli>\u003Cli>痛點差異：可不可以重試，差很多\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這個分類很重要。因為容錯策略會跟著變。離線系統可以慢慢補。硬即時系統卻得在幾百毫秒內做決定。這時候，網路抖一下，整個服務體驗就會歪掉。\u003C\u002Fp>\u003Cp>講白了，分散式系統不是單機程式加幾台伺服器。它是另一種世界觀。你一旦跨過故障邊界，假設就全部要重寫。\u003C\u002Fp>\u003Ch2>一次呼叫，拆成八個步驟\u003C\u002Fh2>\u003Cp>文章最有感的地方，是它把 request\u002Freply 拆開看。單機上的函式呼叫，看起來很單純。跨網路之後，它會變成八個步驟。送出請求、傳送、驗證、更新伺服器狀態、送出回應、傳回、驗證、更新客戶端狀態。\u003C\u002Fp>\u003Cp>這八步不是在湊字數。每一步都能獨立失敗。請求可能根本沒送出去。伺服器可能收到了，但在回應前掛掉。回應可能到了客戶端，卻因為版本不合而被丟掉。\u003C\u002Fp>\u003Cp>你可以把它想成線上遊戲的 Pac-Man。你在本機寫下 \u003Ccode>board.find(\"pacman\")\u003C\u002Fcode>，看起來像查陣列。實際上，背後可能是遠端呼叫、序列化、timeout、重送、再驗證。\u003C\u002Fp>\u003Cblockquote>“The network enables sending messages from one fault domain to another.” — \u003Ca href=\"https:\u002F\u002Faws.amazon.com\u002Fbuilders-library\u002Fchallenges-with-distributed-systems\u002F\" target=\"_blank\" rel=\"noopener\">Amazon Builders’ Library\u003C\u002Fa>\u003C\u002Fblockquote>\u003Cp>這句話很狠。也很準。網路把兩個故障域連在一起。然後你就不能再把它當成一個函式呼叫看待。你得把它當成一段有風險的協議。\u003C\u002Fp>\u003Cp>我覺得很多團隊卡在這裡。程式碼看起來乾淨。測試也綠燈。上線後卻開始出現怪問題。原因通常不是邏輯錯，而是時間錯。分散式系統最愛用 ti\u003Ca href=\"\u002Fnews\u002Fgoogles-gemini-3-1-flash-live-real-time-voice-ai-zh\">min\u003C\u002Fa>g 搞人。\u003C\u002Fp>\u003Ch2>故障不是例外，是常態\u003C\u002Fh2>\u003Cp>AWS 一直強調 failure。因為在分散式系統裡，failure 不是少數情況。它就是日常。單機世界裡，CPU 壞了或 k\u003Ca href=\"\u002Fnews\u002Fferresdb-production-rust-vector-db-updates-zh\">er\u003C\u002Fa>nel panic，整台機器通常一起死。這叫 fate sharing。雖然慘，但好理解。\u003C\u002Fp>\u003Cp>跨機器就不一樣了。客戶端活著，伺服器死了。伺服器收到了請求，卻在回應前當機。網路丟包，但兩邊都顯示健康。這種情況最煩，因為你很難一眼看出誰出包。\u003C\u002Fp>\u003Cp>所以工程師才會一直講 timeout、retry、idempotency、versioning。這些詞聽起來很無聊，但它們就是生存工具。少一個，API 就可能變成半套系統。\u003C\u002Fp>\u003Cp>下面這些步驟，都可能壞：\u003C\u002Fp>\u003Cul>\u003Cli>請求送出失敗，因為網路斷線或連線被拒\u003C\u002Fli>\u003Cli>請求送達後，伺服器中途當掉\u003C\u002Fli>\u003Cli>請求驗證失敗，因為資料格式不合或版本不一致\u003C\u002Fli>\u003Cli>伺服器更新狀態失敗，因為儲存或記憶體出錯\u003C\u002Fli>\u003Cli>回應送出失敗，明明已經處理完了\u003C\u002Fli>\u003Cli>回應傳回失敗，封包在路上消失\u003C\u002Fli>\u003Cli>客戶端驗證失敗，因為收到不完整資料\u003C\u002Fli>\u003Cli>客戶端更新狀態失敗，因為本地狀態已經變了\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這就是為什麼分散式團隊很愛做重試保護。不是矯情。是因為你根本不知道失敗發生在\u003Ca href=\"\u002Fnews\u002Fmetaverse-stage-in-internet-history-zh\">哪一步\u003C\u002Fa>。更麻煩的是，有些失敗你只看 log 還抓不到。\u003C\u002Fp>\u003Cp>假設伺服器已經做完事，卻在回應前死掉。客戶端只看到 timeout，然後重送一次。這時候如果你的 API 不是 idempotent，就很容易做兩次同樣的事。付款、下單、扣庫存，全部會炸。\u003C\u002Fp>\u003Ch2>單機呼叫和網路呼叫，差很多\u003C\u002Fh2>\u003Cp>單機上的函式呼叫，失敗面很小。記憶體、CPU、執行緒，差不多就在同一個故障域裡。你可以把它想成一個房間裡的事情。出事了，通常是整間一起出事。\u003C\u002Fp>\u003Cp>網路呼叫就像把事情交給另一棟樓。你多了傳輸、序列化、驗證、延遲、封包遺失。每一層都可能出問題。這也是為什麼分散式系統常常看起來像在跟現實打架。\u003C\u002Fp>\u003Cp>下面這個比較很直觀：\u003C\u002Fp>\u003Cul>\u003Cli>單機呼叫：一個故障域，一個 process，一個記憶體空間\u003C\u002Fli>\u003Cli>網路呼叫：至少兩個故障域，外加中間那條網路\u003C\u002Fli>\u003Cli>單機失敗：通常整個 process 直接掛\u003C\u002Fli>\u003Cli>網路失敗：一邊活著，另一邊卡住或死掉\u003C\u002Fli>\u003Cli>離線工作：可以慢慢重試\u003C\u002Fli>\u003Cli>硬即時工作：要在時間內回應，不能拖\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這也解釋了，為什麼很多人第一次接觸微服務會翻白眼。看起來只是多拆幾個服務。實際上，失敗模式直接暴增。你不只是在寫軟體。你是在設計一套會跟時間賽跑的協議。\u003C\u002Fp>\u003Cp>講得更白一點，單機世界的錯誤通常是「壞了」。分散式世界的錯誤常常是「半壞」。而半壞最難搞，因為它會騙你。\u003C\u002Fp>\u003Ch2>這跟雲端服務有什麼關係\u003C\u002Fh2>\u003Cp>如果你在做 API、支付、控制平面，這篇 AWS 文章其實是在提醒你一件事。跨機器之後，失敗就是正常輸入，不是例外。你不能等它發生才補救。你得先設計好。\u003C\u002Fp>\u003Cp>這也是為什麼大型雲端服務很在意冗餘、重試、去重、版本相容性。每一個看起來很 boring 的功能，背後都在處理現實世界的爛狀況。說真的，這些東西比花俏的 UI 更重要。\u003C\u002Fp>\u003Cp>你如果想把這件事再往下挖，可以看 \u003Ca href=\"https:\u002F\u002Faws.amazon.com\u002Fbuilders-library\u002F\" target=\"_blank\" rel=\"noopener\">AWS Builders’ Library\u003C\u002Fa> 的其他文章。裡面很多內容都在講 timeout、負載、隔離、失敗處理。也可以對照 \u003Ca href=\"https:\u002F\u002Fmartinfowler.com\u002Farticles\u002Fmicroservices.html\" target=\"_blank\" rel=\"noopener\">Martin Fowler 的 Microservices\u003C\u002Fa>。微服務不是魔法。它只是把複雜度換個地方放。\u003C\u002Fp>\u003Cp>另一個很實際的參考是 \u003Ca href=\"https:\u002F\u002Fkubernetes.io\u002F\" target=\"_blank\" rel=\"noopener\">Kubernetes\u003C\u002Fa>。它幫你管排程和健康檢查，但不會幫你消滅分散式問題。你的服務還是要自己處理 timeout、重送、與狀態一致性。\u003C\u002Fp>\u003Ch2>真正該記住的事\u003C\u002Fh2>\u003Cp>這篇文章最值錢的地方，不是它講了多少術語。是它把分散式系統的本質講清楚了。只要請求要跨機器，事情就會變得不單純。每一步都可能失敗。每一次成功，也可能只是暫時的成功。\u003C\u002Fp>\u003Cp>所以我會給開發者一個很實際的建議。下次你設計服務時，先別畫架構圖。先寫下三件事：timeout 多久、重試幾次、重送會不會重複執行。這三題答不出來，後面八成會出事。\u003C\u002Fp>\u003Cp>如果你在做台灣常見的電商、金流、物流 API，這件事更重要。因為這些系統每天都在吃高流量。一次 timeout 可能只是小事。十萬次 timeout 就是事故。\u003C\u002Fp>\u003Cp>我自己的預測很簡單。接下來幾年，會越來越多團隊把重點放在 failure design，而不是只拼功能速度。你可以先問自己一句：當 request 到了 server，但 reply 沒回來時，你的系統到底會做什麼？\u003C\u002Fp>","AWS 用很直白的方式解釋分散式系統為何難搞：一次請求會跨過多個故障域，每一步都可能獨立失敗。","aws.amazon.com","https:\u002F\u002Faws.amazon.com\u002Fbuilders-library\u002Fchallenges-with-distributed-systems\u002F",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1775171208214-bz3p.png",[13,14,15,16,17,18,19,20],"分散式系統","AWS","Builders Library","timeout","retry","idempotency","微服務","網路故障","zh",2,false,"2026-04-02T23:06:32.56818+00:00","2026-04-02T23:06:32.379+00:00","done","94a2b774-b6d8-4acc-a465-58a518e3458f","why-distributed-systems-feel-so-weird-zh","industry","eed49c58-cac4-4542-b3ac-0412e5ad3835","published","2026-04-07T07:41:14.818+00:00",[34,35,37,38,39,40,41,43],{"name":19,"slug":19},{"name":14,"slug":36},"aws",{"name":20,"slug":20},{"name":18,"slug":18},{"name":13,"slug":13},{"name":16,"slug":16},{"name":15,"slug":42},"builders-library",{"name":17,"slug":17},{"id":30,"slug":45,"title":46,"language":47},"why-distributed-systems-feel-so-weird-en","Why Distributed Systems Feel So Weird","en",[49,55,61,67,73,79],{"id":50,"slug":51,"title":52,"cover_image":53,"image_url":53,"created_at":54,"category":29},"cd078ce9-0a92-485a-b428-2f5523250a19","circles-agent-stack-targets-machine-speed-payments-zh","Circle 推出 Agent Stack，瞄準機器速度支付","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778871663628-uyk5.png","2026-05-15T19:00:44.16849+00:00",{"id":56,"slug":57,"title":58,"cover_image":59,"image_url":59,"created_at":60,"category":29},"96d96399-f674-4269-997a-cddfc34291a0","iren-signs-nvidia-ai-infrastructure-pact-zh","IREN 綁上 Nvidia AI 基建","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778871057561-bukp.png","2026-05-15T18:50:37.57206+00:00",{"id":62,"slug":63,"title":64,"cover_image":65,"image_url":65,"created_at":66,"category":29},"de12a36e-52f9-4bca-8deb-a41cf974ffd9","circle-agent-stack-ai-payments-zh","Circle 推出 Agent Stack 做 AI 付款","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778870462187-t9xv.png","2026-05-15T18:40:30.945394+00:00",{"id":68,"slug":69,"title":70,"cover_image":71,"image_url":71,"created_at":72,"category":29},"e6379f8a-3305-4862-bd15-1192d3247841","why-nebius-ai-pivot-is-more-real-than-hype-zh","為什麼 Nebius 的 AI 轉型比炒作更真實","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778823044520-9mfz.png","2026-05-15T05:30:24.978992+00:00",{"id":74,"slug":75,"title":76,"cover_image":77,"image_url":77,"created_at":78,"category":29},"66c4e357-d84d-43ef-a2e7-120c4609e98e","nvidia-backs-corning-factories-with-billions-zh","Nvidia 出資 Corning 工廠擴產","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778822450270-trdb.png","2026-05-15T05:20:27.701475+00:00",{"id":80,"slug":81,"title":82,"cover_image":83,"image_url":83,"created_at":84,"category":29},"31d8109c-8b0b-46e2-86bc-d274a03269d1","why-anthropic-gates-foundation-ai-public-goods-zh","為什麼 Anthropic 和 Gates Foundation 應該投資 A…","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778796636474-u508.png","2026-05-14T22:10:21.138177+00:00",[86,91,96,101,106,111,116,121,126,131],{"id":87,"slug":88,"title":89,"created_at":90},"ee073da7-28b3-4752-a319-5a501459fb87","ai-in-2026-what-actually-matters-now-zh","2026 AI 真正重要的事","2026-03-26T07:09:12.008134+00:00",{"id":92,"slug":93,"title":94,"created_at":95},"83bd1795-8548-44c9-9a7e-de50a0923f71","trump-ai-framework-power-speech-state-preemption-zh","川普 AI 框架瞄準電力、言論與州權","2026-03-26T07:12:18.695466+00:00",{"id":97,"slug":98,"title":99,"created_at":100},"ea6be18b-c903-4e54-97b7-5f7447a612e0","nvidia-gtc-2026-big-ai-announcements-zh","NVIDIA GTC 2026 重點拆解","2026-03-26T07:14:26.62638+00:00",{"id":102,"slug":103,"title":104,"created_at":105},"4bcec76f-4c36-4daa-909f-54cd702f7c93","claude-users-spreading-out-and-getting-better-zh","Claude 用戶更分散，也更會用","2026-03-26T07:22:52.325888+00:00",{"id":107,"slug":108,"title":109,"created_at":110},"bd903b15-2473-4178-9789-b7557816e535","openclaw-raises-hard-question-for-ai-models-zh","OpenClaw 逼問 AI 模型價值","2026-03-26T07:24:54.707486+00:00",{"id":112,"slug":113,"title":114,"created_at":115},"eeac6b9e-ad9d-4831-8eec-8bba3f9bca6a","gap-google-gemini-checkout-fashion-search-zh","Gap 把結帳搬進 Gemini","2026-03-26T07:28:23.937768+00:00",{"id":117,"slug":118,"title":119,"created_at":120},"0740e53f-605d-4d57-8601-c10beb126f3c","google-pushes-gemini-transition-to-march-2026-zh","Google 把 Gemini 轉換延到 2026 年 3…","2026-03-26T07:30:12.825269+00:00",{"id":122,"slug":123,"title":124,"created_at":125},"e660d801-2421-4529-8fa9-86b82b066990","metas-llama-4-benchmark-scandal-gets-worse-zh","Meta Llama 4 分數風波又擴大","2026-03-26T07:34:21.156421+00:00",{"id":127,"slug":128,"title":129,"created_at":130},"183f9e7c-e143-40bb-a6d5-67ba84a3a8bc","accenture-mistral-ai-sovereign-enterprise-deal-zh","Accenture 攜手 Mistral AI 賣主權 AI","2026-03-26T07:38:14.818906+00:00",{"id":132,"slug":133,"title":134,"created_at":135},"191d9b1b-768a-478c-978c-dd7431a38149","mistral-ai-faces-its-hardest-year-yet-zh","Mistral AI 迎來最硬的一年","2026-03-26T07:40:23.716374+00:00"]