前言
在雲端服務設計的過程中,
我們會碰到使用 stateful / stateless 的差別
- stateful:狀態會被保存,也就代表這是持續的任務,不會短時間結束。
- stateless:(無狀態) 狀態不會被保存,也就代表每一次都是一個獨立任務,結束就結束。
旁邊櫃檯沒人排隊(比喻:此主機忙碌、別的主機空閒),你可以去隔壁櫃臺要求提供服務嗎?
想想在郵局的情況、再想想在大賣場的情形
global queue 才有機會將這個櫃台的人分配給其他櫃員處理,
否則,他只能夠排隊在該櫃台、一直等待服務。
- 以上面的排隊問題,換到真實的情境:
開了兩台主機 一台CPU爆強、一台GPU爆強
結果在拿task的時候,一個狂吃CPU的 task,使用了 GPU爆強的機器
這樣是不是浪費了GPU爆強的機器使用成本?
說明 & 比喻
有一個很妙的比喻拿來形容 global / seperate queue 的差別非常合適:
seperate queue
就像「全聯排隊」,一個收銀台排隊一排,能不能先結帳要看運氣,
有時運氣不好,前面排隊的結帳很久,後來才來結帳的人反而先完成。
global queue
- 使用情境:可能會有堵塞的情況,而為了求公平,讓先到的客戶先進行處理,而服務成本一般較高(像主機、櫃員),讓想使用的客戶自行排隊等待服務時間。
就像「郵局排隊」,先到的客戶先進行處理,一個接著一個
- global queue, single queue, multi service
一般情況使用
一般情況下 global queue 優於 seperate queue,
但設計上 seperate queue 相對 global queue 容易設計,
不用考慮太多整體的事情。
程式設計
程式設計:seperate queue 設計可以較隨意 (每一個櫃位要擺哪,要怎麼排隊隨便啦),
global queue 的設計須以 global queue 為主軸,讓每一個系統能夠去提取 task 來做 (排隊動線為尊,櫃檯配合排隊動線設計)。