01

多媒體資料的本質

理解『遲到的資料毫無價值』,以及多媒體和傳統即時系統的差異。

先讀原文段落,旁邊就是白話

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

原文 · 多媒體資料的本質 881 20 DISTRIBUTED MULTIMEDIA SYSTEMS 20. 2 Characteristics of multimedia data 20. 3 Quality of service management 20. 6 Case studies: Tiger, BitTorrent and End System Multicast 20.
白話導讀

理解『遲到的資料毫無價值』,以及多媒體和傳統即時系統的差異。

為什麼多媒體是即時系統

理解『遲到的資料毫無價值』,以及多媒體和傳統即時系統的差異。

STEP 1

深度探秘

遲到的資料,等於沒到

多媒體是「即時系統

當你看影片、講網路電話時,音訊與視訊是連續、即時產生並即時消費的資料。每一個音訊取樣、每一張視訊影格都有自己的「上場時刻」。

重點:晚到的元素毫無價值,通常會直接被丟棄。一張該在第 3 秒顯示的影格,第 3.5 秒才到,已經沒人需要它了。

所謂即時系統 (real-time system),就是必須「依照外部決定的時間表」完成工作並交出結果。系統達成這種準時交付的程度,就叫做這個應用享有的服務品質 (Quality of Service, QoS)

和傳統即時系統哪裡不一樣?

航空電子、空中交通管制這類傳統即時系統,資料量小、硬截止期限不頻繁,但錯過一次就可能釀災,所以做法是「資源開超大、固定排程,保證最壞情況都撐得住」。

多媒體則不同:

  • 高度分散,跑在通用環境裡,要和其他應用搶頻寬與運算資源。
  • 需求是動態的:視訊會議參加人數多寡,需要的頻寬就跟著變。
  • 使用者想權衡取捨:願意降低視訊頻寬,好讓語音或文件編輯同時進行。

所以桌面上的串流多半只能拿到盡力而為 (best-effort) 的品質。

💡
關鍵

多媒體串流是即時系統,準時交付才有價值,遲到就丟棄。

STEP 2

生活妙喻

趕高鐵的便當

把影格想成「月台便當」

想像一家便當店要把熱便當送上每一班即將進站的高鐵。

  • 每班車=一個播放時刻(影格該顯示的瞬間)。
  • 熱便當=一張影格或一段音訊。
  • 便當晚一秒到月台,車已經開走,這個便當就沒用了,直接丟掉——這正是「late delivery is valueless」。

傳統即時系統像是運鈔車:班次少、絕不能出錯,所以乾脆派十倍人力、走專用道,保證萬無一失。

多媒體則像在尖峰時段的市區送便當:訂單忽多忽少(動態需求),路上還有別人的車在搶道(和其他應用競爭),而你只能盡力而為。

這就是為什麼一般作業系統「人人有飯吃但都吃不飽」的盡力而為排程,撐不起多媒體。

💡
關鍵

影格像趕車的熱便當,晚到就報廢,且要在壅塞市區和別人搶路。

STEP 3

實用超能力

為什麼你的串流靠『緩衝』活著

現實世界怎麼擠出可用品質?

在這個還沒有完善 QoS 的網路世界,能跑的應用都用了聰明的妥協:

  • Web 多媒體(YouTube、Hulu、BBC iPlayer):在接收端大量緩衝 (buffering),先囤一段資料再播,藉此抹平頻寬與延遲的波動,代價是來源到畫面可能延遲好幾秒。
  • 隨選視訊 (Video-on-demand):用專用頻寬+專用伺服器,再加上目的端緩衝。

高度互動的應用就難多了,例如:

需求 門檻
低延遲互動 往返延遲 100–300 ms 才像同步對話
同步分散狀態 一人暫停某影格,其他人也停在同一影格
媒體同步 合奏需同步在 50 ms 內;影音要對嘴 lip sync
flowchart TD
  A[來源產生影格] --> B[網路傳輸有延遲與抖動]
  B --> C[接收端緩衝囤積一段]
  C --> D[平穩播放給使用者]
  B -. 太晚到 .-> E[直接丟棄該影格]

下次看到影片開頭那一圈轉圈圈,你就知道:它正在偷偷囤緩衝,好讓後面播得順。

💡
關鍵

接收端緩衝是現實世界對抗頻寬與延遲波動的主要武器。

🔆
生活妙喻:遲到資料無價值 ≈ 趕高鐵班次的熱便當

便當晚一秒到月台車就開了,便當作廢;影格錯過播放時刻同樣被丟棄。

🔆
生活妙喻:傳統即時 vs 多媒體 ≈ 運鈔車 vs 尖峰送便當

運鈔車派超量人力走專用道保證零失誤;多媒體則在壅塞市區和別人搶路,只能盡力而為。

🔆
生活妙喻:接收端緩衝 ≈ 先囤一桶水再開水龍頭

先存一段資料再開始播,水龍頭就算供水忽大忽小,出水仍平穩。

本節字彙

QoS(服務品質)
系統依時間表準時交付資料、滿足應用即時需求的程度。
🧠 Quality of Service=『準不準時、夠不夠順』的成績單。
即時系統 (real-time system)
必須依外部決定的時間表完成任務並交出結果的系統。
🧠 real-time=『時間到就得交件』,不是『跑很快』。
盡力而為 (best-effort)
系統把資源平均分給所有競爭者,不對頻寬或延遲做任何保證。
🧠 best-effort=『我盡力,但不保證』。
緩衝 (buffering)
在接收端先囤積一段資料再播放,用以抹平頻寬與延遲的波動。
🧠 像先存一桶水,出水才平穩。
一張視訊影格原本該在第 3.000 秒顯示,卻在第 3.400 秒才抵達播放端。多媒體系統最可能怎麼處理它?
相較於空中交通管制這類傳統即時系統,多媒體即時系統最關鍵的不同點是什麼?
YouTube、BBC iPlayer 能在沒有 QoS 保證的網路上提供順暢播放,主要靠的是什麼技巧?

連續媒體與時間相依資料

連續媒體其實是離散取樣的快速更新;時間相依代表播放時刻決定資料的意義。

STEP 1

深度探秘

連續其實是『快到看不出來的離散』

「連續」是錯覺

我們說影音是連續 (continuous) 的,但那只是使用者的觀感。在系統內部,連續媒體其實是一連串快速替換的離散值

  • 影像陣列每秒被替換 25 次,就騙過眼睛看成流暢的電視畫面。
  • 聲音振幅值每秒被替換 8000 次,就成了電話品質的語音。

「時間相依」決定資料的意義

多媒體串流是時間相依 (time-based),也叫 isochronous(等時):每個元素被播放或錄製的時刻,定義了串流的內容與語意。播早了、播晚了,資料的正確性就變了。因此支援多媒體的系統,處理資料時必須保留時序

串流很「肥」,壓縮是必須

串流類型 約略資料率 取樣/影格頻率
電話語音 64 kbps 8000/秒
CD 音質 1.4 Mbps 44000/秒
標準電視(未壓縮) 120 Mbps 24/秒
標準電視(MPEG-1) 1.5 Mbps 24/秒
HDTV(未壓縮) 1000–3000 Mbps 24–60/秒

未壓縮的標準電視就要超過 120 Mbps,已超出 100 Mbps 乙太網路的容量!所以壓縮不可或缺——它能把頻寬需求降低 10 到 100 倍,但時間需求一點都不會變

💡
關鍵

連續媒體內部是高速更新的離散取樣;時刻決定語意,所以必須保留時序。

STEP 2

生活妙喻

翻頁動畫書與真空壓縮袋

連續=翻頁動畫

小時候在筆記本角落畫的翻頁動畫:每頁只是一張靜止圖(離散值),但快速翻動時,眼睛就看成連續的動作。影片每秒換 24–25 張圖,就是同一個把戲。

時間相依=歌曲的節拍

一首歌的每個音符何時響起決定了旋律。如果你把音符隨意提早或延後,曲子就走音了——這就是「時刻定義語意」。換句話說,資料不只要對,還要在對的時間出現

壓縮=真空收納袋

未壓縮的影片像一床蓬鬆的大棉被,塞不進行李箱(網路頻寬)。用**真空壓縮袋(壓縮演算法)**抽掉空氣,體積縮成 1/10~1/100,就塞得進去了。

但注意:壓縮袋讓棉被變小(省頻寬),卻不會改變你必須準時把棉被送到的期限(時間需求不變)。而且打開壓縮袋(解壓縮)要花力氣(增加 CPU 負擔)。

💡
關鍵

翻頁動畫=連續錯覺,節拍=時間相依,真空袋=壓縮省空間但期限不變。

STEP 3

實用超能力

壓縮的代價與不對稱設計

壓縮省了頻寬,卻多了 CPU 負擔

壓縮雖然減少網路頻寬需求,卻在來源與目的端的處理器上加重負擔。這份工作以前常交給專用硬體——也就是顯卡上的編解碼器 (codec, coder/decoder)

但現在 PC 越來越強,許多 codec 改用軟體實作,好處是更有彈性:能支援特定格式、特定應用邏輯,並同時處理多條媒體串流。

MPEG 的『不對稱』巧思

MPEG 視訊壓縮是不對稱 (asymmetric) 的:

  • 壓縮演算法複雜(做一次就好)。
  • 解壓縮相對簡單(每個接收端都要做)。
flowchart LR
  A[原始影像] --> B[複雜壓縮 一次完成]
  B --> C[小體積 MPEG 串流]
  C --> D[簡單解壓縮 每個接收端]
  D --> E[還原畫面]

為什麼這樣設計很聰明?在桌面視訊會議中,壓縮常由一顆硬體 codec 完成,而每位與會者電腦上要解壓縮多條串流則用軟體做。如此一來,會議人數可以自由增減,不必受限於每台電腦裡有幾顆 codec 晶片。

💡
關鍵

MPEG 壓縮複雜、解壓縮簡單的不對稱設計,讓會議人數能自由擴增。

🔆
生活妙喻:連續媒體 ≈ 翻頁動畫書

每頁是靜止離散圖,快速翻動就看成連續動作;影片每秒換數十張圖同理。

🔆
生活妙喻:時間相依 isochronous ≈ 歌曲的節拍

音符何時響起決定旋律;資料不只要對,還要在對的時刻出現。

🔆
生活妙喻:壓縮 ≈ 真空收納袋

抽掉空氣讓棉被縮小好塞進行李箱,但送達期限不變、開袋還要花力氣。

本節字彙

連續媒體 (continuous media)
使用者眼中連續、內部其實是高速替換的離散值序列,如影像每秒換 25 次。
🧠 連續是錯覺,本質是『快到看不出的離散』。
時間相依/等時 (time-based / isochronous)
資料元素被播放或錄製的時刻定義了內容語意,因此必須保留時序。
🧠 iso(相同)+ chronous(時間)=『按固定時間節奏』。
壓縮 (compression)
用演算法縮小資料體積,可降頻寬 10–100 倍,但不改變時間需求。
🧠 真空袋:縮體積,不縮期限。
codec(編解碼器)
coder/decoder,負責壓縮與解壓縮影音,可用硬體或軟體實作。
🧠 co(der)+dec(oder)=編+解二合一。
說影片是『連續媒體』,最精確的理解是什麼?
『時間相依(isochronous)』對系統設計最直接的要求是什麼?
未壓縮的標準電視視訊約需 120 Mbps,這個數字揭示了什麼問題?
02

服務品質管理 QoS

頻寬、延遲(含抖動)、遺失率三參數如何描述串流,並組成 flow spec。

先讀原文段落,旁邊就是白話

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

原文 · 服務品質管理 QoS QoS request delivers a QoS guarantee to the application and results in the reservation and subsequent scheduling of the resources requested. This chapter draws substantially on a tutorial paper by Ralf Herrtwich [1995] and we are grateful to him for permission to use his material. 882 CHAPTER 20 DISTRIBUTED MULTIMEDIA SYSTEMS 20. 1 Introduction Modern computers can handle streams of continuous, time-based data such as digital audio and video.
白話導讀

頻寬、延遲(含抖動)、遺失率三參數如何描述串流,並組成 flow spec。

三大 QoS 參數與流量規格

頻寬、延遲(含抖動)、遺失率三參數如何描述串流,並組成 flow spec。

STEP 1

深度探秘

頻寬、延遲、遺失率

用三個數字描述一條串流

要和系統談服務品質,應用得用一組參數說清楚自己的需求。最關鍵的三個是:

  • 頻寬 (Bandwidth):資料流過串流或元件的速率(每秒多少資料)。
  • 延遲 (Latency):單一資料元素從來源走到目的地所需的時間。它會隨系統負載而變動,這個變動量稱為抖動 (jitter)——正式定義是延遲的一階導數。
  • 遺失率 (Loss rate):因為晚到的資料沒有價值,無法準時送達的元素會被丟棄。完美管理下不該發生,但保證每個元素都準時的成本太高(得保留遠超平均的資源去應付偶發尖峰),因此常接受一定的遺失率——通常低於 1%,品質關鍵的應用更低。

三者相互牽動

這三個參數不是各自獨立的:

  • 現代系統的遺失多半不是位元錯誤,而是緩衝區溢位或資料太晚到達。所以頻寬越大、延遲越低,遺失率就越可能低
  • 資源頻寬相對於負載越小,訊息就越會在它前面累積,需要的緩衝區就越大;緩衝區越大,訊息越可能要排隊等前面的人,延遲也就越大

flow spec:一整包參數

一組 QoS 參數合起來稱為流量規格 (flow specification, flow spec)。RFC 1363 把它定義成 11 個 16 位元數值,分別描述頻寬(含突發性)、延遲(含可接受的抖動)與遺失特性。

💡
關鍵

頻寬、延遲(含抖動)、遺失率三參數彼此牽動,合稱 flow spec。

STEP 2

生活妙喻

高速公路上的車流

把串流想成一條高速公路

  • 頻寬=每分鐘能通過收費站的車輛數(車流速率)。
  • 延遲=一輛車從上交流道到下交流道花的時間。
  • 抖動=這趟時間忽快忽慢的程度:早上 20 分鐘、塞車時 50 分鐘,這個落差就是抖動。
  • 遺失率=因為太塞而乾脆放棄、改道或被攔下的車比例。

為什麼它們牽動彼此?

如果車道太窄(頻寬不足),車子就在交流道前大排長龍(緩衝累積)。你得蓋一個超大的等候區(大緩衝區)來容納,但等候區越大,每輛車排隊等越久(延遲變大);要是等候區也滿了,後面的車只能被擋下(遺失)。

反過來,路夠寬(頻寬大)+不塞(延遲低),就很少有車需要被丟掉(遺失率低)。

flow spec 就像你交給交通局的一張完整需求單:「我每分鐘要送這麼多車、單趟最多忍受幾分鐘、抖動別超過多少、最多容許掉幾輛。」

💡
關鍵

頻寬=車流速率、延遲=單趟時間、抖動=時間波動、遺失率=被丟下的車比例。

STEP 3

實用超能力

抖動怎麼靠緩衝抹平

抖動:互動應用的隱形殺手

硬體裝置通常能穩定地以固定速率呈現資料;但軟體解碼(例如軟體視訊解碼器)就得特別小心抖動。解法是緩衝:先囤一點資料,遇到忽快忽慢時用囤積量補上,輸出就平穩了。

但緩衝有上限——因為端到端總延遲是受限的(互動會議要求 ≤150 ms)。你不能為了消除抖動而無限囤積,否則延遲就爆了。

不同應用的延遲門檻

應用情境 最大可接受延遲
視訊會議(互動) 約 150 ms(避免對話卡頓)
儲存視訊回放 約 500 ms(Pause/Stop 反應)

一個關鍵公式:別讓影格在緩衝裡待太久

若串流影格速率為 $R$,為了避免積壓,一張影格在緩衝區中平均停留時間不應超過

$$ \frac{1}{R} $$

例如 $R = 25$ 影格/秒,則平均停留不應超過 $\frac{1}{25} = 0.04$ 秒(40 ms)。一旦處理速度跟不上抵達速度,積壓就會堆高、緩衝可能溢位,端到端延遲也會跟著惡化。

💡
關鍵

抖動靠緩衝抹平,但受端到端延遲上限約束;影格平均停留不應超過 1/R。

🔆
生活妙喻:三大 QoS 參數 ≈ 高速公路車流

頻寬=車流速率、延遲=單趟時間、遺失率=被丟下的車比例。

🔆
生活妙喻:抖動 jitter ≈ 通勤時間忽快忽慢

早上 20 分、塞車 50 分,這個落差就是抖動,是延遲的變化量。

🔆
生活妙喻:參數相互牽動 ≈ 窄車道造成大排長龍

頻寬不足→排隊累積→需大緩衝→延遲變大→緩衝滿了就遺失。

本節字彙

頻寬 (bandwidth)
資料流過串流或元件的速率,例如每秒多少 Mbit。
🧠 頻寬=『每分鐘能放幾輛車過收費站』。
延遲 (latency)
單一資料元素從來源到目的地所需的時間。
🧠 latency=『單趟從上交流道到下交流道要多久』。
抖動 (jitter)
延遲的變化量(延遲的一階導數),相鄰元素送達間隔的波動。
🧠 jitter=『時間忽快忽慢的抖』,靠緩衝壓平。
流量規格 (flow spec)
一整組描述串流 QoS 的參數集合,如 RFC 1363 的 11 個數值。
🧠 flow spec=交給交通局的『完整需求單』。
用高速公路比喻,『抖動 (jitter)』對應的是下列哪一個?
現代多媒體系統的資料『遺失』主要由什麼造成?
若某串流影格速率 R = 50 影格/秒,為避免積壓,一張影格在緩衝區的平均停留時間最好不要超過多少?

QoS 協商與允入控制

QoS 管理員評估需求、保留資源、發出資源合約;協商可由送方或收方發起。

STEP 1

深度探秘

QoS 管理員的兩大任務

誰負責保證資源?

資源(CPU 時間、網路頻寬、記憶體)能被保證,前提是有一個元件專責配置與排程它們——這就是 資源合約,並回絕會破壞現有保證的新請求。">允入控制的系統元件。">QoS 管理員 (QoS manager)。它的工作分兩大子任務:

1. QoS 協商 (negotiation)

應用把資源需求(flow spec)告訴 QoS 管理員。管理員拿這需求去比對可用資源資料庫與目前的承諾,回覆能或不能。

若回覆「不能」,應用可以重新配置成較低需求,再談一次。

2. 允入控制 (admission control)

若評估結果是「可以」,管理員就保留 (reserve) 所需資源,並發給應用一份資源合約 (resource contract),載明已保留的資源與一個時間限制。之後應用就能放心執行。

  • 若需求減少,釋出的資源回到資料庫成為可用。
  • 若需求增加,就重新啟動一輪協商與允入控制。

允入控制的本質:回絕那些會破壞現有 QoS 保證的新請求,避免資源超載。

💡
關鍵

QoS 管理員先協商(談得成嗎),再允入控制(保留資源、發合約並擋掉超載請求)。

STEP 2

生活妙喻

餐廳訂位系統

把 QoS 管理員想成『餐廳訂位櫃台』

你打電話訂位(送出 flow spec):「今晚 8 點,6 人桌,要靠窗。」

  • 協商:櫃台查訂位簿(可用資源資料庫),看 8 點還有沒有 6 人靠窗桌。
    • 若沒有,它會說「靠窗沒了,4 人桌+加椅可以嗎?」——這就是重新配置成較低需求再談一次
  • 允入控制:談妥後,櫃台把那張桌子鎖起來保留,給你一張訂位確認(資源合約),註明位子、人數和保留到幾點(時間限制)。

重點是:櫃台會回絕那些一旦答應就會害到已訂位客人的請求。如果店已客滿,第 21 組客人就算肯付錢也只能婉拒——這正是允入控制『保護現有保證』的精神。

若你臨時改成 4 人(需求減少),多出的位子還給訂位簿;改成 10 人(需求增加),就得重新查、重新談一次。

💡
關鍵

QoS 管理像訂位櫃台:查得到就鎖位給確認,客滿就婉拒以保護已訂位的人。

STEP 3

實用超能力

送方發起 vs 收方發起

分散式協商:沿著資料流談

串流的元件常分散在多個節點,每個節點都有 QoS 管理員。最直接的做法是沿著資料流從來源到目標逐站協商:來源送出 flow spec 給本地管理員,逐站轉發,到達目標後再把『能否提供』的結果回傳給來源。

多個接收者怎麼辦?

送方發起 (sender-initiated)

當串流有多個目標時,中間節點彙整各目標的回饋取最差值:可用頻寬取最小、延遲取最長、遺失率取最大。SRP、ST-II、RCAP 採此法。缺點是把共同的最差 QoS 強加給所有目標。

收方發起 (receiver-initiated)

異質目標(能力差很多),應讓每個目標拿到各自最佳的品質。RSVP 就是這類:來源廣播串流的存在與特性,目標主動連到最近的節點取資料,並可搭配過濾技術取得合適品質。

flowchart TD
  A[來源] --> B[送方發起:取所有目標最差值]
  A --> C[收方發起:每個目標各取最佳]
  B --> D[適合同質目標]
  C --> E[適合異質目標 如 RSVP]

實務上還常為每個參數同時給『期望值』與『最差可接受值』,例如『想要 1.5 Mbps,但 1 Mbps 也能接受』。像 HeiRAT 系統甚至要使用者只定兩個參數,第三個交給系統最佳化。

💡
關鍵

送方發起取共同最差值適合同質目標;收方發起(如 RSVP)讓異質目標各取最佳。

🔆
生活妙喻:QoS 協商與允入控制 ≈ 餐廳訂位櫃台

查訂位簿、談降需求、鎖位給確認、客滿婉拒,對應協商、重新配置、保留合約、拒絕超載。

🔆
生活妙喻:資源合約 ≈ 訂位確認單

載明保留的桌位、人數與保留到幾點,等同合約的資源內容與時間限制。

🔆
生活妙喻:送方 vs 收方發起 ≈ 團體統一餐 vs 各點各的

送方發起像全桌統一吃最低標準的合菜;收方發起像每人按自己胃口各點各的。

本節字彙

QoS 管理員 (QoS manager)
專責配置與排程資源、執行協商與允入控制的系統元件。
🧠 像餐廳訂位櫃台,管位子的分配。
QoS 協商 (negotiation)
應用提出需求、管理員比對可用資源回覆可否,必要時降需求再談。
🧠 negotiation=『討價還價』談得成嗎。
允入控制 (admission control)
保留資源、發資源合約,並回絕會破壞現有保證的新請求。
🧠 admission=『准不准進場』,客滿就婉拒。
資源合約 (resource contract)
QoS 管理員發給應用、載明已保留資源與時間限制的承諾。
🧠 合約=白紙黑字的訂位確認單。
QoS 協商時,若管理員回覆『目前資源無法滿足你的需求』,應用通常會怎麼做?
允入控制的核心目的是什麼?
一個跨城市的視訊會議,所有與會者的網路能力相近。採用『送方發起』協商時,中間節點如何決定共同的 QoS?

流量塑形與資源保留策略

漏桶與令牌桶塑形流量;最大保留給硬保證,統計多工換取較高使用率的軟保證。

STEP 1

深度探秘

漏桶與令牌桶

為什麼要塑形流量?

串流的實際傳送往往忽多忽少(突發, bursty),但排程器最喜歡規律的請求。流量塑形 (traffic shaping) 就是用輸出緩衝把資料流『撫平』,讓實際流量盡量貼近描述。

突發性的數學模型:LBAP

線性受限到達程序 (LBAP) 定義:任何長度 $t$ 的時間區間內,串流中的訊息數最多為:

$$ R \cdot t + B $$

其中 $R$ 是速率,$B$ 是最大突發量。

漏桶 (Leaky bucket)

想像一個底部有洞的水桶:可任意倒水進去直到滿,水則以固定速率 $R$ 從底部漏出

  • 確保串流永遠不會以高於 $R$ 的速率流出
  • 緩衝大小 $B$ 決定能容忍多大的突發而不丟資料,也限制元素停留時間。
  • 缺點:完全消除突發——但有時沒必要這麼嚴。

令牌桶 (Token bucket)

以固定速率 $R$ 產生令牌收集在容量 $B$ 的桶裡。要送 $S$ 大小的資料,桶裡至少要有 $S$ 個令牌,送完就扣掉。

  • 它保證任何區間 $t$ 內送出的資料不超過 $R \cdot t + B$(正是 LBAP 的實作)。
  • 好處:串流閒置一陣子後,可以動用累積的令牌做較大的突發
  • 若要再壓掉超大突發,可在令牌桶後面再串一個流速 $F$($F$ 須明顯大於 $R$)的漏桶。
💡
關鍵

漏桶以固定速率漏出、完全消除突發;令牌桶累積令牌、允許閒置後的較大突發,是 LBAP 的實作。

STEP 2

生活妙喻

水桶與遊樂園快速通關券

漏桶=底部破洞的水桶

不管你怎麼忽快忽慢地倒水進去,水都只會以固定速度從底洞漏出。倒太快、桶滿了就溢出來(丟資料)。它把任何起伏都磨成一條平穩的細流——徹底消除突發。

令牌桶=遊樂園的快速通關券

園方每隔固定時間發一張快速通關券(令牌),你可以先存著不用,券放在一個有上限的票夾裡(桶容量 $B$)。

  • 平常人少時券一直累積。
  • 等到你想衝熱門設施(突發),可以一口氣掏出一疊券插隊進場——這就是「閒置後允許較大突發」。
  • 但你手上券再多,發券速度($R$)不變,長期下來進場總量仍受 $R \cdot t + B$ 限制。

漏桶像嚴格的水龍頭(一視同仁、絕不突發);令牌桶像存券制度(平常忍著、需要時爆發),更貼近多媒體有時大塊、有時零碎的真實流量。

💡
關鍵

漏桶=固定漏水的破洞水桶;令牌桶=可累積的快速通關券,平常忍著、要時爆發。

STEP 3

實用超能力

硬保證 vs 軟保證

資源保留:要給多少?

要對串流提供某種 QoS,常見做法是保留一部分資源頻寬專用。

  • 若要任何時刻都滿足需求,就得依最大頻寬保留——這是提供硬保證 (hard / deterministic guarantee) 的唯一方法,適合不能容忍品質下降的應用,例如醫療影像(X 光影片掉格可能漏看症狀)、影片錄製(掉格會永久留痕)。
  • 網路保留很單純:頻寬 $B$ 的網路可允入頻寬總和不超過 $B$ 的串流,例如 16 Mbps 的權杖環可承載 10 條 1.5 Mbps 視訊。
  • 但 CPU 就難算:執行時間取決於處理器,常只能靠量測估計,誤差大。

統計多工:賭它不會同時爆

依最大需求保留常造成浪費(MPEG 實際用量常遠低於峰值)。於是常見做法是超額預訂 (overbook) 資源,得到統計/軟保證 (statistical / soft guarantee)——只在很高機率下成立,使用率更好,但同時尖峰時品質可能下降,應用須能承受。

統計多工的假設是:串流夠多時,總頻寬趨於穩定(有人量大就有人量小,互相抵消)。

但這只對『不相關』的串流成立! 實驗顯示真實多媒體流量具自相似性 (self-similar):把一堆突發串流加總,總流量仍然突發,並不會被抹平。

💡
關鍵

依最大需求保留=硬保證但易浪費;超額預訂=軟保證效率高,但流量自相似性使統計多工常失效。

🔆
生活妙喻:漏桶 ≈ 底部破洞的水桶

不管怎麼倒,水都以固定速率漏出,徹底消除突發。

🔆
生活妙喻:令牌桶 ≈ 可累積的快速通關券

平常存券,需要時一口氣用掉做突發,但發券速率固定限制了長期總量。

🔆
生活妙喻:硬保證 vs 軟保證 ≈ 包場 vs 超賣機票

依最大需求保留像包整個場地絕不出錯;統計多工像超賣機票,賭沒人同時報到,效率高但偶爾會有人沒位子。

本節字彙

流量塑形 (traffic shaping)
用輸出緩衝撫平資料流,讓實際流量貼近描述、便於排程。
🧠 shaping=把忽高忽低的流量『捏成』平穩形狀。
漏桶 (leaky bucket)
以固定速率 R 漏出、完全消除突發的塑形演算法,B 決定可容忍的突發量。
🧠 破洞水桶:進得亂,出得穩。
令牌桶 (token bucket)
固定速率產生令牌累積於桶中,允許閒置後較大突發,是 LBAP 的實作。
🧠 存快速通關券,需要時爆發。
統計多工 (statistical multiplexing)
超額預訂資源以提高使用率,僅在高機率下成立(軟保證)。
🧠 像超賣機票,賭大家不會同時報到。
漏桶 (leaky bucket) 演算法對串流流出速率的效果是什麼?
令牌桶 (token bucket) 相較於漏桶,最關鍵的優點是什麼?
LBAP 模型規定任何長度 t 的區間內訊息數最多為 R·t + B。在令牌桶裡,B 對應什麼?
03

資源管理與排程

輪詢與位元級公平佇列確保各串流公平共享,加權公平佇列照顧不同頻寬需求。

先讀原文段落,旁邊就是白話

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

原文 · 資源管理與排程 d for a certain traffic mix. Negotiation procedures • For distributed multimedia applications, the components of a stream are likely to be located in several nodes. There will be a QoS manager at each node. A straightforward approach to QoS negotiation is to follow the flow of data along each stream from the source to the target.
白話導讀

輪詢與位元級公平佇列確保各串流公平共享,加權公平佇列照顧不同頻寬需求。

公平佇列:別讓壞鄰居搶光頻寬

輪詢與位元級公平佇列確保各串流公平共享,加權公平佇列照顧不同頻寬需求。

STEP 1

深度探秘

有資源還不夠,要排得對

效能 ≠ 準時

要提供 QoS,系統不只要有足夠資源(效能),還要在需要的時刻把資源給對的行程(排程)。資源排程器依某些準則決定行程的優先權。

傳統分時系統的 CPU 排程多看回應性與公平性:I/O 密集的工作給高優先權以求快速回應,CPU 密集的給較低優先權,同類行程一視同仁。這些準則在多媒體仍有效,但截止期限的存在改變了排程問題的本質。

輪詢讓各串流公平共享資源、防止壞串流霸佔頻寬的方法。">公平佇列 (Fair queuing)

當多條串流爭用同一資源,必須講公平,防止行為不良的串流吃掉太多頻寬。最直接的做法是對同類串流做輪詢 (round-robin) 排程:

  • 封包級 (packet-by-packet) 輪詢:一次處理一個封包。
  • 位元級 (bit-by-bit) 輪詢:在位元層次輪流,對不同封包大小與到達時間更公平。這類方法稱為公平佇列 (fair queuing)

加權公平佇列 (Weighted fair queuing)

基本輪詢給每條串流相同頻寬。若要照顧各串流不同的頻寬需求,可擴充位元級方案,讓某些串流每輪傳更多位元——這就是加權公平佇列

💡
關鍵

公平佇列用輪詢防止壞串流霸佔頻寬,位元級比封包級公平,加權版可照顧不同需求。

STEP 2

生活妙喻

自助餐分菜的智慧

公平佇列=自助餐排隊夾菜

想像一鍋限量的紅燒肉(共享資源),一群人排隊夾(多條串流)。

  • 封包級輪詢:每人一次只能夾一整塊就到隊尾重排。問題是有人夾到大塊、有人夾到小塊,份量不均
  • 位元級輪詢:規定每人一次只能夾一口的量(位元),輪流夾。無論肉塊大小,大家拿到的總量更接近——這就是位元級更公平的精神。

至於『行為不良的串流』,就像那個拿大盤子想一次鏟走半鍋的人——公平佇列就是用『一次只能夾一口、輪流來』來治他。

加權公平佇列=VIP 多分一點

如果今天有人是付了雙倍餐費的 VIP(頻寬需求較大),可以規定他每輪能多夾幾口。大家還是輪流、還是公平,只是按權重分配——這就是加權公平佇列。

💡
關鍵

位元級輪詢像規定每次只夾一口輪流來,份量更均;加權版讓 VIP 每輪多夾幾口。

STEP 3

實用超能力

位元級理想如何在現實落地

不能真的『一個位元一個位元』送

位元級輪詢是個理想模型——封包當然不可能拆成單一位元交錯傳送。實作上的巧思是:

給定影格速率,可以計算每個封包『理論上應該在何時送完』,再依這個計算結果排序封包的傳送順序

這樣就能逼近真正位元級輪詢的行為。差別只在於:當一個大封包正在送,它可能擋住一個本來在位元級方案下會優先的小封包。但好消息是——沒有任何封包會被延誤超過一個最大封包傳送時間

flowchart TD
  A[計算每個封包理論完成時刻] --> B[依完成時刻排序傳送]
  B --> C[逼近位元級輪詢的公平性]
  C --> D[大封包可能短暫擋住小封包]
  D --> E[但延誤不超過一個最大封包傳送時間]

實用價值:你的路由器、視訊伺服器就用這類公平佇列,確保一個下載大檔的鄰居不會把你的視訊通話頻寬整碗端走,同時又能給重要串流(加權)多一點頻寬。

💡
關鍵

用『理論完成時刻』排序封包逼近位元級公平,延誤不超過一個最大封包傳送時間。

🔆
生活妙喻:公平佇列 ≈ 自助餐輪流夾菜

規定一次只能夾一口、輪流來,防止有人鏟走半鍋。

🔆
生活妙喻:位元級 vs 封包級 ≈ 一口 vs 一整塊

限制夾一口輪流,比一次夾一整塊更能讓份量均勻。

🔆
生活妙喻:加權公平佇列 ≈ VIP 每輪多夾幾口

仍然輪流公平,但按權重讓需求大的串流分到更多。

本節字彙

公平佇列 (fair queuing)
用輪詢讓各串流公平共享資源、防止壞串流霸佔頻寬的方法。
🧠 fair=『一次一口、輪流來』的公平分菜。
輪詢 (round-robin)
依序輪流分配資源給各競爭者的排程方式。
🧠 round=繞一圈,人人輪到。
位元級公平佇列 (bit-by-bit)
在位元層次輪流的理想模型,對不同封包大小更公平,實作上以理論完成時刻排序逼近。
🧠 拆到最細的『一口』,份量最均。
加權公平佇列 (weighted fair queuing)
讓某些串流每輪傳更多位元,以照顧不同頻寬需求的公平佇列。
🧠 VIP 加權,多夾幾口。
公平佇列 (fair queuing) 主要要解決什麼問題?
為什麼位元級 (bit-by-bit) 輪詢比封包級 (packet-by-packet) 更公平?
現實中無法真的逐位元交錯傳送封包,實作如何逼近位元級輪詢?

即時排程:EDF 與 RM

最早截止期限優先 EDF 與速率單調 RM 兩種經典即時排程,及其最佳性條件。

STEP 1

深度探秘

兩種經典即時排程

前提:資源沒被超配

即時排程演算法假設 CPU 資源沒有被超額配置(這是 QoS 管理員的責任),然後在這前提下把 CPU 時段分給各行程,確保它們準時完成。傳統規律連續串流的模型,非常適合即時排程。

EDF:最早截止期限優先

Earliest-Deadline-First (EDF) 幾乎成了即時排程的代名詞:每個工作項都帶一個截止期限,排程器永遠先處理截止期限最早的那個。在多媒體中,每個抵達行程的媒體元素就是一個工作項。

EDF 的強項:對單一資源依時間準則而言是最佳的 (optimal)——只要存在能滿足所有時間需求的排程,EDF 一定找得到 [Dertouzos 1974]。

缺點:每個訊息都要做一次排程決策,開銷大。

RM:速率單調

Rate-Monotonic (RM) 針對週期性行程,依速率指定優先權:工作項速率越高的串流,優先權越高。它基於存在較久的元素(串流)來排程,效率更好。

RM 的最佳性條件:在頻寬利用率低於 69% 的情況下是最佳的 [Liu and Layland 1973]。剩下的頻寬可給非即時應用。

處理突發:deadline/workahead

為應付突發的即時流量,可讓串流中的訊息提前成批抵達,但只在其規律抵達時刻才對它套用 EDF——這就是 deadline/workahead 排程。

💡
關鍵

EDF 依截止期限排序、單一資源最佳但開銷大;RM 依速率定優先權、利用率低於 69% 時最佳。

STEP 2

生活妙喻

交報告與固定打掃班表

EDF=先做最快截止的作業

期末週你手上有一堆作業,每份都有繳交期限。EDF 的策略很直覺:永遠先寫『最快要交』的那份。哪份 deadline 最近就先動手,寫完再看下一個最近的。

  • 好處:只要『理論上能全部如期交出』,這個策略保證做得到(最佳性)。
  • 壞處:你每完成一件就得重新看一次『現在哪份最急』(每個訊息一次決策,開銷大)。

RM=按『多久做一次』排固定班表

換個情境:宿舍打掃。RM 的策略是看頻率:倒垃圾每天要做(高頻率→高優先),拖地每週一次(低頻率→低優先)。你按這個固定的優先順序排班,而不是每次都重新評估。

代價:這套固定班表只有在你沒把行程表塞太滿(利用率 < 69%) 時,才保證每件事都來得及。塞超過,就可能有事情開天窗。

💡
關鍵

EDF 像每次都先寫最快要交的作業;RM 像按做事頻率排固定打掃班表。

STEP 3

實用超能力

怎麼選?EDF 還是 RM?

兩者的取捨

面向 EDF RM
排序依據 截止期限(動態) 速率/頻率(靜態優先權)
決策頻率 每個訊息一次(開銷大) 依串流(開銷小)
最佳性 單一資源依時間準則最佳 利用率 < 69% 時最佳
適合 截止期限多變的情境 規律週期性串流
flowchart TD
  A[要排程即時工作] --> B{截止期限多變還是週期規律}
  B -->|多變| C[EDF 依最早截止期限挑]
  B -->|週期規律| D[RM 依速率定靜態優先權]
  C --> E[單一資源最佳但每訊息決策]
  D --> F[開銷小 但須利用率低於 69%]

為什麼這對你重要

當你看一段流暢的串流時,背後的作業系統正用這類演算法,確保每張影格的解碼工作在它該顯示之前完成。理解 EDF/RM,你就懂為什麼即時系統不能把 CPU 排到 100% 滿載——RM 需要保留約三成餘裕,剩下的才安心交給背景的非即時工作。

💡
關鍵

截止期限多變用 EDF、週期規律用 RM;即時系統須保留餘裕,不能排到全滿。

🔆
生活妙喻:EDF ≈ 先寫最快要交的作業

永遠挑 deadline 最近的先做,但每做完一件就要重新評估誰最急。

🔆
生活妙喻:RM ≈ 按頻率排的打掃班表

倒垃圾每天做給高優先、拖地每週做給低優先,按固定優先順序排班。

🔆
生活妙喻:利用率 < 69% 限制 ≈ 行程表別塞太滿

固定班表只在沒塞爆時保證樣樣準時,塞過頭就有事開天窗。

本節字彙

EDF(最早截止期限優先)
永遠先處理截止期限最早的工作項,對單一資源依時間準則為最佳。
🧠 Earliest Deadline First=『誰最急先做誰』。
RM(速率單調)
依工作項速率指定靜態優先權,速率越高優先權越高,利用率 <69% 時最佳。
🧠 Rate-Monotonic=『頻率越高、排越前』。
最佳性 (optimal)
若存在能滿足所有時間需求的排程,該演算法一定找得到。
🧠 optimal=『辦得到的它一定辦得到』。
deadline/workahead
允許訊息提前成批抵達,但只在其規律抵達時刻才套用 EDF,以應付突發。
🧠 workahead=『先到沒關係,照表處理』。
EDF 排程的核心規則是什麼?
關於 EDF 的『最佳性』,下列敘述最正確的是?
RM(速率單調)排程如何指定優先權?它的最佳性條件是什麼?
04

串流調適:縮放與過濾

在資料進入瓶頸前於源頭降低頻寬,介紹時間、空間、頻率、振幅、色彩等縮放法。

先讀原文段落,旁邊就是白話

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

原文 · 串流調適:縮放與過濾 Scaling If adaptation is performed at the target of a stream, the load on any bottleneck in the system is not decreased and the overload situation persists. It is useful to adapt a stream to the bandwidth available in the system before it enters a bottleneck resource in order to resolve contention. Scaling is best applied when live streams are sampled. For stored streams, how easy it is to generate a downgraded stream depends on the encoding method.
白話導讀

在資料進入瓶頸前於源頭降低頻寬,介紹時間、空間、頻率、振幅、色彩等縮放法。

縮放 Scaling:在源頭瘦身

在資料進入瓶頸前於源頭降低頻寬,介紹時間、空間、頻率、振幅、色彩等縮放法。

STEP 1

深度探秘

保證不了,就主動降級

調適的必要

當某個 QoS 無法保證、或只能以某機率保證時,應用必須調適 (adapt)——隨可用品質起伏調整自己的表現。對連續媒體而言,這就轉化成不同等級的呈現品質

最簡單的調適是丟掉一些資訊:音訊取樣彼此獨立,丟了立刻被聽見;Motion JPEG 每張影格獨立,掉格較可容忍;但 MPEG 的一張影格依賴相鄰影格,對遺漏較不耐受——錯誤要花更久才能恢復,甚至會被放大。

若頻寬不足又不丟資料,串流延遲會越積越大。非互動應用或可忍受(但最終可能緩衝溢位);互動應用則不行。若串流落後播放時刻,就該加快播放速率追回進度。

子取樣方式降級。">縮放 (Scaling)

若調適只在目標端做,瓶頸的負載並未減輕,過載依舊。聰明的做法是在串流進入瓶頸資源之前,於源頭就把它調整到可用頻寬——這就是縮放 (scaling)

縮放最適合用在即時取樣的串流;對已儲存的串流,若得整段解壓再重編才能降級,就太麻煩了。

縮放演算法依媒體而異,但核心都是對訊號做子取樣 (subsample)。音訊可降低取樣率,或在立體聲中丟掉一個聲道——可見不同方法作用在不同粒度上。

💡
關鍵

縮放是在源頭、進入瓶頸前對訊號子取樣降級,才能真正紓解過載。

STEP 2

生活妙喻

寄包裹前先精簡行李

在源頭瘦身,才不會卡在門口

想像你要把一大箱行李寄過一道很窄的門(瓶頸)

  • 在目標端調適=箱子硬塞到門口才開始丟東西——可是門前已經塞車了,過載沒解決。
  • 縮放(源頭調適)還沒出門就先精簡行李,把箱子縮到能順利通過那道窄門的大小。瓶頸前的塞車自然消失。

子取樣=抽掉一部分內容

縮放的本質是子取樣:像把一本厚相簿每隔幾張抽掉一張,或把彩色照片印成黑白——資訊變少、體積變小,但還看得懂。

為什麼即時取樣最好縮放?

即時取樣就像現場錄音邊錄邊調品質,要降級很自然。但若是早就壓好封存的影片,要降級可能得整片拆封、重剪、再封裝,費工又費時——這就是「對已儲存串流可能太麻煩」的意思。

💡
關鍵

縮放像出門前先精簡行李,子取樣像每隔幾張抽掉相片,即時取樣最好降級。

STEP 3

實用超能力

視訊的五種縮放法

影像縮放的五種招式

縮放法 做法 適合
時間縮放 (Temporal) 減少單位時間內傳的影格數 影格自含的 Motion JPEG,較不適合 MPEG
空間縮放 (Spatial) 減少每張影像的像素數 階層式編碼最理想,如 JPEG、MPEG-2 多解析度
頻率縮放 (Frequency) 調整影像的壓縮演算法 壓縮率可大幅提高才開始看出畫質下降
振幅縮放 (Amplitudinal) 降低每個像素的色彩深度 H.261 用它在內容變動時維持固定吞吐
色彩空間縮放 (Colour-space) 減少色彩空間項目,如彩色轉灰階 需要大幅降頻寬時

需要時這些方法可組合使用

縮放系統怎麼運作?

flowchart LR
  A[源頭 scaler 縮放器] --> B[網路與瓶頸]
  B --> C[目標 monitor 監視器]
  C -->|偵測到延遲 送 scale-down| A
  C -->|一段時間後 試著 scale-up| A

目標端的監視器 (monitor) 記錄訊息抵達時間,發現延遲(瓶頸徵兆)就送降級訊息給源頭,源頭的縮放器 (scaler) 隨即降低頻寬;過一陣子再試著升級。若瓶頸還在,監視器會再偵測到延遲、再降級。

關鍵挑戰:避免不必要的升級、防止系統來回震盪 (oscillating)——一下降一下升,反而更糟。

💡
關鍵

視訊有時間、空間、頻率、振幅、色彩五種縮放;監視器與縮放器配合,但須防震盪。

🔆
生活妙喻:縮放(源頭調適) ≈ 出門前先精簡行李

在進入窄門前就把箱子縮小,才不會卡在門口塞車,真正紓解瓶頸。

🔆
生活妙喻:子取樣 ≈ 相簿每隔幾張抽掉一張

減少取樣或像素,資訊變少、體積變小,但仍看得懂。

🔆
生活妙喻:監視器與縮放器的互動 ≈ 下游回報、上游減速

目標偵測延遲就請源頭降級,過陣子再試升級,但要避免一直來回震盪。

本節字彙

調適 (adaptation)
當 QoS 無法保證時,應用隨可用品質起伏調整呈現等級。
🧠 adapt=『看菜吃飯』,有多少資源做多好的畫質。
縮放 (scaling)
在串流進入瓶頸前於源頭降低頻寬,以子取樣方式降級。
🧠 scaling=『出門前先瘦身』,源頭調整最有效。
子取樣 (subsample)
對訊號取較少的樣本以降低資料量,是各種縮放法的共同核心。
🧠 sub=少一點,每隔幾張抽一張。
時間縮放 (temporal scaling)
減少單位時間內傳輸的影格數,適合影格自含的 Motion JPEG。
🧠 temporal=時間軸上『少傳幾張』。
為什麼『縮放』要在源頭、且在串流進入瓶頸『之前』進行?
各種縮放演算法雖然依媒體而異,但它們共同的核心手法是什麼?
下列哪一種縮放法『最不適合』套用在 MPEG 串流上,原因是什麼?

過濾 Filtering:因人制宜的品質

多接收者情境下,於路徑各節點分層過濾,讓每個目標都拿到最佳可行品質。

STEP 1

深度探秘

縮放的盲點

縮放在多接收者情境的問題

縮放是在源頭修改串流。但若一條串流要送給多個接收者,問題就來了:

當通往某一個目標的路徑出現瓶頸,這個目標送出降級訊息,源頭一降級,所有接收者都拿到變差的品質——即使其他人原本完全有能力處理原始串流。

這就像因為一位客人吃不下,整桌人都被迫只能吃半份。

過濾 (Filtering)

過濾 (filtering) 的目標是給每個接收者各自最佳可行的 QoS,做法是在從源頭到目標的路徑上、於每個相關節點各自進行縮放

  • RSVP 就是支援過濾的 QoS 協商協定。
  • 前提:串流必須被切成一組階層式子串流 (hierarchical substreams),每一層再疊加更高的品質。
  • 路徑上各節點的容量決定該目標能收到幾層子串流。

在哪裡過濾?

所有用不到的子串流,要盡可能在靠近源頭處就被過濾掉(甚至就在源頭),以免白白傳輸之後又被丟棄的資料。但有個例外:若下游某處還有能承載整條子串流的路徑,就不在這個中間節點過濾掉它

💡
關鍵

過濾在路徑各節點分層縮放,讓異質接收者各取最佳品質,且盡量在靠近源頭處濾除無用子串流。

STEP 2

生活妙喻

中央廚房的分流出餐

縮放像『一鍋煮到底』,過濾像『分流調味』

回到那桌客人:

  • 縮放:廚房只煮一種口味、一種份量送上整桌。只要有一位客人受不了辣,整鍋就得調淡——大家一起吃清淡版。
  • 過濾:改成中央廚房 + 沿途分站的模式。主菜分成基本層、加料層、頂級層(階層式子串流),在送餐路徑的各個分站,依照那一桌的胃口與通道寬窄決定加幾層料。能吃辣又坐大桌的客人拿到頂級全配,胃口小的那桌只拿基本層。

為什麼盡量在靠源頭處過濾?

如果某一層料注定沒人要,就在廚房(源頭)就別做別送,免得大老遠運過去再倒掉,白白佔用通道(頻寬)。但只要下游還有一桌吃得下,這層料就得繼續往下送,不能在半路砍掉。

💡
關鍵

過濾像中央廚房分層出餐,依各桌胃口與通道加料,沒人要的層盡早別送。

STEP 3

實用超能力

階層子串流如何運作

階層式子串流:一層一層疊品質

過濾要能運作,串流必須被分層編碼

  • 基本層:最低可用品質(人人都收得到)。
  • 增強層 1、2、3…:每多收一層,品質就更好(更高解析度/更高張數)。

路徑上每個節點依其容量,決定要讓幾層通過、濾掉哪些。

flowchart TD
  S[源頭 分層串流] --> N1[中間節點 依容量過濾]
  N1 --> T1[高頻寬目標 收基本層加多層增強]
  N1 --> N2[較窄節點 再過濾]
  N2 --> T2[中頻寬目標 收基本層加一層增強]
  N2 --> T3[低頻寬目標 只收基本層]

縮放 vs 過濾,一次看懂

面向 縮放 Scaling 過濾 Filtering
在哪調整 只在源頭 路徑上各相關節點
適合對象 單一接收者 異質的多個接收者
一人瓶頸的影響 全體一起降級 只影響該路徑,其他人不受累
需要 階層式子串流+如 RSVP 的協定

實用價值:這正是現代直播/多人視訊背後的可調式編碼 (scalable coding) 思路——同一場直播,光纖觀眾看 4K、行動網路觀眾看 480p,彼此互不拖累。

💡
關鍵

把串流分成基本層加增強層,各節點依容量決定通過層數,達成因人制宜不互相拖累。

🔆
生活妙喻:縮放的盲點 ≈ 一位客人吃不下整桌跟著吃清淡

源頭一降級,所有接收者都被迫拿到變差品質,即使其他人原本能承受。

🔆
生活妙喻:過濾 ≈ 中央廚房分層出餐

主菜分基本層與加料層,沿途各分站依各桌胃口與通道加幾層,各取最佳。

🔆
生活妙喻:盡量在源頭過濾 ≈ 沒人要的料就別做別運

注定沒人要的層在廚房就別出,免得運到半路又倒掉、白佔通道。

本節字彙

過濾 (filtering)
在源頭到目標路徑的各相關節點分別縮放,給每個目標各自最佳可行的 QoS。
🧠 filtering=沿途分站『因桌制宜』地加料。
階層式子串流 (hierarchical substreams)
把串流切成基本層加多個增強層,逐層疊加品質。
🧠 像一層層堆疊的蛋糕,多一層多一分品質。
RSVP
支援過濾的 QoS 協商協定,由接收者發起連接到串流。
🧠 RSVP=『回覆出席』,由收方主動連上來取資料。
可調式編碼 (scalable coding)
把內容分層編碼,使不同能力的接收者各取所需層數的編碼方式。
🧠 scalable=可伸縮,能配合各種頻寬。
在『一個源頭、多個接收者』的情境下,單純用縮放會出現什麼問題?
過濾 (filtering) 達成『每個目標各取最佳品質』的方式是什麼?
過濾要能運作,串流必須先被切成什麼樣的結構?
05

案例研究:Tiger、BitTorrent、ESM

用平價 PC 透過條帶化、鏡像與分散式排程,同時供應大量即時視訊串流並容錯。

先讀原文段落,旁邊就是白話

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

原文 · 案例研究:Tiger、BitTorrent、ESM TIGER, BITTORRENT AND END SYSTEM MULTICAST 901 [Delgrossi et al. A problem for the scaling system is to avoid unnecessary scale- up operations and to prevent the system from oscillating. 2 Filtering As scaling modifies a stream at the source, it is not always suitable for applications that involve several receivers: when a bottleneck occurs on the route to one target, this target sends a scale-down message to the source and all targets receive the degraded quality, although some would have no problem in handling the original stream. Filtering is a method that provides the best possible QoS to each target by applying scaling at each relevant node on the path from the source to the target (Figure 20.
白話導讀

用平價 PC 透過條帶化、鏡像與分散式排程,同時供應大量即時視訊串流並容錯。

Tiger 視訊檔案伺服器

用平價 PC 透過條帶化、鏡像與分散式排程,同時供應大量即時視訊串流並容錯。

STEP 1

深度探秘

用平價 PC 服務上萬觀眾

Tiger 的設計目標

Tiger 是微軟研究院開發的視訊檔案伺服器,典型應用是付費隨選電影。設計目標包括:

  • 大規模隨選視訊:可擴充到同時服務一萬名客戶;客戶幾秒內就看到首批影格,並能隨意暫停、倒帶、快轉。熱門電影會被多位客戶不同步、時間錯開地同時觀看。
  • 服務品質:固定速率供應、抖動小、遺失率極低。
  • 可擴充且分散:靠增加電腦來擴充。
  • 低成本硬體:用商品級 PC 與標準硬碟。
  • 容錯:任一伺服器或硬碟故障後,服務不明顯降級仍持續。

硬體架構

  • cub(幼虎):一群相同的 PC,每台接 2–4 顆標準硬碟,配 Ethernet 與 ATM 網卡,負責實際搬運視訊資料。
  • controller(控制器):另一台 PC,不碰多媒體資料,只處理客戶請求與管理 cub 的工作排程。
flowchart TD
  CTRL[控制器 處理請求與排程] --> C0[cub 0]
  CTRL --> C1[cub 1]
  CTRL --> C2[cub 2]
  C0 --> ATM[ATM 交換網路]
  C1 --> ATM
  C2 --> ATM
  ATM --> CLIENTS[客戶端 顯示視訊]
💡
關鍵

Tiger 用平價 cub PC 搬資料、controller 只管排程,目標是低成本、可擴充、容錯地服務大量觀眾。

STEP 2

生活妙喻

撲克牌發牌與備份莊家

條帶化=把整副牌發給所有人

如果整部電影只存在一顆硬碟,那顆碟就會被同看這部熱門片的觀眾擠爆。Tiger 的做法是條帶化 (striping):把電影切成約 1 秒、約 0.5 MB 的區塊 (block)(兩小時電影約 7000 塊),輪流分散存到所有 cub 的硬碟,到最後一顆碟就『繞回』第 0 顆。

就像發撲克牌:一張一張輪流發給每個人,沒有人手上是一整副完整的牌——負載自然被攤平。

鏡像=把備份拆碎分散

條帶化有個風險:任一碟或 cub 壞掉,每部電影都會出現破洞。Tiger 用鏡像 (mirroring) 解決:把每個區塊拆成數份次要副本 (secondaries),份數由去叢集因子 (decluster factor) d(典型 4–8)決定,分散到 disk i+1 到 i+d。

妙處:一旦某 cub 倒下,補位的工作被攤分到好幾個 cub,而不是壓垮某一個。decluster factor 為 8 時,平常約 7/8 資源做正常工作,留 1/8 應付故障補位。

💡
關鍵

條帶化像輪流發牌攤平負載;鏡像把備份拆成 d 份次要副本分散,故障時由多個 cub 共同補位。

STEP 3

實用超能力

分散式排程與容錯

排程:slot 與兩個時間

Tiger 設計的心臟是排程,組織成一串 slot,每個 slot 代表『播放某部電影一個區塊』所需的工作。每位觀看者 (viewer) 對應一個 slot,記錄客戶位址、播放的檔案、目前位置、播放序號等。

兩個關鍵時間:

  • 區塊播放時間 $T$:客戶端顯示一個區塊所需時間,約 1 秒,並須在各串流區塊間維持間隔 $T$。
  • 區塊服務時間 $t$:cub 完成『讀區塊→封包化送上 ATM→更新狀態傳給下一個 cub』的最大時間,$t$ 遠小於 $T$。

一顆碟能服務的串流數約為:

$$ \frac{T}{t} $$

典型 $\frac{T}{t} > 4$。例如 5 個 cub、每個 3 顆碟,約可同時送 70 條串流;14-cub、56-disk 的設定實測可送 602 條 2-Mbps 串流。

容錯實測

flowchart LR
  A[主要區塊不可用 因 cub 或碟故障] --> B[改取鏡像的次要副本]
  B --> C[由 d 個 cub 分擔額外負載]
  C --> D[客戶端緩衝組裝後播放]

當主要區塊因故障取不到,就改抓鏡像的次要副本,額外負載由 $d$ 個 cub 分擔,只要排程留一點餘裕即可不中斷。實測:一個 cub(含 3 碟)故障下,資料遺失率僅 0.02%,遠優於設計目標。

💡
關鍵

排程以 slot 對應 viewer,一顆碟服務約 T/t 條串流;故障時改取次要副本由 d 個 cub 分擔,實測遺失極低。

🔆
生活妙喻:條帶化 striping ≈ 輪流發撲克牌

一張一張輪流發,沒人手握整副牌,負載被攤平到所有硬碟。

🔆
生活妙喻:鏡像與 decluster factor ≈ 把備份拆碎交給多位備援莊家

每塊拆成 d 份次要副本分散,故障時補位工作攤給多個 cub 而非壓垮一個。

🔆
生活妙喻:slot 排程 ≈ 每位觀眾一個專屬座位牌

每個 slot 記錄一位觀看者的播放進度,cub 循環處理到期的座位牌。

本節字彙

cub(幼虎)
Tiger 中負責搬運視訊資料的商品級 PC,各接數顆硬碟與網卡。
🧠 cub=小老虎,一群小虎扛起資料搬運。
條帶化 (striping)
把電影切成區塊輪流分散存到所有碟,以攤平負載。
🧠 stripe=一條條輪流鋪,像發牌。
鏡像/次要副本 (mirroring / secondaries)
把每個區塊拆成 d 份備份分散儲存,供故障時補位。
🧠 把備份拆碎分散,誰倒了大家一起補。
去叢集因子 (decluster factor d)
每個區塊拆成的次要副本份數(典型 4–8),決定故障負載如何分攤。
🧠 d 越大,補位的負擔分得越散。
Tiger 為什麼把每部電影『條帶化』分散存到所有 cub 的硬碟,而不是整部存在單一硬碟?
Tiger 的鏡像把每個區塊拆成數份『次要副本』分散儲存,去叢集因子 d 帶來的好處是什麼?
Tiger 的 controller(控制器)扮演什麼角色?

BitTorrent 點對點下載

把大檔切成 chunk 平行下載,用 tit-for-tat 與 rarest-first 鼓勵合作並加速散布。

STEP 1

深度探秘

把大檔切碎、四處平行下載

BitTorrent 的核心點子

BitTorrent 是專為下載大型檔案(含視訊)設計的點對點檔案分享應用。注意:它不是即時串流,而是先把檔案下載下來、之後再播。

核心設計是:把檔案切成固定大小的 chunk,這些 chunk 散落在點對點網路各處。客戶可同時從不同站點平行下載多個 chunk,大幅減輕任一站點的負擔——相較於從單一伺服器用 HTTP 下載,這對熱門大檔好得多。

.torrent 與 tracker

檔案要分享時,會建立一個 .torrent 檔,內含中介資料:

  • 檔名與長度;
  • tracker 的位置(URL)——一台集中式伺服器,管理該檔的下載;
  • 每個 chunk 的 SHA-1 checksum,供下載後驗證內容。

用 tracker 是對『純點對點』原則的妥協,但能集中維護上述資訊。tracker 負責追蹤該檔的下載狀態(誰有完整檔、誰在下載),但一旦把部分節點清單給了新加入者,它的任務就結束了——後續排程是去中心化、由各 peer 自行決定。

💡
關鍵

BitTorrent 把大檔切成 chunk 平行下載;tracker 集中提供節點清單,後續下載排程則去中心化。

STEP 2

生活妙喻

拼圖交換社團

把檔案想成一盒拼圖

  • 整個檔案=一盒完整拼圖
  • chunk=一片片拼圖
  • 你不必跟同一個人要走全部拼圖,而是同時向好幾位社友各要幾片,很快就湊齊(平行下載)。

社團裡的角色

角色 比喻
seeder(種子) 手上有整盒完整拼圖的人,最初建立檔案者就是第一顆種子
leecher(下載者) 只有部分拼圖、正在湊的人;湊齊後就能升級成種子
tracker 社團的布告欄,記錄『誰有哪些片、誰在湊』
torrent / swarm(群) 圍繞這盒拼圖的整個社團:tracker+種子+下載者

檔案就這樣像病毒般在社團裡擴散:需求越高,散布越快。leecher 湊齊後變 seeder,供應源越來越多。

💡
關鍵

檔案像拼圖盒、chunk 像拼圖片;seeder 有全套、leecher 在湊、tracker 是布告欄、swarm 是整個社團。

STEP 3

實用超能力

tit-for-tat 與 rarest-first

怎麼鼓勵大家當『好公民』?

BitTorrent 靠 peer 既貢獻索取才能運作。它內建獎勵機制 tit-for-tat(以牙還牙/禮尚往來)

優先把資料下載權給那些曾經或正在上傳給你的人。這既是獎勵合作的誘因,也鼓勵『邊下載邊上傳』,把頻寬用到最滿。

機制細節:

  • 一個 peer 同時對 $n$ 個 peer 解除阻塞 (unchoke),依滾動計算的下載速率10 秒重新決定要 unchoke 誰。
  • 30 秒對一個隨機 peer 做樂觀解除阻塞 (optimistic unchoking),讓新進 peer 有機會參與、建立信譽。

rarest-first:先抓最稀有的

flowchart TD
  A[peer 檢視連線對象有哪些 chunk] --> B[找出最稀有的 chunk]
  B --> C[優先下載它]
  C --> D[稀有 chunk 快速散布 提升整體可得性]

BitTorrent 搭配 rarest-first 排程:peer 優先下載在其連線對象中最稀有的 chunk。這確保不易取得的片能快速散播開來,避免某些片成為瓶頸而拖垮整個 swarm 的健康度。

實用啟示:tit-for-tat 用『互惠』對抗搭便車,rarest-first 用『先補稀有』維持資源多樣性——兩者合起來讓去中心化下載又快又穩。

💡
關鍵

tit-for-tat 獎勵互相上傳的 peer,rarest-first 優先抓最稀有 chunk 加速散布、維持 swarm 健康。

🔆
生活妙喻:chunk 平行下載 ≈ 向多位社友各要幾片拼圖

不跟一個人要全部,而是同時向多人各拿幾片,快速湊齊又不壓垮任一人。

🔆
生活妙喻:tit-for-tat ≈ 禮尚往來

你常分我片,我就優先分你片;鼓勵互惠並懲罰只拿不給的搭便車者。

🔆
生活妙喻:rarest-first ≈ 先補貨架上快缺貨的商品

優先取最稀有的 chunk,讓它快速散開,避免成為全社團的瓶頸。

本節字彙

chunk
BitTorrent 把檔案切成的固定大小片段,可從不同站點平行下載。
🧠 chunk=一片拼圖。
tracker
管理某檔下載的集中式伺服器,提供 peer 清單後即退場。
🧠 tracker=社團布告欄,報完名單就閃。
seeder / leecher
seeder 持有完整檔案(全套拼圖),leecher 只有部分、正在下載。
🧠 seeder 種子=全套;leecher=還在湊。
tit-for-tat
獎勵互相上傳的誘因機制,優先下載權給有上傳給你的 peer。
🧠 以牙還牙:你給我我才給你。
rarest-first
優先下載連線對象中最稀有 chunk 的排程策略,加速稀有片散布。
🧠 先搶最難買到的限量品。
BitTorrent 把檔案切成 chunk 並從不同站點平行下載,主要好處是什麼?
關於 BitTorrent 的 tracker,下列敘述最正確的是?
一個只下載、從不上傳的『搭便車』peer,在 tit-for-tat 機制下會遇到什麼?

End System Multicast 即時廣播

端系統用結構化 P2P 自組成樹進行即時視訊廣播,靠效能感知調適自我最佳化。

STEP 1

深度探秘

把智慧放在網路邊緣

即時廣播的挑戰

在網際網路上做即時視訊廣播極具挑戰:要能擴展到大量使用者、耗用大量頻寬與運算、滿足嚴格即時需求、且能適應網路變化。

從 IP multicast 到端系統途徑

最早的實驗直接建在 IP multicast 上,但缺點不少:許多路由器不支援、需在路由器維護 soft state,更根本的是違反端到端原則 (end-to-end principle)——這原則主張通訊功能唯有靠端點上的應用參與才能完整可靠地實現。

因此現今多採端系統途徑 (end-system approach),又稱應用層多播 (application-level multicast):控制與智慧放在網路邊緣而非網路內部,並形成一個覆蓋網路 (overlay network) 來承載多媒體流量。

ESM 的定位

End System Multicast (ESM) 是 CMU 開發、後由 Conviva 商品化的結構化點對點 (structured P2P) 即時視訊多播方案:peer 自組成一棵樹進行即時遞送。它的另一關鍵目標是透過自我組織 (self-organization) 來韌性面對節點加入/離開/故障與網路變化。

對照:CoolStreaming 走非結構化 (unstructured)、資料導向路線(類似 BitTorrent,但有滑動視窗的即時約束);CDN(如 Akamai)則是基礎設施式而非 P2P。

💡
關鍵

ESM 遵循端到端原則把智慧放在邊緣,用結構化 P2P 讓 peer 自組成樹做即時廣播並自我組織以抗變化。

STEP 2

生活妙喻

口耳相傳的人龍傳水

ESM 的樹=人龍傳水桶

想像一場山林失火,源頭水源是 S(樹根,串流來源)。大家排成一棵人龍樹:A 從 S 接水,B、C 再從 A 接,依此往下傳。每個人把水(影格)傳給自己的『孩子』。

成員管理=口耳相傳的八卦

沒有人掌握全體名冊。每個人只記得部分成員(partial view),並定期用 gossip(八卦/流言)協定:隨機挑一位成員,把自己知道的一小撮名單(附上『上次聽到他是什麼時候』的時間戳)分享過去。靠這種口耳相傳,名冊雖不完整卻夠用。

加入=找一個好爸爸

新來的 G 先問源頭 S 要一份隨機候選名單,然後挨個探測 (probe):看每位候選人目前拿到的吞吐量與延遲、以及他已經帶幾個孩子(飽和度)。G 會:

  • 淘汰已飽和的候選(孩子太多);
  • 估算每位候選能提供的服務(吞吐取『對方回報』與『歷史資料』的較小值;延遲=來源回報延遲+探測延遲);
  • 以最佳可用頻寬為主選爸爸,若無頻寬資訊則看延遲。
💡
關鍵

ESM 像人龍傳水樹,用 gossip 口耳相傳維護部分名冊,新節點探測候選後挑吞吐最佳者當父節點。

STEP 3

實用超能力

離開、故障與效能感知調適

節點離開與故障

  • 優雅離開:離開者先通知孩子,並繼續轉發一段時間,避免下游服務中斷。
  • 故障:父節點定期送 alive 訊息給孩子,孩子收不到就判定故障。

兩種情況下,所有孩子都要重跑父節點選擇程序,並額外檢查候選不是自己的後代(以免接成迴圈)。

效能感知調適:讓樹自我最佳化

每個節點持續監控父節點給的服務。若偵測速率明顯低於來源預期速率,就觸發調適——但為避免抖動式亂跳 (thrashing),須先等一段偵測時間 (detection time) 才決定換爸爸。

flowchart TD
  A[節點監控父節點服務] --> B{速率明顯低於預期}
  B -->|否| A
  B -->|是 且超過偵測時間| C[重跑父節點選擇]
  C --> D[換到更佳父節點]
  D --> E[樹持續重新評估 自我組織最佳化]

例如 C 覺得透過 A 拿到的吞吐不理想,跑一次父節點選擇後,改當 E 的孩子。整棵樹就這樣不斷重新評估、自我組織以最佳化整體效能(以吞吐為主、延遲為次)。

實用啟示:ESM 展示了如何只靠邊緣節點的局部資訊(部分名冊+探測+監控),就讓一個大規模即時廣播樹在動態網路中持續自我修復與最佳化。

💡
關鍵

節點離開或故障時孩子重選父節點;效能感知調適在等過偵測時間後換父節點,使樹自我組織持續最佳化。

🔆
生活妙喻:ESM 的樹結構 ≈ 人龍傳水桶

源頭 S 是水源,眾人排成樹,每人把水傳給自己的孩子,逐層遞送串流。

🔆
生活妙喻:gossip 成員管理 ≈ 口耳相傳的八卦名單

沒人有完整名冊,各自隨機把知道的一小撮成員分享出去,名冊雖不完整卻夠用。

🔆
生活妙喻:效能感知調適 ≈ 覺得隊伍前面太慢就換隊

監控父節點服務,太慢且持續超過偵測時間才換爸爸,避免一下換一下換的亂跳。

本節字彙

端到端原則 (end-to-end principle)
通訊功能唯有靠端點上的應用參與才能完整可靠實現,故智慧應放在邊緣。
🧠 聰明放兩端,網路中間保持單純。
結構化 P2P / 覆蓋樹
peer 自組成樹狀覆蓋網路,由根(來源)逐層遞送即時媒體。
🧠 結構化=有固定形狀,像一棵傳水的樹。
gossip 協定
成員定期隨機交換部分成員視圖(附時間戳)以維護群組成員資訊。
🧠 像八卦:一傳十、十傳百,不需全體名冊。
效能感知調適 (performance-aware adaptation)
節點監控服務速率,明顯不足且超過偵測時間後重選父節點,使樹自我最佳化。
🧠 覺得慢就換隊,但先觀察一下避免亂跳。
ESM 採用『端系統途徑』而非直接建在 IP multicast 上,最根本的理由是什麼?
ESM 用 gossip 協定維護成員資訊,這代表系統具有什麼特性?
新節點 G 加入 ESM 樹、選擇父節點時,會優先排除哪一類候選?又主要依什麼挑選?