• 沒有找到結果。

系統架構與環境設置

在文檔中 微服務架構探討與建置 (頁 11-19)

本研究成果;第五章為結論與未來工作。

第二章 相關技術發展

本節將簡易的說明與微服務相關技術的發展。在過去單體式架 構 (Monolithic Architecture) 廣為許多系統及應用所採用,其優點是 直覺、為人所知、受多種開發工具支援,深受工程師所喜愛及推薦。

然而隨著開發及維運時間的拉長,其缺點逐一浮現,像是因系統複 雜龐大造成建構與部署的時間較長;任何一個小變動,就得須重新 部署整個應用系統等缺點。而微服務 (Microservices) 則有別於單體 式架構,採用微小服務設計使系統簡單化、容易進行開發、修改及 部署。微服務 (Microservices) 一詞首次出現於 2011 年的威尼斯的一 場軟體架構工作坊 [2]。隔年 2012 年,Microservices 一詞正式被確認 最合適的詞彙;同年 James Lewis 發表第一個微服務架構的實現 [3]。

2014 年由 Lewis 及 Fowler 共同提出了微服務的概念 [2],包含下列 幾項特性:

• 微服務是由以單一應用程式構成的小服務;

• 自己擁有自己的行程與輕量化處理;

• 服務依業務功能設計;

• 以全自動的方式部署;

• 與其他服務使用 HTTP API 通訊;

• 服務可以用不同的程式語言與資料庫等元件實作。

7

簡言之,微服務的概念在於將複雜的系統以多個單一且功能專一的 小服務取代,各功能區塊則是以 API 相互進行通訊。儘管此概念 可直接應用於一般伺服器上,但效果卻差異不大。隨著虛擬化、容 器化、Kubernetes 的興起,得使微服務的概念與應用彰顯其成效。

目前像是亞馬遜 (amazon)、Twitter、可口可樂 (Coca Cola)、Netflix、

Uber 等企業都採用微服務架構 [1]。

2.1

虛擬化

虛擬化的概念為 1960 年代由 IBM 所提出,此概念是一種將電 腦各種實體資源進行抽象化並分割、組合成一個或多個環境供不同 用途使用,此項技術解決當時一台大型主機無法提供多人同時使用 的問題。隨著 1980 年代起,多工的作業系統以及個人電腦的普及,

使得虛擬化的優勢不在,導致發展停滯一段時間。近年來隨著硬體 發展迅速導致硬體效能過剩,以及雲端的需求,使得虛擬化的相關 技術再度被提倡與推廣。

透過虛擬化的技術可將 CPU、記憶體、網路卡等資源模擬成多 個獨立且安全的虛擬電腦,例如在一台具有 16 核心 CPU、64GB 記 憶體、1TB 硬碟空間的主機上,透過虛擬作業平台 (Hypervisor) 可虛 擬成多個 2 核心、2GB 記憶體、100GB 硬碟空間的虛擬機電腦提供 各種不同系統使用。

2.2

容器

容器是一種作業系統層虛擬化技術,此項技術是將應用程式打 包成一個軟體容器,其包含軟體本身的執行程式及所需的作業系 統核心和函式庫。由於此項技術不需要虛擬作業平台,因此具有 輕量化、迅速啟動的特性。Docker、qemu/kvm、chroot、OpenVZ、

libvirt-lxc、libvirt-sandbox 等皆為容器技術的實作。

2.2.1 Docker

Docker 是直接運行在作業系統之上的容器技術,透過沙箱機制 虛擬出一完整系統。Docker 所虛擬出的容器彼此之間不會有任何接 口,可完全隔離容器與作業系統及容器與容器之間的隔離。Docker 包含了三個主要部份:

• Docker 映像檔

Docker 映像檔是一個唯讀的環境模板,此模板包含服務的程式 (包括應用程式、設定檔) 以及作業系統所需的相關函式庫。

• Docker 容器

依照 Docker 映像檔所建立的實例 (instance) 稱為 Docker 容器,

一個映像檔可以建立多個容器,每個容器都是隔離不相互影像 的。

• Docker 倉庫

9

Docker 倉庫為存放 Docker 映像檔的倉庫。目前 Docker Hub 為現 今最大公開 (Public) 的 Docker 倉庫,供使用者下載各式 Docker 映像檔使用;使用者亦可透過私有的倉庫進行 Docker 映像檔管 理與使用。

2.2.2 Kubernetes

Kubernetes(簡稱 K8s) 是一套容器的自動部署、擴展和管理的開 源系統,由 Google 設計並捐贈給 Cloud Native Computing Foundation。

基本的 Kubernetes 對象包含:

• Pod

Pod 為 K8s 執行的最小單元,每個 Pod 之間允許執行多個容器。

此外 Pods 是有生命週期的。他們可以被創建,而且銷毀不會再 啟動。

• Deployment

透過 Deployment 可以動態創建和銷毀 Pod。

• Service

透過 Service 可允許外部使用者訪問 Pod。

• Volume

為 Pod 提供儲存空間使用。

• Namespace 透過 Namespace 可以隔離不同專案、環境或客戶。

2.2.3 DevOps

DevOps 是一種文化、實務及工具結合於一身的概念,相對於 傳統,此種做法可提升整體開發速度、交付速度及服務水準的做 法。在 DevOps 的框架下,開發與安全團隊及營運團隊會透過各種 自動化工具緊密的整合在一起,使團隊具有高度競爭力。圖 2.1呈現 DevOps 與傳統方法的比較,由圖可了解儘管初期導入 DevOps 成本 較高,但具有較短的開發週期,並透過大量的自動化工具可進行源 碼的檢測、系統測試、系統部署、資安弱掃及系統監控等工作,使 得開發、維運上都獲得不錯的收益。

傳統 導入DevOps

開發週期 以周或月為開發週期 以分鐘或小時為開發週期

第三章 系統架構與環境設置

在本研究中,微服務架構係基於 Kuberentes 服務之上,並於將 App 打包成容器進行服務。此外為有效管理 Kuberentes,Kuberntes 係透過虛擬機形式建置於實體主機之上,如圖 3.1系統架構所示。此 系統架構由三台主機所構成,每台主機上透過虛擬機執行多個 K8s,

再由 K8s 組成一個叢集 (K8s Cluster),最後由此叢集進行微服務架構 的執行與管理。本研究於台北、台中及 Google 雲端等三地,建構三 套上述系統,其詳細建置方式如下列章節說明。

圖 3.1 系統架構圖

3.1

環境需求

每個節點 (Note) 最低環境需求建議採用下列規格:

• 2 核心 CPU

• 16GB 記憶體

• 160GB 硬碟空間

3.2

軟體環境

3.2.1

系統安裝

本研究採用 CentOS 作為基礎環境作業系統,參考安裝方式請 參閱附件-CentOS 安裝作業。

3.2.2

平台建置

建構 Kubernetes multi master–multi work node 容器平台,本研究 建置 3 個 master 節點及 9 個 worker node 節點,master 節點含 K8S 主 要核心之微服務容器,配置如圖 3.2所示。詳細安裝方式請參閱附 件-Kubernetes 安裝作業。

圖 3.2 Kubernetes 安裝架構

13

在文檔中 微服務架構探討與建置 (頁 11-19)

相關文件