01

為什麼需要模型,以及物理模型

認識真實世界帶來的挑戰,以及物理、架構、基礎三種互補模型各自負責什麼。

先讀原文開場,旁邊就是白話

這是一本英文書。左邊放原文、右邊放白話導讀——你既讀得懂,也順手碰了原文。

原文 · 分散式系統的三種模型 5 Summary This chapter provides an explanation of three important and complementary ways in which the design of distributed systems can usefully be described and discussed: Physical models consider the types of computers and devices that constitute a system and their interconnectivity, without details of specific technologies. Architectural models describe a system in terms of the computational and communication tasks performed by its computational elements; the computational elements being individual computers or aggregates of them supported by appropriate network interconnections. Client-server and peer-to-peer are two of the most commonly used forms of architectural model for distributed systems. Fundamental models take an abstract perspective in order to describe solutions to individual issues faced by most distributed systems.
白話導讀

認識真實世界帶來的挑戰,以及物理、架構、基礎三種互補模型各自負責什麼。

設計分散式系統的難題與三種模型總覽

認識真實世界帶來的挑戰,以及物理、架構、基礎三種互補模型各自負責什麼。

STEP 1

深度探秘

為什麼設計分散式系統這麼難?

真實世界很殘酷

一個要在真實環境長期運作的系統,必須在各式各樣的狀況與威脅下都還能正確工作。分散式系統的設計者要面對四大類麻煩:

  • 多變的使用方式:有些網頁一天被點幾百萬次,有些行動裝置時連時斷,有些多媒體應用又要超高頻寬、超低延遲。
  • 環境差異極大:硬體、作業系統、網路全都不一樣(heterogeneous,異質)。系統規模可能從十幾台到上百萬台電腦。
  • 內部問題:時鐘不同步、資料更新互相衝突、各種軟硬體失效。
  • 外部威脅:對資料完整性與機密性的攻擊、阻斷服務攻擊。

用「模型」來馴服複雜度

面對這麼多面向,我們需要 descriptive model(描述性模型)。每個模型都提供對某個面向「抽象、簡化、但一致」的描述,讓我們能討論與推理,而不被細節淹沒。

💡
關鍵

模型是把複雜系統簡化成可討論、可推理的一致描述。

STEP 2

生活妙喻

三種建築藍圖

蓋一棟大樓需要好幾張圖

想像你要描述一棟大樓,一張圖是不夠的:

  • 結構圖(物理模型):畫出有幾根柱子、幾片牆、用什麼建材——對應系統裡有哪些電腦與網路硬體。
  • 平面配置圖(架構模型):畫出客廳、廚房、臥室各自負責什麼、彼此怎麼連通——對應軟體元件各自的運算與通訊任務。
  • 物理/消防規範(基礎模型):抽象地規定「火災時怎麼逃生」「結構要承受多大地震」——對應時間、失效、安全這些每個系統都要面對的本質問題。

三張圖描述同一棟樓的不同面向,缺一不可,這正是三種模型 complementary(互補)的意思。

💡
關鍵

物理、架構、基礎模型像三張不同用途的建築藍圖,描述同一系統的不同面向。

STEP 3

實用超能力

三種模型各管什麼

三種模型分工表

模型 看的角度 回答的問題
物理模型 最具體、看硬體 有哪些電腦、裝置與網路?
架構模型 看軟體分工 哪些元件在做運算與通訊?怎麼分工?
基礎模型 最抽象、看本質難題 互動、失效、安全各有什麼特性與保證?

基礎模型又再細分為三個子模型:

flowchart TD
  A[基礎模型] --> B[互動模型 效能與時間]
  A --> C[失效模型 故障分類]
  A --> D[安全模型 威脅與防禦]

學會分辨「現在在談哪一層」,你看任何分散式系統的論文或設計文件都不會迷路。

💡
關鍵

物理看硬體、架構看分工、基礎看互動/失效/安全三大本質難題。

🔆
生活妙喻:三種互補模型 ≈ 蓋大樓的三張藍圖

結構圖、平面配置圖、消防規範各描述同一棟樓的不同面向,就像物理、架構、基礎模型描述同一系統的不同面向。

🔆
生活妙喻:抽象化(模型) ≈ 地圖

地圖刻意省略樹木與行人,只留下道路與地標,反而讓你更容易找路;模型刻意省略細節,讓我們更容易推理系統行為。

本節字彙

heterogeneity(異質性)
系統裡的硬體、作業系統、網路、語言彼此都不一樣的特性。
🧠 hetero = 不同,想成「一鍋大雜燴」什麼都有。
descriptive model(描述性模型)
對系統某個面向所做的抽象、簡化但一致的描述,用來討論與推理。
🧠 describe(描述)+ model(模型)= 用來幫你說清楚系統的工具。
complementary(互補)
幾種模型各補對方的不足,合起來才完整,而非互相取代。
🧠 像拼圖,每片補上別片缺的角。
某團隊想描述一個分散式系統「有哪些電腦、行動裝置以及它們之間的網路如何連接」,但刻意不討論用的是哪家廠牌的技術。他們最該使用哪種模型?
課文說三種模型是「互補(complementary)」的,這句話最貼切的意思是?
下列哪一個屬於課文所說分散式系統的「外部威脅(External threats)」,而非「內部問題」?

物理模型與三個世代

從最精簡的節點加網路出發,看早期、網際網路規模、當代三個世代如何演化出行動、普及、雲端運算。

STEP 1

深度探秘

最精簡的物理模型,以及三個世代

從最基本的定義出發

分散式系統的定義是:位於不同網路電腦上的硬體或軟體元件,只透過傳遞訊息來溝通與協調。把這句話畫成圖,就得到最精簡的 baseline physical model(基準物理模型):一組可擴充的電腦節點,由一個電腦網路互連,用來傳遞訊息。

三個世代

  • 早期分散式系統(1970 末–1980 初):因區域網路(多半是 Ethernet)而興起,通常 10–100 個節點,服務少(共享印表機、檔案、email),系統大致同質,開放性還不是重點。
  • 網際網路規模(1990 年代):隨網際網路爆發成長(如 Google 1996 上線),節點極多、跨組織、高度異質,因此開始重視開放標準與 middleware(如 CORBA、web services)。
  • 當代分散式系統:行動、普及(ubiquitous)、雲端/叢集運算興起,節點可達數十萬,異質性再升級。
💡
關鍵

物理模型抽掉技術細節只看硬體與網路,並隨三個世代不斷擴大規模與異質性。

STEP 2

生活妙喻

從小村莊到超級都會

城市發展史

把分散式系統的演進想成一座城市的成長:

  • 早期系統 = 小村莊:十幾戶人家、彼此都認識、房子蓋得差不多(同質),只有一間雜貨店(少數服務)。
  • 網際網路規模 = 大城市:人口暴增、來自四面八方、語言文化各異(異質),於是需要交通號誌與通用規範(開放標準與 middleware)來維持秩序。
  • 當代系統 = 超級都會圈:有人帶著手機到處移動(行動運算)、連洗衣機都連網(普及運算)、還有一整片合作供電的電廠(雲端/叢集)。

城市越大,越需要規則來協調不同背景的居民——這正是為什麼「開放性」與「服務品質」隨世代越來越重要。

💡
關鍵

三個世代就像村莊、城市、超級都會圈,規模與異質性一路攀升。

STEP 3

實用超能力

當代趨勢與 system of systems

三股當代趨勢

當代物理模型由三股趨勢推動,每一股都打破舊假設:

趨勢 打破的舊假設 帶來的新需求
行動運算 節點固定不動 service discovery、自發互通
普及運算 節點是獨立的電腦 把運算嵌入日常物件(如智慧家庭)
雲端/叢集 每個節點各自獨立負責一個角色 一群節點合力提供同一服務

系統的系統

當系統大到極致,會變成 system of systems(系統的系統)——由許多本身就是完整系統的子系統合作。例如洪水預測系統:感測器網路監測河川、叢集電腦跑模擬、另一套系統用手機發早期警報,三者各自獨立卻合作完成任務。

flowchart TD
  A[感測器網路 監測河川] --> B[叢集電腦 跑洪水模擬]
  B --> C[警報系統 透過手機通知]
💡
關鍵

行動、普及、雲端三趨勢推升異質性,極端時形成系統的系統。

🔆
生活妙喻:三個世代的演進 ≈ 村莊 → 城市 → 超級都會圈

規模與居民背景差異越來越大,越需要通用規範來協調,對應開放性與服務品質日益重要。

🔆
生活妙喻:system of systems ≈ 洪水防災指揮體系

感測網、模擬中心、警報系統各自是完整系統,合作完成防洪,就像許多子系統組成更大的系統。

本節字彙

baseline physical model(基準物理模型)
最精簡的物理模型:一組可擴充的電腦節點,用網路互連來傳遞訊息。
🧠 baseline = 底線,最低限度長這樣。
ubiquitous computing(普及運算)
把電腦嵌入日常物件與環境中,如智慧家電。
🧠 ubiquitous = 無所不在,連洗衣機都在運算。
system of systems(系統的系統)
由多個本身即為完整系統的子系統合作組成的複雜系統。
🧠 把網路是 network of networks 套用到系統,就懂了。
若要用一句話描述「基準物理模型(baseline physical model)」,下列何者最準確?
為什麼到了「網際網路規模」世代,開放標準與 middleware(如 CORBA)變得重要,但早期系統卻不太在意?
智慧洗衣機、智慧家庭把電腦嵌入日常物件,這最符合哪一股當代趨勢?
02

架構模型一:通訊的實體與範式

從系統觀點與問題觀點看「什麼在通訊」,認識 process、object、component、web service 的差異。

通訊的實體:行程、物件、元件、Web 服務

從系統觀點與問題觀點看「什麼在通訊」,認識 process、object、component、web service 的差異。

STEP 1

深度探秘

到底是「什麼」在通訊?

架構模型的四個核心問題

要理解一個分散式系統的骨架,要問四個問題:

  1. 什麼在通訊(實體)?
  2. 怎麼通訊(範式)?
  3. 它們扮演什麼角色與責任
  4. 如何放置到實體基礎設施上?

本節先回答第一個。可以從兩種觀點看:

  • 系統觀點:通訊的實體通常是 process(行程)。兩個小提醒:在感測器網路這類原始環境,作業系統可能不支援 process,此時實體是 node(節點);多數環境裡 process 還會搭配 thread(執行緒),嚴格說 thread 才是通訊端點。
  • 問題觀點:為了好寫程式,又提出更貼近問題的抽象:object、component、web service。
💡
關鍵

系統觀點下通訊的是 process(或 node/thread),問題觀點下則是 object、component、web service。

STEP 2

生活妙喻

三種「外包合作」的層級

找人合作做事

把要互相通訊的軟體實體想成你要合作的對象:

  • object(物件):像一位專業師傅,你透過一張「服務清單(interface,介面)」知道他會做哪些事,用 IDL(介面定義語言)寫清楚有哪些方法可呼叫。
  • component(元件):像一位更負責任的外包廠商,他不只列出「我提供什麼」,還明明白白告訴你「我需要你先準備好哪些東西(相依性)」,等於給你一份完整合約。沒有藏起來的隱性需求,第三方才敢放心合作。
  • web service(Web 服務):像一家掛在網路黃頁上的公司,用 URI 當地址、用 XML/Web 標準對外溝通,常跨公司邊界做生意(B2B)。

component 比 object 強的地方,就是它把「我依賴什麼」也寫進合約,消除了隱藏相依性。

💡
關鍵

object 列出能做什麼,component 還把相依性寫進合約,web service 則天生長在 Web 上跨組織服務。

STEP 3

實用超能力

怎麼選用哪一種抽象

對照表

抽象 透過什麼存取 關鍵特色 典型用途
process/thread 作業系統 系統觀點的基本單位 任何分散式系統的底層
object interface(IDL) 物件導向、自然分解問題 組織內物件導向系統
component interface + 明示相依性 完整合約、無隱藏相依 第三方可組裝的系統
web service URI + XML/Web 標準 整合於 Web、跨組織 B2B、加值整合服務

實務判斷

  • 要在同一個組織內用物件導向語言緊密整合 → object 或 component。
  • 要讓外部團隊放心組裝、消除隱藏相依 → component。
  • 要跨組織邊界、把別人現成的服務組起來變成加值服務 → web service。
flowchart TD
  A[要互相通訊的軟體實體] --> B[系統觀點 process 或 node 或 thread]
  A --> C[問題觀點 object component web service]
💡
關鍵

組織內緊密整合用 object 或 component,要消除隱藏相依用 component,要跨組織組裝用 web service。

🔆
生活妙喻:object vs component ≈ 師傅 vs 外包廠商的合約

object 只給你服務清單;component 連『我需要你先備好什麼』都寫進合約,消除隱藏相依,第三方才敢合作。

🔆
生活妙喻:web service ≈ 登記在網路黃頁的公司

用 URI 當地址、用 XML 與 Web 標準對外溝通,常跨公司邊界做生意,正是 web service 的樣貌。

本節字彙

process(行程)
正在執行的程式,有自己私有的狀態;系統觀點下通訊的基本實體。
🧠 process = 一個跑起來的程式,有自己的家當。
interface(介面)/IDL
對外公開的方法清單;IDL 是用來描述這份清單的語言。
🧠 interface = 對外窗口,只露出能做什麼。
component(元件)
像 object 但連『需要哪些其他元件/介面』都明示,提供更完整的建構合約。
🧠 component 把『我依賴什麼』也攤在陽光下。
web service(Web 服務)
用 URI 識別、以 XML 與 Web 標準互動的軟體服務,常跨組織。
🧠 service on the Web,地址是網址。
在一個連 process 抽象都不支援的感測器網路裡,依課文,通訊的實體應視為什麼?
一家公司想讓多個外部團隊各自開發模組、再放心地組裝在一起,最在意「沒有隱藏的相依性」。最適合的抽象是?
object 與 component 都透過 interface 存取,那麼 component 相較於 object 最關鍵的差異是什麼?

通訊範式:IPC、遠端呼叫與間接通訊

三大通訊範式:低階的 IPC、雙向的遠端呼叫(RPC/RMI),以及透過第三方解耦的間接通訊。

STEP 1

深度探秘

三大通訊範式

它們怎麼通訊?

分散式系統的通訊方式分三大類:

  • 行程間通訊(IPC):最低階的支援,包含訊息傳遞原語、直接用網路協定 API(socket programming)、以及多播(multicast)。
  • 遠端呼叫(remote invocation):最常見的範式,基於雙向交換,呼叫一個遠端的操作/程序/方法。底下又分:
    • request-reply 協定:在訊息傳遞上加一層 client-server 的請求—回覆模式,較原始,HTTP 即屬此類。
    • RPC(遠端程序呼叫):把遠端電腦上的程序當成本地程序來呼叫,系統自動處理參數編解碼與訊息傳遞。
    • RMI(遠端方法呼叫):類似 RPC,但在分散式物件世界,呼叫遠端物件的方法,還能傳遞物件識別。
  • 間接通訊(indirect communication):透過第三方中介,讓收送雙方解耦
💡
關鍵

IPC 是低階基礎,遠端呼叫是雙向直接呼叫,間接通訊則透過中介解耦。

STEP 2

生活妙喻

打電話 vs 留言板

兩種溝通哲學

遠端呼叫像打電話:你直接撥給某人(明確指定收件者),雙方必須同時在線,你也知道對方是誰。RPC/RMI 更厲害——它讓越洋電話聽起來就像對方在隔壁房間(呼叫遠端就像呼叫本地)。

間接通訊像公佈欄或郵局信箱

  • 空間解耦:寄信的人不必知道誰會來看(不必知道收件者是誰)。
  • 時間解耦:寄信的人和讀信的人不必同時存在(你貼公告,別人明天才看)。

打電話即時但綁得緊;留言板有延遲但超級鬆綁。這就是直接 vs 間接通訊的取捨。

💡
關鍵

遠端呼叫像打電話(即時、雙方同時在線),間接通訊像留言板(空間與時間解耦)。

STEP 3

實用超能力

間接通訊的五種武器

間接通訊技術一覽

技術 模式 一句話特色
group communication 一對多 訊息送給一個「群組」,加入群組才會收到
publish-subscribe 一對多 發布者發事件,訂閱者依興趣收到,中介負責路由
message queue 點對點 生產者投入佇列,消費者從佇列取出
tuple space 解耦 把結構化資料 tuple 放進持久空間,他人依樣式讀取
DSM(分散式共享記憶體) 共享抽象 讓不共用實體記憶體的行程像讀寫本地變數一樣共享資料

怎麼選

  • 要把同一則訊息送給很多人 → group communication 或 publish-subscribe。
  • 一對一、可靠投遞、可暫存 → message queue。
  • 讀寫雙方不必同時在線 → tuple space(持久)。
  • 想用「讀寫共享變數」的熟悉寫法 → DSM。
flowchart TD
  A[通訊範式] --> B[IPC 訊息傳遞 socket multicast]
  A --> C[遠端呼叫 request-reply RPC RMI]
  A --> D[間接通訊 群組 發布訂閱 訊息佇列 tuple空間 DSM]
💡
關鍵

間接通訊有群組、發布訂閱、訊息佇列、tuple space、DSM 五種,依一對多或解耦需求挑選。

🔆
生活妙喻:遠端呼叫 vs 間接通訊 ≈ 打電話 vs 留言板

打電話要雙方同時在線且知道對方是誰;留言板讓寄與讀的人不必同時存在、也不必知道對方,正是空間與時間解耦。

🔆
生活妙喻:RPC/RMI ≈ 把越洋電話講得像隔壁房間

底層幫你處理編解碼與訊息傳遞,讓呼叫遠端程序或方法感覺就像呼叫本地的一樣。

🔆
生活妙喻:publish-subscribe ≈ 報紙訂閱

發布者像報社印新聞(事件),訂閱者依興趣收報,中介(投遞系統)負責把對的內容送給想要的人。

本節字彙

RPC(遠端程序呼叫)
把遠端電腦上的程序當成本地程序來呼叫,底層自動處理參數與訊息。
🧠 Remote Procedure Call,遠端程序也能像本地一樣 call。
RMI(遠端方法呼叫)
RPC 的物件版,呼叫遠端物件的方法,可傳遞物件識別。
🧠 把 RPC 的 procedure 換成 object 的 method。
空間解耦 / 時間解耦
空間解耦:寄送者不需知道收件者是誰;時間解耦:雙方不需同時存在。
🧠 空間 = 不必知道是誰;時間 = 不必同時在線。
DSM(分散式共享記憶體)
讓不共用實體記憶體的行程,像讀寫本地變數一樣共享資料的抽象。
🧠 明明各自記憶體,卻假裝共用一塊。
RPC 最具突破性的貢獻是什麼?
一個股市行情系統有大量發布者持續送出價格事件,給大量依興趣訂閱的消費者。最適合的間接通訊技術是?
「寄送訊息的行程不必知道誰會收,收送雙方也不必同時存在」描述的是什麼性質?
03

架構模型二:角色、放置與架構模式

兩種最重要的架構風格,理解 client-server 的簡單與擴展瓶頸,以及 P2P 如何讓資源隨使用者成長。

角色:client-server 與 peer-to-peer

兩種最重要的架構風格,理解 client-server 的簡單與擴展瓶頸,以及 P2P 如何讓資源隨使用者成長。

STEP 1

深度探秘

兩種角色分配的架構

角色決定架構

行程(或物件、元件、服務)互動時會擔任不同角色,這些角色決定了整體架構。兩種最重要的風格:

Client-Server(主從)

  • 最常被提到、歷史最悠久、至今最廣用。
  • client 行程向 server 行程發出請求,存取 server 管理的共享資源。
  • server 也可以是別的 server 的 client。例如:web server 是檔案 server 的 client;搜尋引擎既是 server(回應瀏覽器查詢)又是 client(它的 web crawler 去抓別的網站)。

Peer-to-Peer(對等)

  • 所有行程角色對等,沒有 client/server 之分,跑的是同一個程式、提供相同介面。
  • 關鍵洞見:把使用者自己的運算與網路資源也拿來支援服務,於是資源會隨使用者人數一起成長
💡
關鍵

client-server 有明確主從角色,peer-to-peer 則人人對等且資源隨使用者成長。

STEP 2

生活妙喻

餐廳 vs 百樂餐

兩種聚餐方式

Client-server 像上餐廳:客人(client)點餐,廚房(server)做菜。簡單明瞭,但所有人都靠這一間廚房——客人一多,廚房就忙不過來,這就是 client-server 的擴展瓶頸:服務集中在單一位置,超過那台機器與網路頻寬的容量就卡住了。

Peer-to-peer 像百樂餐(potluck):每位賓客都帶一道菜來,同時也吃別人帶的菜,人人既是「供應者」也是「享用者」。來的人越多,桌上的菜反而越豐盛——這正是 P2P 最迷人的特性:資源隨參與者增加。

但百樂餐也比較亂:誰帶了什麼、東西放哪、要不要多帶一份備用(副本),協調起來複雜得多。

💡
關鍵

client-server 像單一廚房的餐廳(簡單但易塞),P2P 像百樂餐(人越多菜越多,但更難協調)。

STEP 3

實用超能力

取捨與真實案例

兩種架構對照

面向 Client-Server Peer-to-Peer
角色 明確主從 全部對等
擴展性 差(集中於單點) 好(資源隨使用者成長)
複雜度 低、直觀 高(要管副本與物件放置)
可靠度 單點易成瓶頸 物件複製到多台,較具韌性
案例 Web、DNS、FTP、郵件 Napster、BitTorrent

為什麼 P2P 變複雜

在 P2P 中,大量資料物件被分散,每台電腦只存一小部分;每個物件還要**複製(replicate)**到好幾台,以分攤負載並在某台斷線時仍可用。要「放置物件、找回物件、維護副本」,自然比 client-server 複雜許多。

flowchart TD
  A[依角色分配] --> B[client-server 主從 集中 簡單]
  A --> C[peer-to-peer 對等 分散 複雜但可擴展]
💡
關鍵

client-server 簡單但擴展差,P2P 可擴展且具韌性但要付出管理副本與放置的複雜代價。

🔆
生活妙喻:client-server ≈ 上餐廳點餐

客人點餐、廚房做菜,角色分明;但所有人靠同一間廚房,人多就塞車,反映集中化的擴展瓶頸。

🔆
生活妙喻:peer-to-peer ≈ 百樂餐 potluck

每人帶菜也吃菜,人越多菜越豐盛,對應 P2P 資源隨使用者成長;但誰帶什麼、放哪、要不要備份較難協調。

本節字彙

client-server(主從架構)
client 向 server 請求服務、存取其管理的共享資源;server 也可能是別人的 client。
🧠 點餐的是 client,做菜的是 server。
peer-to-peer(對等架構)
所有行程角色對等、跑同一程式,連使用者的資源都拿來支援服務。
🧠 peer = 同儕,大家平起平坐。
replication(複製副本)
把同一物件複製到多台電腦,以分攤負載並在斷線時仍可用。
🧠 多備幾份,壞一份不怕。
搜尋引擎『回應瀏覽器的查詢,同時又派出 web crawler 去抓其他網站』。這說明它在架構上是什麼角色?
P2P 架構最關鍵的洞見是什麼?
為什麼 client-server 在規模擴大時擴展性較差?

放置策略:多伺服器、快取、行動程式碼與行動代理

同樣的服務放在哪裡會大幅影響效能與可靠度,認識四種常見放置策略。

STEP 1

深度探秘

放在哪裡,差很多

放置(placement)為何關鍵

同樣的物件或服務,放在哪台機器、哪個行程,會大幅影響效能、可靠度與安全。放置沒有萬用公式,必須結合對應用的深入理解,考量通訊模式、機器可靠度與負載、通訊品質等。課文聚焦四種策略:

  1. 服務對應到多個伺服器:用多個 server 行程合作提供服務,可分割(partition)物件分散管理,或維持複製副本(replicate)。Web 是分割的例子;Sun NIS(共用密碼檔副本)是複製的例子;cluster 則更緊密。
  2. 快取(caching)
  3. 行動程式碼(mobile code)
  4. 行動代理(mobile agent)
💡
關鍵

放置決定效能、可靠度與安全;服務可分散到多伺服器,並以分割或複製來組織物件。

STEP 2

生活妙喻

把東西搬近一點

縮短距離的智慧

快取(cache)像家裡的小冰箱:常喝的飲料先放小冰箱(離你近的快取),要喝時先看小冰箱有沒有、且還新鮮,有就直接拿;沒有才去大賣場(原始 server)補貨。Web 瀏覽器存最近瀏覽的頁面、proxy server 為一群人共用快取,都是這個道理——把資料拉近使用者,降低延遲與對外網路的負載

行動程式碼(mobile code)像外送食譜到你家:applet 就是典型例子——你點連結,程式碼被下載到瀏覽器在本地執行,互動反應快,不必每次都隔著網路等。

行動代理(mobile agent)像派一位採購員出差:帶著程式與資料親自跑到各個站點,在當地做許多次本地查詢(例如比價各家廠商),再帶結果回來——把多次昂貴的遠端呼叫換成當地的本地呼叫。

💡
關鍵

快取像小冰箱把資料拉近,行動程式碼像把食譜送到你家本地執行,行動代理像派採購員親自出差。

STEP 3

實用超能力

好處、代價與安全風險

四策略對照

策略 主要好處 要留意
多伺服器(分割/複製) 分攤負載、提升可用性 副本一致性、協調成本
快取 降低延遲與對外負載 必須確認快取是否過期
行動程式碼 本地執行、互動順暢、可做 push 對本機資源是安全威脅
行動代理 以本地呼叫取代遠端呼叫,省通訊成本 對造訪站點是安全威脅,自身也可能被拒而無法完成任務

安全是共同主題

  • 行動程式碼可能危害本機資源,所以瀏覽器會限制 applet 對本地資源的存取
  • 行動代理對它造訪的電腦也是威脅,接收方應依代理代表的使用者身分,決定可用哪些本地資源;且代理本身也可能因被拒存取而無法完成任務,因此適用範圍有限

push 模型小知識:一般 Web 互動都由 client 發起;若要 server 主動推播(如股價更新),就需下載特別的程式碼來接收更新。

💡
關鍵

快取要防過期、行動程式碼與行動代理省了通訊卻帶來安全風險,需限制其對本地資源的存取。

🔆
生活妙喻:caching ≈ 家裡的小冰箱

常用飲料先放離你最近的小冰箱,要用先看有沒有且新鮮,沒有才去大賣場補貨,對應快取先檢查本地最新副本、否則向 server 取得。

🔆
生活妙喻:mobile agent ≈ 派出差的採購員

帶著程式與資料親赴各站點做本地查詢與比價再帶結果回來,把多次遠端呼叫換成當地的本地呼叫。

🔆
生活妙喻:mobile code ≈ 把食譜送到你家本地下廚

applet 程式碼下載到瀏覽器本地執行,互動更順,但也可能威脅本機資源,所以要被限制權限。

本節字彙

placement(放置)
決定物件或服務對應到哪些機器與行程,深刻影響效能、可靠度與安全。
🧠 放對位置,事半功倍。
cache(快取)
離 client 較近、存放最近使用資料的暫存區,先查它、過期才回 server 取。
🧠 小冰箱,先看有沒有再決定去不去賣場。
mobile code(行動程式碼)
可被下載到本地執行的程式碼,如 applet,互動快但有安全風險。
🧠 程式會跑到你的瀏覽器來。
mobile agent(行動代理)
帶著程式與資料在網路上各站點移動、做本地工作再帶結果回來的執行中程式。
🧠 一位會出差的採購員。
瀏覽器存放最近瀏覽過的網頁、proxy 為多位使用者共用一份近端副本,這屬於哪種放置策略?
使用快取時,為什麼通常要先『跟原始伺服器確認副本是否仍是最新』?
一個比價任務需要到許多廠商站點各做多次資料庫查詢。用『行動代理』而非『靜態 client 反覆遠端呼叫』,主要好處是什麼?

架構模式:分層、分層式架構、瘦客戶端與中介軟體

分層與 tier 的差別、二層三層架構取捨、AJAX 與瘦客戶端/VNC,以及 middleware 的角色與極限。

STEP 1

深度探秘

layering、tiering 與 middleware

兩個容易搞混的詞

  • layering(分層):把複雜系統切成數層,上層使用下層提供的服務,且上層不需知道下層怎麼實作。這是垂直的抽象組織。圖 2.7 介紹兩個關鍵詞:
    • platform(平台):最底層的硬體+作業系統(如 Intel x86/Linux)。
    • middleware(中介軟體):一層軟體,目的是遮蔽異質性並提供方便的程式設計模型(如 RMI、群組通訊、事件通知、資料複製等抽象)。
  • tiering(分層式/分級):與 layering 互補。layering 管垂直抽象,tiering 則是把某一層的功能切開、放到適當的伺服器(與實體節點)上
💡
關鍵

layering 是垂直抽象(上層用下層),tiering 是把功能水平地放到不同伺服器;middleware 遮蔽異質性。

STEP 2

生活妙喻

餐廳的分工與 AJAX 的小跑腿

二層 vs 三層

把一個應用拆成三塊邏輯:presentation(呈現/介面)application(應用/商業邏輯)data(資料儲存)

  • 二層:只有 client 與 server 兩個行程,通常把應用邏輯切一半放兩邊。好處是延遲低(一次來回就完成);壞處是邏輯被切過行程邊界,受限制。
  • 三層:呈現、應用、資料一對一對應到三台伺服器。好處是邏輯集中在一處、好維護,第一層可做成簡單 UI 支援瘦客戶端;壞處是多管一台、網路流量與延遲增加

AJAX:不必整頁重載的小跑腿

傳統 Web 要更新一小塊也得整頁重新請求,使用者只能乾等。AJAX 像派一個小跑腿(XmlHttpRequest),瀏覽器非同步向 server 要一小塊資料,回來只更新該部分,其餘畫面不動。Google Maps 拖地圖時即時補上新圖磚就是經典例子。

💡
關鍵

二層延遲低但邏輯被切割,三層好維護但較複雜;AJAX 用非同步小請求避免整頁重載。

STEP 3

實用超能力

瘦客戶端、其他模式與 middleware 的極限

瘦客戶端與 VNC

**thin client(瘦客戶端)**把複雜度搬到網路端的服務(如雲端),本地裝置只負責視窗式介面。好處:手機等簡單裝置也能用到強大服務。壞處:高互動圖形作業(CAD、影像處理)因要傳大量影像資料,延遲令人難忍。VNC 把這想法推到極致——協定只做一件原始的事:把一塊像素矩形畫到螢幕指定位置,因此能跨任何 OS。

其他常見模式

模式 用途
proxy 在本地造一個代理物件代表遠端物件,支援位置透明性
brokerage(仲介) service provider、requester、broker 三方促成互通
reflection(反射) 支援自省與動態修改結構或行為

middleware 也有極限:end-to-end argument

有些與通訊相關的功能,只有站在通訊端點的應用程式自己才能完整可靠地實作。例如傳超大郵件,TCP 無法從重大網路中斷中恢復,於是郵件服務必須在應用層自己加一層容錯(記錄進度、用新連線續傳)。

這對 middleware 設計者是兩難:不是所有通訊功能都能被抽象到 middleware 而與應用無關。

💡
關鍵

瘦客戶端把複雜度移到服務端;end-to-end argument 指出某些功能只有應用端能完整實作,這是 middleware 的極限。

🔆
生活妙喻:layering vs tiering ≈ 蛋糕的水平分層 vs 把功能分配到不同廚房

layering 像蛋糕一層疊一層、上層吃下層的服務;tiering 則是把某層的工作拆開、放進不同伺服器(廚房)去做。

🔆
生活妙喻:AJAX ≈ 派個小跑腿只去拿一樣東西

不必整桌重擺(整頁重載),只請小跑腿非同步去拿一小塊資料回來更新局部,畫面其餘照常可操作。

🔆
生活妙喻:end-to-end argument ≈ 貴重包裹自己也要再確認一次

就算快遞(通訊系統)有基本保障,真正關鍵的檢查只有寄收件人(端點應用)自己能完整做到,故有些容錯得放在應用層。

本節字彙

middleware(中介軟體)
一層軟體,用來遮蔽底層異質性並提供方便的分散式程式設計抽象。
🧠 夾在應用與作業系統之間的潤滑層。
thin client(瘦客戶端)
本地只做視窗式介面,運算與服務都在遠端的輕量客戶端。
🧠 客戶端很瘦,重活都丟給遠端。
tiered architecture(分層式架構)
把某層功能切開、放到適當伺服器上,如二層、三層、n 層架構。
🧠 tier = 級,把功能分到不同級的伺服器。
end-to-end argument(端到端論證)
某些通訊功能只有端點應用本身才能完整可靠地實作,不宜全交給通訊系統。
🧠 關鍵檢查留給兩端的應用自己做。
layering 與 tiering 的核心差別是什麼?
相較於二層架構,三層架構的主要好處是什麼?
Google Maps 拖動地圖時只請求並補上新出現的圖磚、其餘畫面照常可互動。這最能說明哪種技術?
04

基礎模型一:互動模型

latency、bandwidth、jitter 三個效能特性,以及時鐘漂移為何讓全域時間不可能。

通訊效能與沒有全域時鐘

latency、bandwidth、jitter 三個效能特性,以及時鐘漂移為何讓全域時間不可能。

STEP 1

深度探秘

互動模型關心的兩件事

行程靠訊息互動

分散式系統由許多互動的行程組成,行為由 distributed algorithm(分散式演算法) 描述——定義每個行程該走的步驟,包括彼此之間的訊息傳遞。每個行程有自己完全私有的狀態,別的行程無法直接存取。

互動模型聚焦兩個限制因素:

  1. 通訊效能常是瓶頸,用三個量描述:
    • latency(延遲):訊息開始送出到對方開始收到之間的時間,包含傳播時間、網路存取等待、以及兩端作業系統處理時間。
    • bandwidth(頻寬):單位時間內網路能傳的總資訊量;多條通道共用同一網路時要分頻寬。
    • jitter(抖動):一連串訊息送達時間的變異,對多媒體(如音訊)特別重要。
  2. 無法維持單一全域時間(下一步詳談)。
💡
關鍵

互動模型關心通訊效能(latency、bandwidth、jitter)與缺乏全域時鐘這兩大限制。

STEP 2

生活妙喻

高速公路與各自的手錶

用交通理解效能三量

  • latency(延遲) = 從你家出發到抵達目的地的時間(即使路很寬,只要距離遠或塞在交流道,也得等)。
  • bandwidth(頻寬) = 這條高速公路有幾線道,單位時間能讓多少車通過;車太多就得共用車道、互相排擠。
  • jitter(抖動) = 一車隊抵達時間的忽快忽慢。對播音樂這種需要等間隔的場景,抖動會讓聲音斷斷續續、嚴重失真。

各自的手錶都不準

每台電腦都有自己的時鐘,但時鐘會 drift(漂移)——而且漂移速率彼此不同。就像一群人各戴一支會走快或走慢的手錶,且快慢程度都不一樣;就算一開始對好時間,過陣子也會差很多。

💡
關鍵

latency 是時間、bandwidth 是車道數、jitter 是到達快慢的變異;而每台電腦的時鐘各自以不同速率漂移。

STEP 3

實用超能力

時鐘校正與它的限制

怎麼讓時鐘接近一致

方法 做法 限制
GPS 接收器 從 GPS 取時,精度約 1 微秒 室內收不到、成本高,不可能每台都裝
時間訊息同步 有準確時源的電腦發送計時訊息給別人 受變動的訊息延遲影響,無法完美

關鍵觀念:clock drift rate(時鐘漂移率) 是時鐘偏離完美參考時鐘的速率。即使全部一開始對時,不校正就會明顯偏差;而校正本身又被不確定的訊息延遲拖累,所以全域時間終究不可能完美

flowchart TD
  A[互動模型兩大限制] --> B[通訊效能 latency bandwidth jitter]
  A --> C[沒有全域時鐘 各時鐘以不同速率漂移]
  C --> D[用 GPS 或時間訊息校正 但受訊息延遲影響]

這個「沒有完美全域時間」的事實,正是下一節同步/非同步系統與邏輯時間的起點。

💡
關鍵

時鐘可用 GPS 或時間訊息校正,但都受成本與訊息延遲限制,全域時間無法完美。

🔆
生活妙喻:latency / bandwidth / jitter ≈ 高速公路的車程、車道數與到達快慢

latency 是抵達要多久、bandwidth 是有幾線道(共用會排擠)、jitter 是車隊到達時間忽快忽慢,對需等間隔的音訊特別致命。

🔆
生活妙喻:clock drift ≈ 一群各走不準的手錶

每支錶走快走慢且程度不同,就算一開始對好,過陣子也各說各話,因此維持單一全域時間不可能。

本節字彙

latency(延遲)
訊息開始送出到對方開始收到之間的時間,含傳播、網路存取與 OS 處理。
🧠 從出發到開始抵達要等多久。
bandwidth(頻寬)
單位時間內網路能傳的總資訊量;多通道共用同一網路要分享。
🧠 高速公路有幾線道。
jitter(抖動)
一連串訊息送達時間的變異,對多媒體(如音訊)影響很大。
🧠 到達時間忽快忽慢,音樂就斷斷續續。
clock drift rate(時鐘漂移率)
電腦時鐘偏離完美參考時鐘的速率,且各機不同。
🧠 每支錶走偏的速度都不一樣。
若連續播放的音訊樣本以忽快忽慢、不一致的間隔送達,導致聲音嚴重失真,這最直接反映哪個通訊效能特性出了問題?
為什麼分散式系統中無法維持單一的全域時間?
用『有準確時源的電腦發送計時訊息給其他電腦』來校時,為什麼仍無法做到完美同步?

同步與非同步系統,以及事件排序

同步系統假設時間有界、非同步系統不做任何時間假設(如網際網路),並用邏輯時間替代時鐘排序事件。

STEP 1

深度探秘

兩種極端的時間假設

對時間的兩種態度

由於分散式系統很難對執行、傳遞、漂移設限,課文用兩個極端模型:

Synchronous(同步)系統

下列三項都有已知界限

  • 每個步驟的執行時間有已知上下界。
  • 每則訊息在已知有界時間內送達。
  • 每個行程的時鐘漂移率有已知界限。

好處:可以用 timeout(逾時) 來偵測行程失效。難處:很難給出保證得了的真實界限,界限若不可靠,設計就不可靠。

Asynchronous(非同步)系統

對執行速度、訊息延遲、時鐘漂移都不設任何界限。一步可能花一皮秒也可能花一世紀;訊息可能瞬間到也可能好幾年。這恰好描述了網際網路

重要結論:凡對非同步系統有效的解法,對同步系統也有效(因為同步只是多了假設)。

💡
關鍵

同步系統對執行、傳遞、漂移都有已知界限;非同步系統什麼都不假設,恰好描述網際網路。

STEP 2

生活妙喻

Pepperland 的兩支軍隊

山頭上的協調難題

兩支軍隊 Apple 與 Orange 紮營在兩座山頭,要靠信差穿越山谷溝通,並約定誰帶頭、何時一起衝鋒。

  • 非同步 Pepperland:信差速度變化極大——送『衝鋒!』可能 5 分鐘到,也可能 3 小時才到。沒人能保證時間,很難精準約好同時行動
  • 同步 Pepperland:大家知道每則訊息至少 min、至多 max 分鐘會到。帶頭的送出『衝鋒!』後等 min 分鐘再衝;另一隊收到後等 1 分鐘再衝,就能保證在帶頭者之後、且不超過 max 減 min 加 1 分鐘內跟上。

有了時間界限(同步),協調就變得可行;沒有界限(非同步),許多協調問題就棘手得多。這就是兩種模型的差別帶來的實際後果。

💡
關鍵

有時間界限的同步世界能精準協調行動;非同步世界因延遲無界,協調困難許多。

STEP 3

實用超能力

事件排序與邏輯時間

沒有準時鐘也能排序事件

看一個 email 例子:X 寄出主旨 Meeting,Y、Z 各自回 Re: Meeting。由於投遞延遲獨立變動,某些使用者可能看到順序顛倒(先看到回覆才看到原信)。

若時鐘能完美同步,每則訊息可帶送出時間戳 t1<t2<t3 來排序。但時鐘無法完美同步,於是 Lamport(1978)提出 logical time(邏輯時間):不靠時鐘,靠因果關係來排序。

我們知道的鐵律:

  • 訊息一定是先送出、後被收到
  • 回覆一定在收到原訊息之後才送出。

邏輯時間把這些順序關係轉成編號(越晚的事件編號越大),就能在沒有準時鐘的情況下推斷出合理順序。

flowchart TD
  A[X 送出 m1] --> B[Y 收到 m1]
  B --> C[Y 送出 m2 回覆]
  C --> D[X 收到 m2]

何時用哪個模型

需求 適合的模型
用 timeout 偵測失效、要時間保證(如多媒體截止期限) 同步
像網際網路般無法保證時間 非同步
💡
關鍵

邏輯時間用因果關係(送出先於收到、收訊先於回覆)排序事件,不必依賴完美時鐘。

🔆
生活妙喻:同步 vs 非同步系統 ≈ Pepperland 兩支軍隊的協調

同步世界知道訊息 min 到 max 分鐘必達,能精準約定衝鋒;非同步世界信差忽快忽慢,協調困難——對應有無時間界限的差別。

🔆
生活妙喻:logical time(邏輯時間) ≈ 用因果先後而非看錶來排事件

就算每人的錶都不準,我們仍知道『先寄信才有人收信、收信後才會回覆』,靠這些因果關係就能排出合理順序。

本節字彙

synchronous system(同步系統)
對執行時間、訊息傳遞時間、時鐘漂移率都有已知界限的系統。
🧠 凡事都有時間上限,可以放心用 timeout。
asynchronous system(非同步系統)
對執行速度、訊息延遲、時鐘漂移都不設任何界限,恰好描述網際網路。
🧠 什麼都不保證,一步可能花一世紀。
timeout(逾時)
一個行程為某事預留固定等待時間,逾時即判定異常。
🧠 等夠久還沒回應,就當它出事了。
logical time(邏輯時間)
Lamport 提出,用事件間的因果關係而非時鐘來排序事件。
🧠 不看錶,看誰先導致誰。
課文說『非同步分散式系統恰好描述了網際網路』,最主要的理由是?
為什麼在同步系統中可以用 timeout 來偵測行程失效,但在非同步系統中卻不可靠?
在 email 例子中,Y 先收到 X 的原信、之後才送出回覆。邏輯時間能保證推斷出這個順序,是因為它依據哪條鐵律?
05

基礎模型二:失效模型與安全模型

把行程與通道的失效分類,認識 crash、fail-stop、Byzantine 失效,以及可靠通訊的 validity 與 integrity。

失效模型:遺漏、任意與時序失效

把行程與通道的失效分類,認識 crash、fail-stop、Byzantine 失效,以及可靠通訊的 validity 與 integrity。

STEP 1

深度探秘

把失效講清楚

為什麼要分類失效

在分散式系統中,行程與通訊通道都可能失效——偏離正確或期望的行為。失效模型把失效講清楚,好讓我們分析其影響、設計能容忍它的系統。Hadzilacos 與 Toueg 的分類分三大類:

遺漏失效(omission):該做的沒做

  • crash(當機):行程停住、不再執行任何步驟。
    • 若其他行程能確定地偵測到它當了,稱 fail-stop;否則只是 crash(偵測不確定)。
  • 通道遺漏:訊息沒從送方緩衝區送到收方緩衝區(dropping messages)。再細分 send-omission、receive-omission、channel-omission。

任意(arbitrary / Byzantine)失效:最壞情況

任何錯誤都可能發生——回傳錯值、亂送訊息、該做的不做。通道的任意失效(內容被破壞、送出不存在的訊息、重複投遞)很罕見,因為通訊軟體能用 checksum 與序號攔下。

時序(timing)失效

只在同步系統才談——執行、傳遞或時鐘漂移超過設定的界限。

💡
關鍵

失效分三類:遺漏(該做沒做,如 crash)、任意(Byzantine,最壞情況)、時序(只在同步系統)。

STEP 2

生活妙喻

三種不靠譜的員工

用員工比喻三種失效

  • 遺漏失效 = 突然消失的員工:本來該交報告卻人間蒸發(crash)。如果公司有打卡系統,大家能確定他沒來(fail-stop);若沒有,你只知道他沒回訊息,但不確定是請假、塞車還是離職了(一般 crash)。
  • 任意(Byzantine)失效 = 最糟糕的員工:他可能交假報告、亂傳訊息、甚至裝沒事其實什麼都沒做。你無法靠『他有沒有回應』判斷,因為他可能故意亂回——這是最難防的失效
  • 時序失效 = 慢吞吞的員工:只有在你事先約定了截止時間(同步系統)時,才能說他『遲交=時序失效』;若你根本沒設期限(非同步系統),他再慢你也不能說他失效。
💡
關鍵

遺漏像消失的員工、任意像會亂來的員工、時序像有約定期限時才算遲交的員工。

STEP 3

實用超能力

遮蔽失效與可靠通訊

遮蔽(masking):化危機為轉機

每個元件都由其他元件組成,因此可以用較不可靠的元件建出較可靠的服務。遮蔽的兩招:

  • 完全藏住:例如用副本複製,一台當機其他台照樣服務。
  • 轉成較可接受的失效:例如 checksum 把『內容被破壞』這種任意失效,轉成『丟棄該訊息』的遺漏失效;再用重傳把遺漏失效藏起來。
flowchart TD
  A[任意失效 內容被破壞] -->|checksum| B[遺漏失效 丟棄訊息]
  B -->|重傳| C[看起來正常 已遮蔽]

可靠通訊:validity 與 integrity

性質 意思
validity(有效性) 放進送出緩衝區的訊息,最終一定會送達收方緩衝區
integrity(完整性) 收到的訊息與送出的相同,且不會被投遞兩次

對 integrity 的威脅有兩種:重傳協定若不擋重複(可用序號解決);以及惡意者注入假訊息、重放或竄改(用安全措施防)。

💡
關鍵

遮蔽用較不可靠元件建出較可靠服務;可靠通訊要同時滿足 validity 與 integrity。

🔆
生活妙喻:crash vs fail-stop ≈ 員工消失,有沒有打卡系統

員工人間蒸發是 crash;若有打卡系統能確定他真的沒來就是 fail-stop,否則你只是不確定他出了什麼事。

🔆
生活妙喻:Byzantine 失效 ≈ 會交假報告、亂回話的員工

最壞情況——他可能亂送、回錯值、或裝忙,無法靠『有沒有回應』判斷,是最難防的失效。

🔆
生活妙喻:masking(遮蔽) ≈ 把破掉的訊息直接丟掉再重寄

checksum 把『內容被破壞』轉成『丟棄』這種較溫和的失效,再靠重傳補回來,外界看起來一切正常。

本節字彙

omission failure(遺漏失效)
行程或通道該做的動作沒做,如行程 crash 或通道丟訊息。
🧠 omit = 漏掉,該做的沒做。
fail-stop
行程當機且其他行程能確定地偵測到它已當機。
🧠 壞了就停,而且大家都看得出來。
arbitrary / Byzantine failure(任意失效)
最壞的失效語意,任何錯誤都可能發生,包括回傳錯值與亂送訊息。
🧠 Byzantine = 詭譎多變,什麼怪事都會幹。
validity / integrity
可靠通訊的兩性質:validity 是送出的終會送達;integrity 是收到的與送出的相同且不重複。
🧠 validity 保證『會到』,integrity 保證『沒被改、沒重複』。
某行程當機了,而且其他行程能『確定地』偵測到它已經當機。這屬於哪一種失效?
一個行程回傳了錯誤的值、又在不該送訊息時亂送訊息,且無法靠『它有沒有回應』來判斷它是否正常。這是哪一類失效?
用 checksum 把『訊息內容被破壞』偵測出來並丟棄該訊息,這在失效模型中達成了什麼?

安全模型:敵人、威脅與安全通道

用「敵人」模型描述對行程與通道的威脅,並以密碼學、認證建出安全通道來防禦。

STEP 1

深度探秘

保護物件、行程與通道

安全模型怎麼建立

安全模型建立在架構模型之上:要確保分散式系統安全,就要保護行程、保護它們互動用的通道、並保護它們封裝的物件不被未授權存取。

保護物件與 principal

伺服器替使用者管理一堆物件,使用者透過 client 送 invocation 請伺服器對物件做操作。不同物件給不同人用,因此用 access right(存取權) 規定誰能對某物件做哪些操作(讀/寫)。

principal(當事人) 是擁有存取權的權威——可以是使用者或行程。每個 invocation 與 result 都帶著它所代表的 principal。伺服器要驗證 principal 身分並檢查存取權,client 也可檢查 result 是否真的來自所要的伺服器。

💡
關鍵

安全=保護行程、通道與物件;access right 規定誰能做什麼,principal 是擁有存取權的當事人。

STEP 2

生活妙喻

一個無所不能的敵人

假想最壞的敵人

為了分析威脅,我們假設一個 enemy(敵人/對手),它能對任何行程送任何訊息、也能讀取或複製任兩個行程之間的任何訊息。就像郵差路線上有個壞人,能偷看每封信、也能冒名寄信。

威脅分兩種對象:

  • 對行程的威脅:訊息來源不可信。伺服器收到 invocation,無法確定背後 principal 是誰(來源位址可偽造)——像收到一封署名『你老闆』的信,但筆跡可能是假的。client 也可能收到冒牌伺服器(spoofing)的假結果。
  • 對通道的威脅:敵人可在訊息過網時複製、竄改、注入;還能replay(重放)——把舊訊息存起來重送,例如重送一筆轉帳請求佔便宜。
💡
關鍵

用全能的敵人模型分析威脅:對行程是來源不可信,對通道是竊聽、竄改、注入與重放。

STEP 3

實用超能力

用安全通道打敗威脅

防禦三件套

  1. cryptography(密碼學)與 shared secret(共享祕密):一對行程共享只有它們知道的祕密;訊息若能證明知道這祕密,收方就確定送方是對方。encryption(加密) 用難以猜中的 secret key 把內容打亂,只有對應的 decryption key 能還原。
  2. authentication(認證):在訊息中放一段加密內容,證明寄件者身分(例如把 principal 身分、檔案 id、時間都用共享金鑰加密附上,伺服器解密比對)。
  3. secure channel(安全通道):建在現有通訊服務之上的一層,具備三性質:
    • 雙方都可靠地知道對方代表的 principal 身分。
    • 保證資料的隱私與完整性(防竄改)。
    • 每則訊息帶時間戳,防重放與重排序

VPN 與 SSL 都是安全通道的實例。

flowchart TD
  A[基本通訊服務] --> B[加密 + 認證]
  B --> C[安全通道 知道對方身分 保護隱私完整性 防重放]

還有兩種威脅

  • denial of service(阻斷服務):用大量無謂請求灌爆資源,讓正常使用者無法使用。
  • mobile code(行動程式碼):接收並執行外來程式碼,可能是木馬。

安全成本高,所以要先做 threat model(威脅模型)盤點所有攻擊面,再權衡防禦的效益與成本。

💡
關鍵

用加密、認證建出安全通道(知道對方身分、保護隱私完整性、防重放),並權衡威脅與防禦成本。

🔆
生活妙喻:enemy(敵人模型) ≈ 郵差路線上的壞人

他能偷看每封信、也能冒名寄信,對應敵人能讀取或複製任何訊息、向任何行程送任何訊息。

🔆
生活妙喻:replay attack(重放攻擊) ≈ 把同一張轉帳單影印重送

敵人存下一筆轉帳請求重複送出,就能一再得利;安全通道用時間戳阻止這種重送。

🔆
生活妙喻:secure channel(安全通道) ≈ 貼了防偽封條又掛號的郵筒

雙方確知彼此身分、內容防偷防改、且每封都有時間戳防重送,正是安全通道的三大性質。

本節字彙

principal(當事人)
擁有存取權的權威,可以是使用者或行程;每個請求與結果都代表某個 principal。
🧠 誰下的命令、誰負責,就是 principal。
access right(存取權)
規定誰被允許對某物件執行哪些操作(如讀、寫)。
🧠 你有沒有資格動這個物件。
enemy / adversary(敵人)
假想能對任何行程送訊息、並讀取或複製任何訊息的攻擊者。
🧠 假設最壞的對手,才能設計出夠強的防禦。
secure channel(安全通道)
以加密與認證建在通訊服務上的一層,確知對方身分、保護隱私完整性、防重放。
🧠 防偽封條 + 掛號 + 時間戳的通道。
在安全模型中,『擁有存取權、代表某個請求權威,可以是使用者或行程』的概念稱為?
敵人把一筆『轉帳請求』的舊訊息存起來,事後重複送出以佔便宜。這是哪種攻擊,安全通道用什麼防它?
安全模型假設一個『無所不能的敵人』,這樣假設的主要目的是什麼?