淺談雲端服務與市面上的各式雲端運算平台服務

前言

其實這個概念已經是老掉牙了,這個技術大概是在2008年開始有相關研究一直到現在,還是有很多人不知道這個最基礎的概念與雲端運算架構。

為什麼要知道這個概念?不知道不是也可以使用部署相關的服務也可以用的好好的嘛?

這個原因,其實主要如下:

  • 若是知道概念的話,才會知道在雲端運算平台上,每一種價格會是不一樣,需要依照目前自己需要的服務做選擇,而不是每次都在開VM,虛擬機器解決一切的問題,那個花費是很高昂的。
  • 另外一個原因,是因為,我目前服務公司所使用的Azure平台很花錢。
    • 從大家行為模式來看,其實可以發現,大家不會善用Azure平台上的服務
    • 而最終大家都去選擇最花錢的服務:開啟運算VM (IaaS)。

本文章,是要淺談何謂「雲端運算」,雲端運算中分成哪幾層,以及對應到目前市面上的雲端服務有哪幾層。

什麼是雲端運算?

簡單來說就是,把服務,運算等功能都部署到網路上,而網路上主機通常都是有好幾個機房所組織而成的,那整個各地機房組起來就稱為「雲」,那上去的服務你不知道放在哪個地方,只知道你的服務座落在某一個城市或是地點而已,確切的地方不知道。

服務與運算上雲端,有幾個好處:

  • 不需要自行管理伺服器server等相關工作,把那些時間節省並專心在開發服務上
  • 雲端平台上把所有服務與資源都切開,也就是把服務最小化,因此我們要部署一個服務,或是網頁應用程式,並不需要像以前一樣租一台server並從頭到尾建設自己要的環境。
  • 切成一個個服務就對應到一個容器(Container),這樣一來在管理與部署上會顯的更方便
  • 在價錢方面來說,開啟一個運算資源的虛擬機器,毋庸置疑在雲端運算平台上是一個奢侈的行為,而這樣的行為是最貴的,以一個容器化的概念去對應到一個實例(instance),這樣價錢是最便宜且實用

我認為的缺點如下:

  • 每個雲端運算平台服務所提供的功能不盡相同,需要多花額外的時間學習與設定,導致學習曲線較長。
  • 要達到善用雲端運算平台服務,需要有一些前置條件
    • 了解何謂容器化(Docker container)與虛擬機器(VM)的差別
    • 了解部署的整個流程
    • 了解與熟悉Linux作業系統上的指令操作

一般主機租用與雲端運算平台差異

在雲端運算平台這個概念還沒有出來以前,可能聽過,像是VPS,shared hosting以及dedicated hosting等服務。那這個跟雲端運算平台有什麼差別?其實差別蠻大的。

首先,先以傳統主機的介紹如下:

  • shared hosting,共享主機,他的架構很簡單,就是在一台機器上面,切出一個空間,讓你放置需要執行的程式,那這個空間對於整體主機來說所有的資源都是共享的,所以當資源很大的鄰居的時候,就會有很明顯的影響,比如說網頁速度載入會變慢等。慢慢的這種主機效率不佳之後,就逐漸式微了。
  • VPS,Virtual Private Server,全名叫做「虛擬私人主機」,這個指的是,會利用虛擬化的技術將一台實體主機區分成好幾個虛擬機器,這些虛擬機器並不會互相共用自己的資源,所以會比一般的共享主機要來的好。那主要的虛擬化技術有
    • KVM,這個會模擬Kernel出來,所以內部虛擬機器可以自行升級Kernel,也可以在此虛擬機器底下建置多個所需要的Docker container
    • OpenVZ,這個會與實體主機上的Kernel共用,所以無法自行更改Kernel,而也無法模擬出Docker container在此虛擬化出來的機器上
  • Dedicated hosting,實體主機,這其實就是一台或多台主機,完全可以按照自己的需求來建置與部署多個虛擬機器,自由度最高。

所以我們可以從上面得到一個表格:

比較的項目共享主機
Shared Hosting
虛擬私人主機
Virtual Private Server
實體主機
Dedicated Server
自由度?較高最高
資源共享?高,且資源會隨著鄰居而有影響較低,資源都是在一個既定空間上,自己使用無此問題
費用?較低較高
虛擬化技術?無,完全是一個放置網頁專案空間中,可以自行使用配置的資源與空間
效能?較低較高

雲端運算平台

在講雲端運算平台前,需要先知道雲端運算架構圖

首先,我們先從上述的架構圖中的最底層開始。

  • IaaS,指的是「基礎設施即服務」,由Wiki介紹可以知道:
    • 是提供消費者處理、儲存、網路以及各種基礎運算資源,以部署與執行作業系統或應用程式等各種軟體。
    • 可以控制作業系統、儲存裝置、已部署的應用程式,有時也可以有限度地控制特定的網路元件。
    • 與 PaaS 的區別是,用戶需要自己控制底層,實現基礎設施的使用邏輯。
    • 有提供IaaS的服務有:
      1. Amazon EC2
      2. Linode
      3. DigitalOcean
      4. OpenStack
      5. Azure Computing machine
      6. IBM Cloud resource computing machine
  • PaaS,指的是「平台即時服務」,由Wiki可以知道有幾個特點:
    • 提供使用者將雲端基礎設施部署與建立至用戶端
    • 藉此獲得使用程式語言、程式庫與服務
    • 使用者不需要管理與控制雲端基礎設施(包含網路、伺服器、作業系統或儲存)
    • 但是需要控制上層的應用程式部署與應用代管的環境
    • 將軟體研發的平台做為一種服務,以軟體即服務(SaaS)模式交付給用戶
    • PaaS的出現可以加快SaaS的發展,尤其是加快SaaS應用的開發速度
    • PaaS 提供軟體部署平台(runtime),抽象掉了硬體和作業系統細節,可以無縫地擴充(scaling)。
    • 開發者只需要關注自己的業務邏輯與開發,不需要關注底層。
    • 下面這些都屬於 PaaS。
      1. Heroku
      2. RedHat OpenShift
      3. Google App engine
      4. Amazon Elastic Beanstalk
      5. Azure Web App
  • SaaS,「軟體即時服務」,其特性如下:
    1. 在交付模式中雲端集中式代管軟體及其相關的資料,軟體僅需透過網際網路,而不須透過安裝即可使用。
    2. 用戶通常使用精簡用戶端經由一個網頁瀏覽器來存取軟體即服務。
    3. 建立與部署在PaaS上的服務。

雲端運算平台與傳統主機供應商比較

比較項目傳統主機供應商雲端運算平台服務
種類?有共享主機(Shared hosting)
有VPS(Virtual private server)
實體主機(dedicated server)
IaaS
PaaS
SaaS
價格?共享主機最便宜
VPS適中
實體主機較貴
IaaS較貴
PaaS適中
SaaS看提供服務廠商,通常比上述兩者便宜
開發者專注?除了共享主機,其他都需要再花額外的力氣做建置系統建置IaaS需要花額外力氣
利用PaaS部署可以花較多時間在SaaS做開發
服務效率?VPS與實體主機較好IaaS運算較高,但是需要自行調整
PaaS運算度隨著方案選擇做變動
SaaS取決於PaaS方案而變動表現

結論

有此可見,下列要點有:

  • 雲端運算會比一般傳統主機供應商要來的有優勢
    • 主要是把服務與運算資源機器切離,讓開發者可以專心在服務的開發與部署
    • 相關機器的設定與係數的優化就交給雲端運算平台的服務廠商或是專職的DevOps建置的IaaS就好
    • 盡量讓開發者少碰基礎設施運算中的設定越好,以便增加開發上的效率

參考資料

  • https://zh.wikipedia.org/wiki/%E5%9F%BA%E7%A4%8E%E8%A8%AD%E6%96%BD%E5%8D%B3%E6%9C%8D%E5%8B%99
  • https://zh.wikipedia.org/wiki/%E5%B9%B3%E5%8F%B0%E5%8D%B3%E6%9C%8D%E5%8A%A1
  • https://zh.wikipedia.org/wiki/%E8%BD%AF%E4%BB%B6%E5%8D%B3%E6%9C%8D%E5%8A%A1