Saturday, March 11, 2017

Scale up? or scale out?

前陣子忙碌..一下子就累積了一堆想要碎碎念的題目..
今天就來聊聊最近遇到的問題.. scale up or out.

scale up, 就是系統數量不變.但是增加cpu core, 換更快cpu, 加大ram 來加大承載量
scale out, 增加系統數量來增加服務承載
兩者沒衝突都可以併行..
但是我們一般都是處於有限度資源的環境 這時候就得去考量要以哪種方式優先

在十年前.一般企業用主機還是比較昂貴的狀況下.
換更快的CPU 或是加大RAM 總比加買新主機來的成本低
所以那時候 mainframe, 大冰箱主機相當流行

但在現在幾年中低階主機運算越來越強. virtualization, cloud computing也越來越流行.
scale out慢慢變成大家選擇的方向
例如Amazon AWS的設計概念.幾乎都是用一堆VM去構築整個系統..
當服務需求增加.就多加一些VM來搞定即可


兩種選擇其實沒有好壞.端看系統本身特性.

舉個例子.
一筆固定的國防預算.可以建造三艘密蘇里級戰列艦 或是10艘派理級巡防艦 二擇一
要選哪好哩...

如果我要對付外星人.裝甲超厚..非得用15吋砲才幹的掉的外星船..那就是密蘇里艦囉..
核彈這種地圖兵器保留後面在講..而且電影也沒這樣演..:P
但是如果我只是要抓抓小海盜..偶爾開去人家門口踩點.那一次兩艘巡防艦就可以搞定


換作我們的環境.
如果系統內每個工作運算都很複雜..幾乎沒法拆開分成數個運算..
那也只能選擇快的CPU, 大RAM.
如果每個工作都可以拆成小運算..而且可以高度平行化..那就可以來個螞蟻大軍了


在更深入討論的話..
一般常看到的三層式架構..AP, Web, DB
其中AP, Web都是可以用許多小VM, 
橫向擴充scale out的方式來達到系統承載容易擴充的設計
當然如果AP搞得太複雜.非得吃那麼大CPU RAM 那也拿他沒辦法

但是DB的部分 因為要維持資料的一致性..
目前大都只能用大砲巨艦主義來搞定..就是big ram, big CPU.
不過近來開始流行的No SQL, MySQL Cluster 完全就是螞蟻雄兵 分散式架構..

其實個人想法.將來趨勢應該會持續往scale out發展.
看看cloud design的精神..其中就是許多VM兜成一整套系統
每個VM/component都被預期會掛掉..且隨時都可以被替換.
scale out也比較不容易遇到scale up所遇到的極限
每個主機CPU core, RAM總有上限..
但是如果多個VM.除非AP自己定義的最多node.一般來說都是無限橫向擴充..


回到之前我們提到的..要蓋密蘇里艦好..還是蓋巡防艦好..
其實現在敵人真正怕的都是核彈..
30顆巡弋飛彈+核彈 分散在三艘大船.或是十艘小船
如果我們把可能戰損考慮進去..似乎答案呼之欲出..
這大概也是現在很少在看到新的大砲巨艦建造的關係吧

如果我們AP or Web考慮到everything will crash的條件下..
大概也是走向同樣的設計吧...

No comments:

Post a Comment