【Cloud】stateful / stateless, global queue/ seperate queue 差別 & 使用

前言

在雲端服務設計的過程中,
我們會碰到使用 stateful / stateless 的差別

  • stateful:狀態會被保存,也就代表這是持續的任務,不會短時間結束。
  • stateless:(無狀態) 狀態不會被保存,也就代表每一次都是一個獨立任務,結束就結束。
  • 可以先思考一個經典的排隊問題:

    旁邊櫃檯沒人排隊(比喻:此主機忙碌、別的主機空閒),你可以去隔壁櫃臺要求提供服務嗎?
    想想在郵局的情況、再想想在大賣場的情形

  • global queue 才有機會將這個櫃台的人分配給其他櫃員處理,
    否則,他只能夠排隊在該櫃台、一直等待服務。

    • 以上面的排隊問題,換到真實的情境:

    開了兩台主機 一台CPU爆強、一台GPU爆強
    結果在拿task的時候,一個狂吃CPU的 task,使用了 GPU爆強的機器
    這樣是不是浪費了GPU爆強的機器使用成本?

    說明 & 比喻

    有一個很妙的比喻拿來形容 global / seperate queue 的差別非常合適:

    seperate queue

  • 使用情境:不想要堵塞,客戶為尊,客戶到馬上就處理,一般來說會使用許多的 service,讓服務馬上到馬上進行

    就像「全聯排隊」,一個收銀台排隊一排,能不能先結帳要看運氣,
    有時運氣不好,前面排隊的結帳很久,後來才來結帳的人反而先完成。

  • - seperate queue, multiqueue, multi service

    global queue

    • 使用情境:可能會有堵塞的情況,而為了求公平,讓先到的客戶先進行處理,而服務成本一般較高(像主機、櫃員),讓想使用的客戶自行排隊等待服務時間。

    就像「郵局排隊」,先到的客戶先進行處理,一個接著一個

    • global queue, single queue, multi service

    一般情況使用

    一般情況下 global queue 優於 seperate queue,
    但設計上 seperate queue 相對 global queue 容易設計,
    不用考慮太多整體的事情。

    程式設計

    程式設計:seperate queue 設計可以較隨意 (每一個櫃位要擺哪,要怎麼排隊隨便啦),
    global queue 的設計須以 global queue 為主軸,讓每一個系統能夠去提取 task 來做 (排隊動線為尊,櫃檯配合排隊動線設計)。

    Reference

    Licensed under CC BY-NC-SA 4.0