[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-why-distributed-systems-feel-so-weird-zh":3,"article-related-why-distributed-systems-feel-so-weird-zh":28,"series-industry-5d130eaa-4020-425f-8560-79a030c9f957":81},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":11,"views":25,"created_at":26,"published_at":27,"topic_cluster_id":11},"5d130eaa-4020-425f-8560-79a030c9f957","why-distributed-systems-feel-so-weird-zh","分散式系統為何這麼怪","\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","industry","zh","eed49c58-cac4-4542-b3ac-0412e5ad3835",[17,18,19,20,21,22,23,24],"分散式系統","AWS","Builders Library","timeout","retry","idempotency","微服務","網路故障",4,"2026-04-02T23:06:32.56818+00:00","2026-04-02T23:06:32.379+00:00",{"tags":29,"relatedLang":40,"relatedPosts":44},[30,31,33,34,35,36,37,39],{"name":23,"slug":23},{"name":18,"slug":32},"aws",{"name":24,"slug":24},{"name":22,"slug":22},{"name":17,"slug":17},{"name":20,"slug":20},{"name":19,"slug":38},"builders-library",{"name":21,"slug":21},{"id":15,"slug":41,"title":42,"language":43},"why-distributed-systems-feel-so-weird-en","Why Distributed Systems Feel So Weird","en",[45,51,57,63,69,75],{"id":46,"slug":47,"title":48,"cover_image":49,"image_url":49,"created_at":50,"category":13},"87a8a5d1-7284-4c58-aa53-9f353d5a2800","why-jensen-huang-keynote-bigger-than-nvidia-zh","為什麼 Jensen Huang 的 keynote 比 Nvidia 更重要","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780530468418-zi6e.png","2026-06-03T23:47:22.014083+00:00",{"id":52,"slug":53,"title":54,"cover_image":55,"image_url":55,"created_at":56,"category":13},"b5d4728c-ee2a-4df6-93c2-42e814d51ea1","why-smci-rally-is-about-supply-not-just-ai-zh","為什麼 SMCI 的漲勢主要是供給故事，不只是 Agentic AI","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780529579886-q16r.png","2026-06-03T23:32:28.626882+00:00",{"id":58,"slug":59,"title":60,"cover_image":61,"image_url":61,"created_at":62,"category":13},"6321e31d-d862-4666-b105-cd24c26d6f5a","nvidia-huang-ai-boom-agent-demand-zh","黃仁勳：AI 代理需求撐起晶片行情","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780528669292-jtux.png","2026-06-03T23:17:26.844843+00:00",{"id":64,"slug":65,"title":66,"cover_image":67,"image_url":67,"created_at":68,"category":13},"c15e2bff-fceb-4990-bb15-197233a20c5c","arms-windows-on-arm-pitch-turns-into-a-playbook-zh","Arm 的 Windows on Arm 變成轉場模板","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780527800667-z8yc.png","2026-06-03T23:02:51.413117+00:00",{"id":70,"slug":71,"title":72,"cover_image":73,"image_url":73,"created_at":74,"category":13},"944aacaa-7f1b-4a11-8390-768b2a89c607","anthropic-partner-network-enterprise-ready-zh","Anthropic 讓夥伴網路變企業級","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780524191103-89dy.png","2026-06-03T22:02:45.952347+00:00",{"id":76,"slug":77,"title":78,"cover_image":79,"image_url":79,"created_at":80,"category":13},"fc8eafb2-1d73-468c-a784-1279f4732ea2","7-build-2026-announcements-for-microsoft-watchers-zh","7 個 Build 2026 觀察重點","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780523288803-hs3b.png","2026-06-03T21:47:43.306492+00:00",[82,87,92,97,102,107,112,117,122,127],{"id":83,"slug":84,"title":85,"created_at":86},"ee073da7-28b3-4752-a319-5a501459fb87","ai-in-2026-what-actually-matters-now-zh","2026 AI 真正重要的事","2026-03-26T07:09:12.008134+00:00",{"id":88,"slug":89,"title":90,"created_at":91},"83bd1795-8548-44c9-9a7e-de50a0923f71","trump-ai-framework-power-speech-state-preemption-zh","川普 AI 框架瞄準電力、言論與州權","2026-03-26T07:12:18.695466+00:00",{"id":93,"slug":94,"title":95,"created_at":96},"ea6be18b-c903-4e54-97b7-5f7447a612e0","nvidia-gtc-2026-big-ai-announcements-zh","NVIDIA GTC 2026 重點拆解","2026-03-26T07:14:26.62638+00:00",{"id":98,"slug":99,"title":100,"created_at":101},"4bcec76f-4c36-4daa-909f-54cd702f7c93","claude-users-spreading-out-and-getting-better-zh","Claude 用戶更分散，也更會用","2026-03-26T07:22:52.325888+00:00",{"id":103,"slug":104,"title":105,"created_at":106},"bd903b15-2473-4178-9789-b7557816e535","openclaw-raises-hard-question-for-ai-models-zh","OpenClaw 逼問 AI 模型價值","2026-03-26T07:24:54.707486+00:00",{"id":108,"slug":109,"title":110,"created_at":111},"eeac6b9e-ad9d-4831-8eec-8bba3f9bca6a","gap-google-gemini-checkout-fashion-search-zh","Gap 把結帳搬進 Gemini","2026-03-26T07:28:23.937768+00:00",{"id":113,"slug":114,"title":115,"created_at":116},"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":118,"slug":119,"title":120,"created_at":121},"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":123,"slug":124,"title":125,"created_at":126},"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":128,"slug":129,"title":130,"created_at":131},"191d9b1b-768a-478c-978c-dd7431a38149","mistral-ai-faces-its-hardest-year-yet-zh","Mistral AI 迎來最硬的一年","2026-03-26T07:40:23.716374+00:00"]