http://mvc.tw
由 IaaS 到 PaaS 之路
小朱
Azure MVP
studyazure 雲端學堂
http://mvc.tw
你當初是怎麼想到要
上雲的?
http://mvc.tw
想像一下,你是
一間賣票的公司
的系統工程師...
http://mvc.tw
最近聽說有個東西叫做雲端
的,看起來很炫,我想要把
公司的系統上到雲端,給你
三天,做的到嗎?
http://mvc.tw
http://mvc.tw
那個...Azure不是有個叫做虛
擬機器的玩意嗎?把公司的
系統弄一弄丟上去就好啦。
http://mvc.tw
於是...你就這麼做了。
http://mvc.tw
光陰似箭,歲月如梭...
三個月過去了。
http://mvc.tw
公司的系統上雲之後,
怎麼和放在自己家一樣,
流量破100個就掛了?
雲端不是很威的嗎?
最近公司有大案子進來,
流量預計會破1,000,000,
你給我想個辦法讓系統能
承載得了。
http://mvc.tw
雲端不只是 Hosting
http://mvc.tw
雲上有什麼?
• 虛擬機器
• App Service (Web, API, Logic and Mobile)
• Cloud Service
• Mobile Service
• ...
• 儲存體 (Storage + SQL + NoSQL)
• 網路服務 (DNS, VPN, ...)
• 應用程式服務 (Service Bus, Access Control)
• 資料分析 (Stream Analytics, HDInsight)
• 機器學習 (Machine Learning)
http://mvc.tw
只用 Infrastructure 的理由
• 快。
• 不用花時間改 code。
• 不用花精神思考架構。
• 老闆要求的。
• 沒人有這樣的能力。
• IT不用再學額外的東西。
• ...
http://mvc.tw
控制權迷思
http://mvc.tw
你願意花多少成本在
獲取控制權?
http://mvc.tw
控制權 =
看得到的東西的成本 +
看不到的東西的成本 +
人的成本。
http://mvc.tw
控制權的迷思:
大多數的情況下,不需要自己
花時間管理機器,但要花更多
時間讓應用程式能適應這樣的
環境。
http://mvc.tw
控制權移轉的優點
• 專注在本業 (軟體服務) 上。
• 不需要太多的 MIS/IT 人員。
• 能充份運用雲端的大量資源及雲端的各種服務。
• 由雲端自己處理運算能量的配置 (Scalability) 以及
容錯 (SLA)。
• 成本大幅降低。
• Infrastructure 需要較多 MIS/IT 人員
• Platform 不需要
http://mvc.tw
LOCAL VS. CLOUD
本地
• 享有完整的控制權。
• 愛怎麼做就怎麼做。
• 資料全存在本地。
• 成本相對較高。
• 需要額外人力。
雲端
• 有限的控制權。
• 依照標準操作。
• 資料放在人家那裡 (有安全
認證)。
• 成本相對低廉。
• 不需額外人力。
• Dev/Ops 技能需要。
http://mvc.tw
Infrastructure vs. Platform
INFRASTRUCTURE
• 享有大部份的控制權。
• 愛怎麼做就怎麼做。
• 成本相對較高
• 軟體授權
• 備援機器需要的空間。
• 額外的組態 (ex: SQL
AlwaysOn Service)
• 需要額外人力。
PLATFORM
• 少部份的控制權。
• 依照標準操作。
• 成本相對低廉
• 省下軟體授權
• 省下 HA 組態所需的成本
• 不需額外人力。
• 好工具就能解決一切。
http://mvc.tw
所以,將焦點放在應用程式
會比放在虛擬機器重要。
http://mvc.tw
PLANNING
Step 1/3
http://mvc.tw
你的應用程式的特性?
•
•
•
•
•
http://mvc.tw
你的資料儲存的特性?
•
•
•
•
•
http://mvc.tw
http://mvc.tw
如何規劃應用程式的移轉?
•
•
•
•
•
http://mvc.tw
移轉的可用資源
•
•
•
•
•
•
•
http://mvc.tw
手動 Scale vs. 自動 Scale (Auto-scale)
http://mvc.tw
儲存的移轉
•
•
•
•
•
•
•
•
http://mvc.tw
分散式應用程式所需的 HA 能力:
• 失效域 (Fault Domain)
• 更新域 (Update Domain)
http://mvc.tw
ARCHITECT
Step 2/3
http://mvc.tw
http://mvc.tw
改善集中的程度
• 將狀態管理移到 Azure Storage, Redis Cache 或是
SQL Database。
• 減少使用 Session 的程度。
• 減少特定服務或機器的使用。
• 減少機器間的耦合度。
• 加入中間層傳遞訊息。
http://mvc.tw
強化分散的程度
• 應用程式要能獨立運作。
• 以利切割。
• 應用程式各元件的職責不能太重 (例如 Web 應用程
式應切出前端和後端,配置到不同的運算單元內)。
• 有助於 Scalable 的配置。
• 元件之間以訊息服務 (messaging service) 來傳遞
訊息。
• 切斷機器間的耦合。
• 加入容錯的機制 (Error Transient)
• 網路的瞬斷是會發生的。
• 應用程式不能因為小問題就中斷。
• 不要認為雲端上的虛擬機器永遠不會當機 
http://mvc.tw
基本架構
鑒一性
Idempotent
http://mvc.tw
多租戶架構
單一執行個體元件
單一可組態執行個體元件
多執行個體元件
http://mvc.tw
可用性架構
看門狗
更新遞移
http://mvc.tw
DEPLOY AND OPERATE
Step 3/3
http://mvc.tw
應用程式的移轉
http://mvc.tw
資料的移轉
http://mvc.tw
應用程式更新
• 使用預備環境 (Staging Environment)
• 版本變化大時。
• 後端資料有大幅異動時。
• 需時短,但成本較高。
• 使用逐步更新
• 版本變化小時。
• 後端資料不會異動或少量異動時。
• 需要較長時間。
• 服務更新應極力降低服務中斷的可能性。
http://mvc.tw
開發與維運永遠的戰爭…
http://mvc.tw
DEV/OPS 流程模型
http://mvc.tw
最後…有一點很重要。
http://mvc.tw
使用雲端一定有風險,請在
使用前詳閱使用者須知。
http://mvc.tw
http://mvc.tw
http://skilltree.my
http://demoshop.tw http://www.hexdigits.com https://fb.me/studyazure
http://cacafly.com
主辦單位
合作伙伴
協辦單位
http://mvc.tw
• 本投影片所包含的商標與文字皆屬原著作者所有。
• 本投影片使用的圖片皆從網路搜尋。
• 本著作係採用姓名標示-非商業性-相同方式分享 3.0 台灣 (中華民國) 授權條款授權。
謝謝各位

Global Azure Bootcamp 2015 Taipei: Planning and Migrating your Application from IaaS VM to PaaS Service