2015年7月14日 星期二

初識 Container

自從 Docker 問世之後,開始炒熱 Container 這個話題,我也跟著開始研究起來。2003 年在 .COM 泡沫化之後,離開軟體服務業轉入嵌入式系統和手機產業,轉眼也已十二個年頭了, web service 的變化早已不是以前的 Free BSD/Linux + CGI 了,Python / Json / 等新東西越來越多,面對這麼多新奇的事物,我也只能拿起書本從頭開始研究起。

我自己的第一個問題是,到底甚麼是 container 呢?他好像是虛擬機器但他又不是虛擬機器,Docker 說他跟虛擬機器不一樣,幾乎沒有 overhead。為了一探究竟,我先看看 iThome 上的說明:

一般常見的虛擬機器和 Container 最明顯的差別是,虛擬機器需要安裝作業系統(安裝Guest OS)才能執行應用程式,而Container內不需要安裝作業系統就能執行應用程式。Container技術不是在OS外來建立虛擬環境,而是在OS內的核心系統層來打造虛擬執行環境,透過共用Host OS的作法,取代一個一個Guest OS的功用。Container也因此被稱為是OS層的虛擬化技術。

但看了之後還是有看沒有懂,虛擬機器 (Virtual Machine) 的概念還蠻好懂的, host OS 透過軟體完整模擬出一個硬體系統,包含指令集、BIOS、中斷處理、I/O等等,讓執行在 host OS 上的 guest OS 以為他真的執行在一個專屬的硬體上,某種程度來說,host OS 和 guest OS 沒有太大的關連,host OS只是出租一塊空間給 guest OS。container 的概念是和 host OS 共用,透過 kernel level 的共用技術打造出的虛擬化技術。但這樣的說明還是無法解決我的疑慮,看來我需要比較技術性的說明,而不只是抽象的描述...


(圖片來源http://jenkins-cookbook.cloudbees.com/docs/jenkins-cookbook)


虛擬機器是提供一個獨立運作的硬體環境,代表的意義是要做甚麼事都是你 guest OS 的事情,擁有非常大的空間,甚至你可以在 Host OS 上藉由 VM安裝多的不同的 guest OS (例如:同時安裝 Windows 和 Ubuntu),上圖中的 hypervisor 就是建立虛擬硬體的系統。

Container 既然是從核心層所打造的虛擬環境,自然在 kernel level 會有相對應的支援功能,主要是由 Linux kernel namespace 和 Control group 兩種主要技術所建立的系統,目的是藉由 kernel 的支援,為 process 建立虛擬的獨立空間,既然他的目標是 process,可想而知所針對的是應用程式,而非像 VM 一樣是完整獨立的虛擬硬體。因此,本篇先針對 container 在 kernel 層的支援做探討,以了解他的運作原理和差異。

Linux kernel namespace

Namespace的目的是要為 LWP (Light Weight Process, 輕量級行程) 建立虛擬空間,意思就是要將每個 LWP 隔離出一個獨立的空間,這樣不同 container 之間的 process 就不會互相干擾。

目前支援以下的 namespaces
  • mnt (mount points, filesystems)
  • pid (processes)
  • net (network stack)
  • ipc (System V IPC)
  • uts (hostname)
  • user (UIDs)
  • security namespace
  • security keys namespace
  • device namespace
  • time namespace.

Control groups

Control groups (cgroups) subsystem  是一種資源管理系統,用以對一組 process 做資源的控制,這裡所提到資源可包含 CPU / memory / disk IO / network 等等。透過資源管理,可以設定每個 container 的應用程式能分配到多少資源,讓每個運作在 container 裡的服務都能夠依據其等級得到適當的資源。Cgroups 主要功能有以下幾點:


  • 資源限制 (resource limitation) - 例如:你可以控制 /usr/bin/prog_a 的 記憶體使用不得超過 500 MB。
  • 優先權控制 (prioritization) - 例如:你可以控制 /usr/bin/prog_a 的 CPU resource 為 20%。
  • 帳戶管理 (accounting) - 每個 container 可以視為一個帳戶,透過帳戶管理你可以了解每個 container 的資源使用狀況,甚至可以當作收費的依據。
  • 執行控制 (control) - 你可以為 process 設定檢查點 (checkpoint),然後可以暫停或重新執行他。



結論:

透過 namespace 和 control groups 的支援,host OS 可以打造出一個獨立運作的空間讓應用程式執行,並對此獨立空間的程式提供資源的管理,如此可讓不同的獨立空間的程式皆能夠被分配到資源。使用虛擬機器的每個獨立空間皆須重新安裝一個完整的作業系統,硬碟空間 (安裝作業系統需要大量的硬碟空間) 和系統資源上 (特別是 CPU and memory) 的額外需求是非常大的,因此對比虛擬機器,container 能夠大大的節省上述的 overhead 的支出,在同樣的硬體環境下能夠提供比虛擬機器更多的服務。 然而,這並不是 container 的唯一好處而已,之後會針對 container 在執行佈署上的優點再研究討論。





2015年7月10日 星期五

我看紅色供應鏈


根據WIKI上的描述:

供應鏈是由一連串供應商和採購商組成的團隊,以接力賽團隊的模式,完成從採購原材料,到製成中間產品及至最終產品,然後將最終產品交付用戶為功能的,由一系列設施和分布選擇形成的網絡。

用白話來說,供應鏈是指一個產品的製造過程中所需的各種原料、半成品、零件等等的供應商和採購商所組成一條鏈結。舉個例子來說,一個筆記型電腦製造商生產筆記型電腦的過程中,小至螺絲、螺帽,大至如機殼、電池到包材;便宜如電容、電阻等,貴者如CPU、記憶體、硬碟等,整個BOM表上的大大小小元件可能成千上萬個,其中所需要的供應上可能會數十個到上百個。也因此,供應鏈管理對廠商來說一直是非常重要的課題,除了品質管理上的考量外,對成本的降低來說是非常重要的一個關鍵課題。

一般來說,一個國家或區域的產品發達,通常會看到該產品在當地所產生的產品生態系統,也就是供應鏈。原因非常簡單,就地取材設計、試產、製造生產,才能降低研發溝通成本和生產製造成本。過去台灣在 PC 和 NB 這兩種產品的供應鏈系統,放眼全球無人能敵,也因此造就了台灣在這兩種產品上的全球地位,培養了非常多的零組件供應商。

從九零年代開始,為更進一步降低成本而到中國大陸另闢生產基地,也跟著把生產製造所需的產品供應鏈也轉移到大陸,一直到近年來,中國大陸的供應商也隨著技術的精進而逐漸了取代了台灣的供應商,也就是近年來所說的紅色供應鏈。到目前為止,台灣在 PC 和筆記型電腦上還是握有主導的地位,即便 Lenovo 已經成為一方霸主,但還是仰賴台灣的代工廠(但Lenovo也正在逐步提高自製率)。

手機方面,雖然在2000年初為 MOTOROLA 的代工(華寶通訊,目前已併入仁寶電腦)有著輝煌成績,但爾後MOTOROLA的沒落也導致功能手機代工產業的衰敗。隨後智慧型手機時代,台灣的宏達電的從代工到 HTC 自有品牌雖然異軍突起風光了幾年,但在 Android 市場上又被三星所擊敗,以及近年來更被大陸廠商打的節節敗退。這其中我們可以看到幾個現象:

1. 大陸手機零組件供應商的崛起,從上游到下游的垂直供應整合,廣東深圳、到四川重慶成都,由西海岸到東內陸都有蓬勃發展的零組件供應商。

2. 關鍵零組件廠商對大陸市場的重視,紛紛轉戰大陸對大陸廠商提供更好的價格和支援。或者直接和大陸廠商合作,如 Intel 15 億美元入股紫光展訊,高通(Qualcomm)、中芯、華為及IMEC針對14奈米製程技術合資成立新技術研發公司。

3. 大陸自有品牌崛起,除了本土大陸市場外,也紛紛佔領海外市場的前十名榜單,華為、中興、小米已是世界級大廠,另外還有 LenovoOPPO、One Plus 等中小廠商的崛起。

上述這幾點都在在告訴大家,大陸廠商在智慧型手機產品上的供應鏈系統早已站穩全球市場,不論是從代工製造生產到自有品牌,台灣已全無機會,殊不知台灣廠商手機製造的BOM cost就已經是大陸廠商的零售價格了,怎麼打得過呢!然而,真的只有這麼簡單嗎?最近我買了一款大陸手機,雖然它的外觀和軟體設計還是一樣山寨Apple,但她的品質和細膩度早已不是三五年前的大陸山寨機的概念了。令我訝異的是,他在軟體上的設計和調教,早已令台灣廠商難以望其項背,紅色供應鏈所代表的已是軟件和硬件上的高度整合了。

傳統在看供應鏈的時候,看的是零組件供應商。然而讓我更擔憂是,紅色供應鏈在軟件和硬件上的高度整合的實力。傳統 PC 和 NB 上的軟體供應商是除了微軟外沒有第二家,然而 Android 系統是由 Google 提供手機作業系統的基礎,最終產品系統的整合和調教是靠手機廠商高度的軟硬體整合。台灣過去就是因為過度依賴微軟而忽略了產業供應鏈上的軟體供應商,導致在智慧型手機產業的供應鏈戰略上,始終缺乏完整的方案而終至失去了市場。

因此,我們在看待一個產業的供應鏈時,必須拋開以硬體的思維,必須以軟硬體整合的角度來思考。展望未來,雖然台灣在智慧型手機產業摔了一跤,我們應該記取教訓,放眼另外一個山頭,物聯網 IoT 的時代雖然尚未來臨但已經開始萌芽。台灣廠商在戰略思惟上切勿再以硬件的思維,如何建立軟硬體系統整合的供應鏈,才是未來成功的關鍵!