國
立
交
通
大
學
資訊科學與工程研究所
碩
碩
碩
碩
士
士
士
士
論
論
論
論
文
文
文
文
設計與實作一個網路模擬雲端系統
Design and Implementation of a Network Simulation Cloud
研 究 生:蔡佳玟
指導教授:王協源 教授
設計與實作一個網路模擬雲端系統
Design and Implementation of a Network Simulation Cloud
研 究 生:蔡佳玟
Student:Chia-Wen Tsai
指導教授:王協源 Advisor:Shie-Yuan Wang
國立交通大學
資訊科學與工程研究所
碩士論文
A ThesisSubmitted to Institute of Computer Science and Engineering College of Computer Science
National Chiao Tung University in partial Fulfillment of the Requirements
for the Degree of Master
in
Computer Science December 2012
Hsinchu, Taiwan, Republic of China
I
設計與實作一個網路模擬雲端系統
學生:蔡佳玟 指導教授:王協源 教授
國立交通大學 資訊科學與工程研究所 碩士班
摘 要
透過使用網路模擬器,網路協定研究人員可不受時間、空間及設備限制來研 究複雜的網路。研究人員通常需花費許多時間進行網路模擬實驗,才得以取得較 可信的結果。隨著雲端運算的發展,雲端使用者可輕易地取得較多的運算能力。 我們相信使用雲端的運算資源可減少網路模擬所需的時間。 在本論文中,我們以 EstiNet 網路模擬器及 Openstack 雲端平台為基礎,設 計與實作一網路模擬雲端系統。藉由使用此網路模擬雲端系統,研究者可節省許 多花費於模擬實驗的時間。我們也測量此系統執行網路模擬的效能,結果顯示此 雲端系統可減少多模擬工作的總時間。 關鍵字:網路模擬、雲端計算II
Design and Implementation of a Network Simulation Cloud
Student: Chia-Wen Tsai Advisor: Shie-Yuan Wang
Institute of Computer Science and Engineering
National Chiao Tung University
ABSTRACT
With a network simulator, a network protocol researcher can study a complex network without limitations of time, space and device. A researcher usually spends much time to obtain simulation results from many network simulations. With cloud computing, a cloud user can easily obtain more computing power. We believe that using computing power in cloud will reduce time spent on network simulations.
In this thesis, we design and implement a network simulation cloud on the EstiNet network simulator and Openstack cloud platform. By using this network simulation cloud, a researcher saves much time spent on simulations. We also evaluate performance of this network simulation cloud. The result shows that this network simulation cloud reduces the total time spent on simulations.
III
誌
誌
誌
誌 謝
謝
謝
謝
首先,我要感謝指導老師王協源老師在學術上、論文撰寫及口頭報告上許多 的指導,讓我在系統的設計與實作上有許多學習,並能順利完成碩士論文與口試。 感謝吳曉光老師、李端興老師以及周承復老師擔任我的口試委員,給予我許多寶 貴的建議。 平時與 NSL 的學長姐、同學以及學弟妹的聊天哈拉以及認真討論,讓我擁 有相當充實歡樂又溫馨的研究生生活,謝謝你們的支持與鼓勵。其中要特別感謝 都都跟韻立在計畫上的付出及配合,還有體諒我這不太會當頭的頭。也要感謝 Bobo 學長在我遇到問題時給予相當多的協助。 感謝可愛的室友,小乖、野口跟阿璞忍受我這個高興時就退化成小朋友、煩 躁時就一直碎碎念的幼稚室友。很高興可以跟野口、小乖當五年半的室友,謝謝 兩位聽我說一拖拉庫的話,讓我低落、煩亂的心情得以平復。 謝謝國高中的朋友們透過網路給予我的支持。我想對某個笨蛋說:「嘿,我 拿到碩士了,我們會連妳的份一起好好活下去,去看妳無緣見到的世界。」 再來,我要感謝我的家人。謝謝爸媽的養育跟照顧,讓我可以讀自己喜歡的 科系,能夠無後顧之憂的取得學位。謝謝老弟在我寫碩論期間忍受我極端幼稚的 行徑。此外,我想將這篇論文,獻給在天上的奶奶。 最後,我想感謝歆昀老師,謝謝她這一年半的陪伴。 研究所這段時間,無論在學術跟知識上還是在生活上,對我是相當特別而且 有許多成長的一段時間,謝謝也祝福所有出現在我生命中的人們! 蔡佳玟 2013.1IV
目
目
目
目 錄
錄
錄
錄
摘要………..…………..…………..…………..……….I Abstract………..…………..…………..…………..………..…II 誌謝………..III 目錄………..…………..…………..…………..………..IV 圖目錄………..…………..…………..………..………...……….VII 表目錄………..…………..…………..………..………..IX 第 1 章 緒論... 1 1.1 研究動機... 1 1.2 章節概述... 2 第 2 章 背景... 3 2.1 EstiNet 網路模擬器介紹... 3 2.2 Openstack 介紹 ... 6 2.2.1 Openstack 軟體元件介紹 ... 7 2.2.2 Openstack 網路架構 ... 8 第 3 章 系統架構... 10 3.1 系統軟體元件架構... 10 3.2 實體機器與網路架構... 16 3.3 系統軟體元件與實體機器之關係... 21 第 4 章 設計與實作... 23V 4.1 設計目標與系統設計... 23 4.2 併行模擬... 24 4.2.1 連線及登入... 25 4.2.2 傳送模擬工作... 29 4.2.3 分配模擬工作... 32 4.2.4 產生及分配模擬子工作... 38 4.2.5 執行模擬... 44 4.2.6 完成模擬及釋放資源... 45 4.2.7 取得模擬資訊及結果... 46 4.2.8 對模擬工作進行操作... 47 4.3 使用者自訂模擬引擎及應用程式... 48 4.4 儲存空間管理... 50 4.4.1 檔案權限控管... 51 4.4.2 空間配額... 53 4.5 模擬引擎異常處理... 54 4.5.1 模擬引擎異常結束之問題... 54 4.5.2 處理方式... 55 4.6 認證機制... 58 4.6.1 原有認證機制介紹... 58 4.6.2 雲端系統認證機制... 59 第 5 章 模擬效能測量... 66
VI 5.1 效能指標與測試環境... 66 5.2 效能測量結果... 68 5.2.1 測量案例一:寫入 NFS 與本機硬碟之差異 ... 68 5.2.2 測量案例二:變化虛擬機器數量... 69 5.2.3 測量案例三:開啟與關閉 ptr 的效能差異 ... 79 5.3 效能結果分析與驗證... 83 第 6 章 未來工作... 86 第 7 章 結論... 87 參考文獻... 88
VII
圖
圖
圖
圖 目
目
目
目 錄
錄
錄
錄
圖 2-1、EstiNet 網路模擬器分散式架構 ... 4 圖 3-1、網路模擬雲端系統軟體元件架構 ... 11 圖 3-2、實體機器架構圖 ... 16 圖 3-3、雲端系統內部網路架構 ... 18 圖 3-4、Node 與虛擬機器的網路橋接 ... 19 圖 3-5、虛擬機器對外傳輸的封包流向 ... 20 圖 3-6、軟體元件與實體機器之關係 ... 21圖 4-1、GUI 與 Manager 透過 Forwarder 建立連線 ... 26
圖 4-2、GUI 與 File Manager 透過 Forwarder 建立連線 ... 28
圖 4-3、分配模擬工作流程 ... 33 圖 4-4、File Manager 父程序及子程序 ... 49 圖 4-5、模擬引擎異常結束處理 ... 57 圖 4-6、認證伺服器產生雲端憑證 ... 60 圖 4-7、雲端系統驗證雲端憑證 ... 61 圖 4-8、由雲端憑證取得模擬能力 ... 62 圖 4-9、雲端憑證於各軟體元件的傳遞 ... 65 圖 5-1、效能測量案例二之一:完成所有模擬子工作的時間 ... 69 圖 5-2、效能測量案例二之一:子工作平均執行時間 ... 70
VIII 圖 5-3、效能測量案例二之二:完成所有模擬子工作的時間 ... 72 圖 5-4、效能測量案例二之二:子工作平均執行時間 ... 73 圖 5-5、效能測量案例二之三:完成所有模擬子工作的時間 ... 76 圖 5-6、效能測量案例二之三:子工作平均執行時間 ... 77 圖 5-7、效能測量案例三之一:完成所有模擬子工作的時間 ... 79 圖 5-8、效能測量案例三之一:子工作平均執行時間 ... 80 圖 5-9、效能測量案例三之二:完成所有模擬子工作的時間 ... 81 圖 5-10、效能測量案例三之一:子工作平均執行時間 ... 82
IX
表
表
表
表 目
目
目
目 錄
錄
錄
錄
表 4-1、節點及 Port 之設定意義... 31 表 5-1、測試環境 ... 67 表 5-2、ptr 寫入 NFS 與 Node 本機硬碟之執行時間結果一(修改前) ... 68 表 5-3、效能測量案例二之一:子工作模擬時間增加百分比 ... 71 表 5-4、效能測量案例二之一:子工作執行時間標準差 ... 71 表 5-5、效能測量案例二之二:子工作模擬時間增加百分比 ... 74 表 5-6、效能測量案例二之二:子工作執行時間標準差 ... 75 表 5-7、效能測量案例二之三:子工作模擬時間增加百分比 ... 78 表 5-8、模擬引擎開啟、關閉 ptr 的使用者時間及系統時間結果一(修改前) 83 表 5-9、模擬引擎開啟、關閉 ptr 的使用者時間及系統時間結果二(修改後) 85 表 5-10、ptr 寫入 NFS 與 Node 本機硬碟之執行時間結果二(修改後) ... 85 表 5-11、ptr 寫入 NFS 與 Node 本機硬碟執行時間修改前後比較 ... 851
第
第
第
第1章
章
章 緒論
章
緒論
緒論
緒論
1.1 研究動機
研究動機
研究動機
研究動機
隨著科技進步,各界不斷研發新的網路協定及技術。在網路協定的研究中, 研究者需透過實驗測試其設計的協定是否能正常運作、取得數據以了解傳輸效能。 研究者可以真實硬體設備或網路模擬進行相關網路實驗。相較於以硬體設備進行 的網路實驗,網路模擬實驗可讓研究者以相對較少的資源得到較大的彈性,如規 模較大的網路拓撲或尚未有硬體設備的網路協定。 網路模擬實驗需要大量運算資源。對於一個實驗,研究者需要執行多次模擬 才能取得較為可信的結果。另外,對於一個網路拓撲,研究者可能需要修改拓撲 中不同的網路參數,以觀察網路協定的運作。因此,要取得一個網路實驗的完整 數據,以單一機器與人力需耗費大量的時間。 在本論文中,我們希望以雲端系統眾多機器的運算能力及自動化處理降低研 究者執行模擬實驗所需要時間。我們以 EstiNet 網路模擬器為基礎,結合 Openstack 平台,設計、實作並建置一網路模擬雲端系統的雛形,提供使用者網路模擬的應 用服務。完成設計、實作與建置後,我們在此雲端系統上執行網路模擬實驗,觀 察並分析此雲端系統的效能。2
1.2 章節概述
章節概述
章節概述
章節概述
本篇論文的章節組成如下,第二章將介紹 EstiNet 網路模擬器及 Openstack, 讓讀者了解我們開發此雲端系統的平台及基礎。第三章說明我們的系統架構,分 別介紹軟體及硬體架構。第四章說明我們的設計目標、設計方式以及實作細節。 第五章先介紹效能測量指標以及環境,接著說明我們在此平台上進行的效能測量 及分析。第六章是在設計及實作此系統中,我們發現未來可加強的地方。第七章 則為此篇論文的結論。3
第
第
第
第2章
章
章 背景
章
背景
背景
背景
2.1 EstiNet 網路模擬器介紹
網路模擬器介紹
網路模擬器介紹
網路模擬器介紹
在本論文中,我們以思銳科技公司所開發的 EstiNet 網路模擬器作為雲端系 統中運行網路模擬工作的模擬器。本節將介紹 EstiNet 網路模擬器與雲端系統有 關的特性、元件及架構。 EstiNet 網路模擬器前身為 NCTUns,是一擁有高真實性及擴充性的網路模 擬器,可模擬多種有線、無線網路設備及網路協定。使用者可於 EstiNet 網路模 擬器中運行真實世界的應用程式,使用者不需要特別為 EstiNet 網路模擬器的環 境開發特殊的應用程式製造網路流量、進行傳輸。 EstiNet 網路模擬器使用分散式架構,讓多名使用者可同時使用多台電腦進 行網路模擬。EstiNet 模擬器的分散式架構如圖 2-1 所示,此架構中有 GUI (Graphical User Interface)、Dispatcher、Coordinator 及模擬引擎(SimulationEngine ) 四 個 軟 體 元 件 , 其 中 Coordinator 及 模 擬 引 擎 共 同 組 成 模 擬 機 器
4 圖 2-1、EstiNet 網路模擬器分散式架構 以下介紹 EstiNet 網路模擬器較重要的元件。 Dispatcher 在 EstiNet 的分散式架構中,Dispatcher 為主要的管控中心,負責分配模擬工 作及管理模擬機器。Dispatcher 收到 GUI 送出的模擬工作,從現有模擬機器中挑 選空閒的機器執行此模擬工作。Dispatcher 可同時處理多個 GUI 及多個模擬機 器。 Coordinator Coordinator 負責協調與傳遞 GUI、Dispatcher 及模擬引擎之間的訊息。 Coordinator 負責將模擬引擎的資訊傳給 Dispatcher 及 GUI,可視為模擬機器對外
傳輸資訊的溝通橋樑。
Coordinator 啟動時向 Dispatcher 註冊,表示有一模擬機器可提供模擬服務。 Dispatcher 選定一模擬機器進行模擬時,由 Coordinator 接收此資訊並啟動模擬引
5 引擎的資訊傳給 GUI 讓使用者知道,如模擬進度。模擬完成時 Coordinator 會告 知 Dispatcher 模擬工作已結束、此模擬機器回復到空閒狀態,可再次提供服務。 模擬引擎 模擬引擎 模擬引擎 模擬引擎(((Simulation Engine)( ))) 模擬引擎負責執行模擬工作。模擬引擎使用許多協定模組及修改過的 Linux 核心(kernel),模擬使用者指定的網路拓撲及傳輸並產生記錄檔記錄模擬結果。 由於模擬引擎使用核心中無法與其他程序(process)共用的資源,因此在一台機 器上只能執行一個模擬引擎。
GUI((((Graphical User Interface))) )
GUI 提供使用者方便的操作介面。使用者用 GUI 繪製網路拓撲、設定網路 參數後,GUI 會自動將使用者的設定轉為模擬設定檔,省去使用者自行撰寫相關 設定文字檔的不便。這些設定檔會由模擬引擎讀取以進行模擬。 協定模組 協定模組 協定模組 協定模組(((Protocol Module)( )) ) 一個協定模組可視為網路協定堆疊中的一層,由模組開發者依照網路協定的 規格實作而成,並在模擬過程中運作各層網路協定的功能。使用者可串連許多協 定模組,形成一網路協定堆疊(protocol stack),用來達到不同的實驗、模擬需 求。 EstiNet 的分散式架構使它可佈署於多台電腦上,上述 GUI、Dispatcher、 Coordinator 皆可分別執行於不同電腦,達到多人使用多個模擬機器的功能。其中 Coordinator 與 模 擬 引 擎 會 共 同 執 行 於 同 一 電 腦 成 為 模 擬 機 器 ( Simulation Machine)。在只有一個使用者及一個模擬機器時,也可將所有 EstiNet 的軟體元 件執行於同一部電腦進行單機模擬。
6
2.2 Openstack 介紹
介紹
介紹
介紹
雲端服務分為基礎設施服務(Infrastructure as a Service)、平台即服務 (Platform as a Service)、軟體即服務(Software as a Service)三種服務模式。基 礎設施服務是直接提供虛擬機器給使用者的雲端服務。平台即服務則提供開發平 台給使用者開發程式。軟體即服務則提供應用軟體給使用者使用。
Openstack 為美國 NASA(National Aeronautics and Space Administration)與 Rackspace 公司合作開發的雲端基礎設施服務(Infrastructure as a Service)之雲端
運算軟體。
Openstack 中,一台虛擬機器(Virtual Machine)由硬碟映像檔(disk image)
及 flavor 組成。硬碟映像檔是虛擬機器的硬碟,以檔案的形式儲存於實體機器中。
Flavor 是設定一台虛擬機器有多少運算資源,如多少 CPU、記憶體。
雲端系統架設者可透過指令或 Openstack API(Application Programming
Interface)使用 Openstack。Openstack API 是一個 RESTful Web 服務(RESTful Web
Service)。在 RESTful Web 服務中,使用者透過傳送 HTTP 要求(HTTP request) 存取及使用資源,接收 HTTP 回應(HTTP response)得知存取、執行等結果。
使用者須通過 Openstack 的認證才可使用 Openstack 的服務。要透過 API 使 用 Openstack 的服務時,使用者須先用帳號密碼向 Openstack 取得一個認證 token, 通常為一亂數字串。之後傳送 API 要求時附上認證 token,Openstack 就會將該要 求視為合法要求。認證 token 有使用時間的限制,如果超過使用時間 Openstack 不會再認定該要求是合法的,此時使用者須再次傳送帳號及密碼取得新的認證
token。使用 API 操作時會有許多 HTTP 要求及回應,Openstack 以此 token 認證
方式避免使用者的帳號資訊夾帶在各種 HTTP 要求中,降低使用者帳號資訊外洩 的可能。
Openstack 以資料庫儲存系統的相關資訊及狀態,例如虛擬機器、Fixed IP Address 及 Floating IP Address 等資訊,Fixed IP Address 及 Floating IP Address 將
7 於章節 2.2.2 說明。Openstack 在做各種操作時,會不斷更新其資料庫中的資料, 資料庫也是各種查詢的資料來源。
2.2.1 Openstack 軟體元件介紹
軟體元件介紹
軟體元件介紹
軟體元件介紹
Openstack 為一龐大系統,由許多模組各自負責不同服務,模組又由許多元 件構成。以下僅介紹與我們網路模擬雲端系統較相關的模組及其重要元件。 Nova Nova 是 Openstack 最重要的模組。它由多個元件組成,主要負責管理計算 資源,如開啟、關閉、分配虛擬機器等操作。在我們使用的 Openstack 版本中, 虛擬機器的網路相關設置也是由 Nova 負責。以下介紹 Nova 中較重要的元件。 Nova-Compute Nova-Compute 為一程序(process)。它會接收開啟或關閉虛擬機器的要求, 使用下層虛擬機器 hypervisor 的 API 來開啟或關閉虛擬機器,最後將資訊寫入資 料庫。 Nova-Network Nova-Network 是處理虛擬機器網路相關設定的程序。其接收網路相關要求,執行對應的操作,如設置網路介面(network interface)、修改 iptables 規則等。
Openstack 網路架構將在章節 2.2.2 說明。
Nova-Api
Nova-Api 負責接收及回應使用者的 Openstack API 要求。
Nova-Scheduler
Openstack 要開啟虛擬機器時,會由 Nova-Scheduler 以排程演算法挑選用於
開啟虛擬機器的實體機器。雲端系統架設者可設置不同的排程演算法,讓虛擬機 器可以不同方式分散在雲端眾多實體機器中。
8
Glance 是負責管理虛擬機器映像檔(Virtual Machine Image)的模組,例如
儲存、取出映像檔。虛擬機器映像檔是開啟虛擬機器時所需要的硬碟映像檔(disk image)範本,虛擬機器開啟後硬碟最初的內容會是此範本的內容。 上述模組、元件可依照雲端系統架設者的需求執行在不同機器上。
2.2.2 Openstack 網路架構
網路架構
網路架構
網路架構
以 Openstack 建立的雲端系統中含有多台實體機器與多台虛擬機器,這些機 器透過內部網路連接。內部網路主要由 Openstack 的 Nova 模組設定及管理。 Openstack 對於內部網路有三種網路組態可供選擇,分別為 Flat、Flat DHCP、 VLAN。無論使用哪種組態,實體機器都需要兩張網路介面卡(network interface)。 一張負責機器本身的對外連線,一張負責與虛擬機器溝通。負責與虛擬機器溝通 的網路介面卡稱為內部網路介面卡(internal network interface)。Openstack 有 single-host、multi-host 兩種網路管理模式。兩種模式中虛擬機
器與外界網路的連線、網路流量皆會通過 Nova-Network。在 single-host 模式下, 整 個 網 路 中 只 有 一 個 Nova-Network 。 在 multi-host 模 式 中 , 每 台 運 行
Nova-Compute 的實體機器皆會執行 Nova-Network。
我們使用 Flat DCHP 網路組態及 single-host 管理模式。Flat DHCP 中,每台 主機需建立一虛擬橋接器(bridge),此為 Linux 系統虛擬出來的網路介面。一台 主機上所有虛擬機器及此主機的內部網路介面卡會連接到此橋接器,本論文於章 節 3.2 說明實際建置的狀況。另有一稱為 dnsmasq 的小型 DHCP server 監聽在此 虛擬橋接器上,負責分配 IP Address 給虛擬機器。
Openstack 將虛擬機器的 IP Address 區分為 Floating IP Address 與 Fixed IP Address。Fixed IP Address 是虛擬機器建立、開啟後得到的 IP Address,在虛擬機
器被關閉、刪除前都擁有此 IP Address。Floating IP Address 則可以在任何時間動 態關聯(associate)給虛擬機器或從虛擬機器上卸離(disassociate)。
9
在應用上,提供雲端服務的廠商會將 Public IP Address 作為資源販賣或租借 給使用者使用。使用者可能有多台虛擬機器,但只有一個 Public IP Address,如 果能將 Public IP Address 動態的配置給不同虛擬機器,對使用者會有較大的彈性。 透過 Openstack 的 Fixed IP Address 及 Floating IP Address 機制,廠商可以把 Fixed
IP Address 設定為 Private IP Address,Floating IP Address 設定為 Public IP Address。
如此,在雲端內部虛擬機器的網路組態可以用 Private IP Address 管理,而 Public
IP Address 就能作為資源賣給使用者。使用者可以將他購買的 Public IP Address
任意關聯到不同的虛擬機器上,IP Address 不會受限於一台虛擬機器。
在我們的系統中,Fixed IP Address 跟 Floating IP Address 都是 Private IP
Address。Fixed IP Address 由 Openstack 分配給虛擬機器,是 192.168.4.0 網段的 IP Address,用於虛擬機器間的溝通。我們的網路架構除了虛擬機器的網段之外,
另有自行設置的 10.10.10.0 內部網段,我們其他的實體機器跟服務會架設在此網 段。虛擬機器存取其他實體機器的服務時,它的 Fixed IP Address 會被轉換成對 應的 Floating IP Address。因此,我們將 Floating IP Address 設為 10.10.10.0 的網 段,讓虛擬機器能存取其他實體機器的服務,如 NFS。
Openstack 透過 iptables、route 等工具設定各台實體機器的網路組態,以管
理雲端的內部網路。例如,Floating IP Address 的關聯是在相關實體機器上設置
iptables 的 NAT 規則,針對虛擬機器的封包做 Fixed IP Address 及 Floating IP Address 轉換,此部分將於章節 3.2 說明實際建置的狀況。
10
第
第
第
第3章
章
章 系統架構
章
系統架構
系統架構
系統架構
我們在 EstiNet 的分散式架構基礎上修改及增加功能,配合 Openstack 所提 供的的基礎設施服務,設計、實作出 EstiNet 網路模擬雲端系統。在我們的系統 架構中,使用虛擬機器作為運算單元、執行 EstiNet 網路模擬器以執行模擬工作, 並利用 Openstack 管理虛擬機器資源。 此網路模擬雲端系統中,模擬工作分為模擬工作(Job)及模擬子工作 (Subjob)。一個模擬工作可能包含一個或多個模擬子工作,各子工作可分別獨 立進行模擬,此部分將於章節 4.2 進一步說明。 在本章中,我們先介紹整體系統的主要架構。先介紹軟體階層的架構,接著 說明實體機器與網路架構,最後說明各軟體元件分別運行於哪些實體機器中。3.1 系統軟體元件架構
系統軟體元件架構
系統軟體元件架構
系統軟體元件架構
首先我們以圖 3-1 說明 EstiNet 網路模擬雲端系統的軟體元件架構圖。其中 的大框表示雲端系統部分,區分雲端系統的內外。我們將 GUI 置於雲端之外, 其餘元件則位於雲端內部,系統內外以 Forwarder 作為溝通橋梁。雲端內部以 Manager 為主要控制中心。11 圖 3-1、網路模擬雲端系統軟體元件架構 圖 3-1 中虛線方框及其中元件表示這些元件執行在同一虛擬機器中,此部分 將於章節 3.3 進一步說明。線段代表各元件之間的連線,實線表示元件啟動或連 上雲端系統時便會建立的連線,虛線則是依據要求建立。以下先介紹各元件的主 要功能,之後再說明軟體架構。 GUI
GUI 為 EstiNet 網路模擬器圖形操作介面。我們讓使用者以 GUI 直接使用雲
端模擬服務,作為 EstiNet 網路模擬雲端服務的客戶端。
Forwarder
雲端內部及外部的溝通、轉送橋樑,作為雲端系統的主要出入口。
12
雲端系統的控制中樞,主要負責接收與分配模擬工作、開啟及關閉虛擬機器。
Manager 透過 Openstack API 開啟及關閉虛擬機器、關聯(associate)及卸離
(disassociate)Floating IP Address。 File Manager File Manager 負責處理與檔案及資料庫有關的操作,例如接收模擬設定檔、 傳送模擬結果檔、查詢資料庫。 Dispatcher Dispatcher 負責產生模擬子工作、分配子工作、管理模擬資源、處理與模擬 工作有關的資訊並更新至雲端系統資料庫。功能與 EstiNet 原始的 Dispatcher 雷 同,但不再與 GUI 直接連線,模擬要求由 Manager 傳送給 Dispatcher 。
Dispatcher Manager 在一台執行 Dispatcher 的虛擬機器中會執行多個 Dispatcher,Dispatcher Manager 負責讓虛擬機器中有固定個數的 Dispatcher。 Coordinator Coordinator 在雲端系統中僅負責執行模擬引擎及扮演模擬引擎及 Dispatcher 間的溝通橋樑,不再如原有分散式架構與 GUI 直接連線,所有要傳輸給 GUI、 讓使用者知道的資訊會交由 Dispatcher 處理。 模擬引擎 模擬引擎 模擬引擎 模擬引擎(((Simulation Engine)( ))) 模擬引擎功能與 EstiNet 原始版本相同,負責執行模擬。 資料庫 資料庫 資料庫 資料庫((((Database)))) 資料庫用於儲存網路模擬雲端系統所使用的資訊、使用者認證所需的使用者 資訊以及模擬工作相關資訊,如工作狀態、進度等。由於此系統為一雲端系統, 如遭遇各硬體、軟體之錯誤,系統應能在重新啟動後恢復先前的運作狀態,因此 我們將軟體元件的狀態存於資料庫以供發生錯誤時回復,這些資訊如虛擬機器分
13
配及使用的狀態。由於 Openstack 平台中也有資料庫,後面章節如無特別描述, 資料庫皆指我們雲端系統本身的資料庫。
NFS Exporter
NFS Exporter 負責動態分享 NFS(Network File System)的目錄給虛擬機器
掛載(mount),因此 NFS Exporter 必須執行在架設 NFS 的主機中。此元件的功 能及運作將於章節 4.4 進一步說明。
Fip Checker 及及及及 Fip Asker
用以確認虛擬機器是否已獲得 Floating IP Address,詳細說明於章節 4.2.3。
由圖 3-1 可以看到,我們將 GUI 分離至雲端系統外,這是由於如果將 GUI 放在雲端系統內部,讓使用者以 VNC(Virtual Network Computing)程式遠端連 線至雲端內的 GUI 操作及進行模擬,在操作上會有難以忍受的延遲感以及大量 的網路傳輸。 整個雲端系統只能透過 Forwarder 連外。Forwarder 是我們自行撰寫的轉送程 式,因此雲端內部元件無法直接與網際網路連線,網際網路中的機器也無法直接 與雲端內部元件連線。我們以此方式減少雲端內部與外界連線,作為第一道安全 性防護,不僅保護雲端,也避免惡意使用者使用虛擬機器攻擊外部網路。 在軟體架構上,我們以同步(synchronize)的方式處理各種要求(request)。 軟體元件可能需要執行多個步驟才能完成一個要求,元件需完成一個要求的所有 步驟才能再處理下一個要求。
例如,GUI 傳送模擬工作至雲端時,會由 Manager 及 File Manager 分別接收 模擬工作要求及模擬設定檔。這三個元件分別需完成幾個步驟,才算完成傳送、 接收模擬工作的要求:GUI 需完成對 Manager 傳送模擬工作要求以及對 File
Manager 完成檔案傳輸等步驟。Manager 需完成接收模擬工作要求、儲存相關資
14
當一個要求由多個元件共同完成時,它們彼此需要傳遞控制訊息及資料,我 們用 socket 連線達到軟體元件間的溝通,即 IPC(Inter-Process Communication)。
如圖 3-1 所示,雲端系統中 Manager 與 File Manager、Forwarder、NFS Exporter、
Dispatcher、Coordinator 間有控制連線,此連線用於傳送各種 IPC 命令及回應。 Manager、File Manager、Forwarder 及 NFS Exporter 是此雲端系統運作時最初需
啟動的程序(process),這些元件啟動時便會建立控制連線。Dispatcher 與
Coordinator 則是在要提供模擬服務時才會執行,這兩個程序啟動時會主動連向 Manager 以建立控制連線。透過與 Dispatcher 及 Coordinator 的連線,Manager 可
知道系統中有多少 Dispatcher 及 Coordinator 正在運作並可加以管理。
Forwarder 與 Manager 間除了控制連線外仍有多條用於傳輸 GUI 資料的連線。
而 Forwarder 與 File Manager 間的連線在 GUI 要與 File Manager 連線時才會建立, 同樣用於 GUI 資料的傳輸。此部分於章節 4.2.1 進一步說明。
Dispatcher 與 Coordinator 間的連線在 EstiNet 網路模擬器原有架構中即存在,
用於傳輸控制命令。在雲端系統中我們保留此連線、加入雲端系統需要的 IPC, 並修改建立連線的部分,此修改於章節 4.2.3 說明。
Coordinator 與模擬引擎間的連線在 EstiNet 網路模擬器原有架構中即存在,
同樣用於傳輸控制命令。在雲端系統中我們保留此連線及其用途,並加入雲端系 統所需的 IPC。
Fip Checker 也是在雲端系統最初運作時會啟動的程序。Fip Checker 與 Fip Asker 間的連線是在 Fip Asker 啟動時主動連向 Fip Checker,此部分於章節 4.2.3
進一步說明。
上述 socket 連線中,Coordinator 與模擬引擎間使用 Unix domain socket,其 餘皆為 TCP socket。
上述軟體元件依據其負責項目及功能的不同,實作上有不同細節。以程式 架構來看,各軟體元件主要執行流程為:
15 1. 等待指令。 2. 從連線收到指令。 3. 依據指令執行相應步驟,完成後回到 1。 若執行的步驟可能造成程序被阻擋(block),則可能 fork 出子程序執行該步 驟,避免整個程序被一個要求阻擋(block)而無法進行其他動作。
16
3.2 實體機器與網路架構
實體機器與網路架構
實體機器與網路架構
實體機器與網路架構
圖 3-2 為網路模擬雲端系統的實體架構、線路圖。其中 Front-end、Worker、 Controller、Node*皆為實體機器。NFS 及資料庫則架設於在 Worker 中。如 Openstack 介紹中所述,Openstack 內部網路中的實體機器皆需兩張網路介面卡, 一負責對外連線,一為負責與虛擬機器溝通、處理虛擬機器的網路傳輸。因此Controller 及所有 Node 皆有兩張網路介面卡,分別連接到兩台 Switch。以下說明
各台機器的用途。
17
Front-end
網路模擬雲端系統的連外閘道,所有連線皆須經過此機器。在我們的實際建 置上目前僅有一台 Front-end,但在架構及軟體設計上若配合 DNS 的伺服器負載 平衡(Load Balancing),則可有多台 Front-end。本論文中以一台 Front-end 說明。
Worker 網路模擬雲端系統的控制中心,Manager、File Manager 等主要控制元件的 執行處。資料庫及 NFS 架設於此。 Controller Openstack 的控制中心,Nova-Network、Nova-Scheduler、Nova-Api、Glance 等服務皆運行於此。Controller 僅負責 Openstack 的控制與管理,不會執行 Nova-Compute 提供運算資源。 Node* 提供運算資源,用以開啟虛擬機器。Nova-Compute 服務執行於此。 此雲端系統中的網路是一封閉的內部網路,連接各虛擬機器及實體機器。接 下來我們說明此雲端系統的內部網路架構。圖 3-3 為雲端系統內部網路邏輯架構 圖。此雲端系統的內部網路分為兩層,外層是我們自行設置的網路(圖 3-3 上半 部),內層是由 Openstack 建立之虛擬機器內部網路(圖 3-3 下半部),內外層分 屬不同網段,而這兩部分以 Controller 連接。虛擬機器與外層網路中的機器進行 傳輸或經由 Front-end 連向網際網路時,其網路傳輸皆會通過 Controller。
18 圖 3-3、雲端系統內部網路架構 在雲端系統中,虛擬機器會開啟於多台實體機器,即我們系統中的 Node。 虛擬機器的網路傳輸會透過實體機器的網路介面卡往外傳送,因此虛擬機器與實 體機器須有相關網路組態設置,以使虛擬機器的流量可以先傳送到實體機器,再 由實體機器往外傳送。此組態設置如圖 3-4 所示,一個 Node 中有多台虛擬機器, 每台虛擬機器的網路介面卡 eth0 及 Node 的網路介面卡 eth1 會橋接至 Node 虛擬 出來的橋接器(bridge)br100 上。因此虛擬機器的網路傳輸會經由它的 eth0 傳 到 br100,再由 Node1 的 eth1 往外傳輸,Node 的 eth1 即為內部網路介面卡。
19 圖 3-4、Node 與虛擬機器的網路橋接 在背景介紹中提到,Openstack 對虛擬機器的內部網路有多種組態及管理模 式,我們使用 Flat DCHP 組態及 single-host 管理模式作為內部網路組態。我們將 Nova-Network 執行在 Controller 上,因此所有虛擬機器對外的網路流量會經過 Controller。我們以圖 3-5 說明虛擬機器對外傳輸的封包流向。封包從虛擬機器的
網卡 eth0 傳至 Node 的虛擬橋接器 br100。接著流向 Node 的網卡 eth1,再傳至
Switch2。Controller 的內部網路介面卡收到後,經過 Controller 的處理再將封包
20
圖 3-5、虛擬機器對外傳輸的封包流向
Openstack 網路架構中所提到的 Floating IP Address 關聯機制在我們的網路架
構中,是在 Controller 上以類似 NAT(Network Address Translation)的機制達成。 虛擬機器的封包往外傳、流經 Controller 時,Controller 會將封包的來源 IP Address 從虛擬機器的 Fixed IP Address 改為 Floating IP Address。當有封包要傳給某台虛 擬機器,該封包流經 Controller 時,Controller 會將目的 IP Address 從虛擬機器的
21
器本身無法直接得知自己的 Floating IP Address,只能知道 Fixed IP Address。而 對於非內層網路的實體機器來說,如 Worker、Front-end,它們得知的虛擬機器
IP Address 會是 Floating IP Address 而非 Fixed IP Address。
在我們的設置中,如圖 3-3,192.168.4.0 網段是 Fixed IP Address,而 10.10.10.0 網段是 Floating IP Address。虛擬機器存取 Worker 上的服務時,Controller 會將虛 擬機器的 Fixed IP Address 轉換為這台虛擬機器對應的 Floating IP Address。這個
Fixed IP Address 及 Floating IP Address 轉換機制影響到我們部分元件的設計與實
作,此將於章節 4.2.3 說明。
3.3 系統軟體元件與實體機器之關係
系統軟體元件與實體機器之關係
系統軟體元件與實體機器之關係
系統軟體元件與實體機器之關係
綜合前面兩個小節所說明的各軟體、硬體之功能,圖 3-6 表示出我們的軟體 元件分別執行於哪些實體及虛擬機器。
22
實體機器部分,Forwarder 執行於 Front-end,擔任整個雲端系統對外連線的 閘口。Manager、File Manager、NFS Exporter、Fip Checker 執行於 Worker,資料 庫及 NFS 架設於 Worker。由於 NFS 是架設在 Worker 上,File Manager 是直接在
Worker 的硬碟上進行檔案操作。
我們將虛擬機器分為兩種:Dispatcher VM(DVM)及 Coordinator VM(CVM)。
DVM 負責執行 Dispatcher。由於 Dispatcher 使用的系統資源較少,一台 DVM 可
執行許多 Dispatcher,可讓虛擬機器的運算資源,如 CPU 及記憶體,達到較有效 的利用。為了讓 DVM 中 Dispatcher 的數量可以維持在一定數目,我們在 DVM 中執行一 Dispatcher Manager 負責此工作。CVM 中運行 Coordinator 及模擬引擎, 是主要進行計算的單位。CVM 中另有 Fip Asker,用來確認 CVM 已取得 Floating
IP Address,此部分將於章節 4.2.3 說明。
在虛擬機器運算資源的配置上,如記憶體大小,可依照不同的需求分別設定, 以達到運算資源的有效利用。一般來說執行模擬工作的 CVM 會需要較多運算資 源,而僅執行 Dispatcher 的 DVM 需要的運算資源較少,我們可以調整不同的運 算資源設置以符合需求及達到資源的有效利用。
23
第
第
第
第4章
章
章
章 設計與實作
設計與實作
設計與實作
設計與實作
4.1 設計目標與系統設計
設計目標與系統設計
設計目標與系統設計
設計目標與系統設計
在學術研究、網路協定的設計與研發上,研究者通常會以不同參數進行多次 實驗,觀察在不同環境、參數下網路協定的運作狀況,進而修正、改良。在 EstiNet 網路模擬器原有的使用方式中,研究者需手動指定各種模擬參數來進行多次實 驗。 我們網路模擬雲端系統希望讓使用者以簡單的操作在較短的時間完成多個 模擬工作,省去使用者修改各種網路參數的麻煩,同時縮短使用者執行多項模擬 的總時間。另外,由於 EstiNet 網路模擬器可讓使用者自行開發網路協定模組, 因此在雲端系統中我們同樣希望使用者可使用自行開發的協定模組及應用程式 來執行模擬。 為了達到上述設計目標,我們設計並實作「併行模擬」、「使用者自訂模擬引 擎及應用程式」、「儲存空間管理」、「模擬引擎錯誤處理」、「認證機制」。這五大 部分的目標如下所述。 我們以「併行模擬」讓使用者以簡單的方式指定網路參數變化,雲端系統自 動產生多個類似但些許參數不同的模擬子工作,並自動用多台虛擬機器同時進行 這些模擬子工作。我們以「使用者自訂模擬引擎及應用程式」提供使用者使用其 自行開發的網路協定模組及應用程式。 「併行模擬」執行模擬工作會產生模擬結果檔案,使用者自行開發的應用程 式及模擬引擎需有儲存空間存放。我們不希望使用者的結果檔案毫無限制的儲存 於雲端系統中,因此雲端系統中讓每位使用者擁有自己的儲存空間存放檔案並限 制使用者的空間配額。此設計延伸出空間配額、檔案權限管控等議題,我們在「儲 存空間管理」說明此部分。24 使用者可使用自行開發的網路協定模組是此系統的功能之一,但如果使用者 程式撰寫不當可能造成雲端系統中的模擬引擎發生錯誤。模擬引擎在雲端系統的 虛擬機器中發生錯誤時,使用者無法如一般單機上可直接介入、取得錯誤資訊、 重新啟動,因此雲端系統須有相關機制處理此問題,即為「模擬引擎錯誤處理」。 最後,EstiNet 網路模擬器為一商業軟體,使用者使用某些功能進行模擬前 須通過一認證機制,確認使用者有購買該項功能。由於雲端系統架構的限制,無 法以原有機制進行認證,因此我們須另外處理雲端系統中與認證有關的問題,此 以「認證機制」達成。
4.2 併行模擬
併行模擬
併行模擬
併行模擬
併行模擬是此網路模擬雲端系統中的主要功能。此功能讓使用者可指定網路 參數變化,接著雲端系統自動產生多個類似但些許參數不同的模擬子工作,並自 動以用多台虛擬機器同時進行這些模擬子工作。使用者僅須設定並執行一個模擬 工作,便可得到在單機模式中需要多次設定、執行模擬的數據及結果,將節省使 用者實驗所需的龐大時間。 在此目標下,我們設計每個模擬工作會有一或多個模擬子工作,每個模擬子 工作有相同的網路拓撲,但分別有不同的網路參數值,如網路頻寬(bandwidth)。 每個模擬子工作實際上為一可獨立進行的模擬,因此可由一虛擬機器執行模擬。 當有多個模擬子工作時便可以多台虛擬機器同時進行模擬,如此可減少整個模擬 工作所需要的時間。 併行模擬的使用上,使用者先以 GUI 繪製網路拓撲,並設定相關網路參數 及欲使用的應用程式,此步驟為使用 EstiNet 網路模擬器進行網路模擬的基本步 驟。完成相關設定後,使用者可使用雲端服務執行模擬工作。一個模擬工作在網 路模擬雲端系統的執行流程為: 1. 使用者用 GUI 登入雲端服務。 2. 使用者設置相關參數並傳送模擬工作至雲端。25 3. 雲端系統收到模擬工作後,分配虛擬機器給此模擬工作。 4. 雲端系統依照設定產生模擬子工作。 5. 雲端系統開始以多台虛擬機器同時執行多個子工作的模擬運算。 6. 模擬過程中使用者可透過 GUI 取得模擬工作及使用資源的相關資訊,例如 工作名稱、模擬進度、使用的模擬機器數量。 7. 所有模擬子工作完成後,雲端系統釋放此工作所佔用的運算資源,使用者 可透過 GUI 取得模擬結果。 8. 使用者也可於模擬進行中、結束後,對模擬工作進行相關操作。 接下來各小節將說明上述步驟的實作方式。
4.2.1 連線及登入
連線及登入
連線及登入
連線及登入
使用者用 GUI 連接網路模擬雲端系統。在系統架構中提到,Forwarder 為雲 端系統對外的出入閘口,GUI 與雲端內部元件的連線需透過 Forwarder 轉送。以 下說明 GUI 透過 Forwarder 與 Manager、File Manager 建立連線及轉送機制。要使用雲端服務,使用者需先登入、通過認證,而認證是透過 Manager 進行, 因此 GUI 最初需先與 Manager 建立連線。如圖 4-1 所示,GUI 與 Manager 透過
Forwarder 建立連線的流程:
1. GUI 與 Forwarder 建立連線,傳送與 Manager 建立連線的要求。
2. Forwarder 為此連線產生一連線識別資料,此識別資料用於後面配對連線步 驟。因為 Forwarder 可能同時有許多連線需進行配對,需能識別每條連線。 我們以時間及一計數值作為識別資料。 3. Forwarder 透過與 Manager 間的控制用連線傳送連線要求,並將剛產生的識 別資料傳給 Manager。 4. Manager 主動連向 Forwarder、建立一條新的連線,此連線於橋接完成後將
26
視為與 GUI 的連線。
5. Forwarder fork 出子程序 Connector,子程序 Connector 會有父程序 Forwarder
所有的連線。Connector 為實際上進行轉送的程序。
6. Connector 依據兩邊的識別資料進行配對,關閉其他無關的連線,僅留下兩
條識別資料相同的連線。Forwarder 則關閉兩條識別資料相同的連線。
7. Connector 通知 GUI 及 Manager 橋接已完成。此後 GUI 將視原與 Forwarder
的連線為與 Manager 的連線,Manager 將視第 4 步中與 Forwarder 新建立的 連線為與 GUI 的連線。
8. 完成橋接後,Connector 僅作轉送,將 GUI 傳送來的資料送往 Manager、將
Manager 傳送來的資料送往 GUI。
27
GUI 需要傳輸檔案或查詢資料時,會與 File Manager 建立連線以進行這些操
作。因為 File Manager 不像 Manager 與 Forwarder 間有一條控制連線,GUI 與 File
Manager 的連線要求需透過 Manager 傳給 File Manager。因此,GUI 要與 File Manager 建立連線前必須先與 Manager 連線並通過登入認證。如圖 4-2 所示,GUI
與 File Manager 透過 Forwarder 建立連線的流程:
1. GUI 與 Forwarder 建立連線,傳送與 File Manager 建立連線的要求。
2. Forwarder 為此連線產生一連線識別資料,並將此識別資料回傳給 GUI。
3. GUI 傳送與 File Manager 建立連線的要求及連線識別資料給 Manager。
4. Manager 將連線識別資料傳送給 File Manager,要求 File Manager 向 Forwarder
建立連線。
5. File Manager 回應 Manager,表示有收到此要求。
6. File Manager 向 Forwarder 建立一連線並傳送連線識別資料。此連線識別資
料是第 2 步時 Forwarder 為 GUI 的連線產生的,我們透過將識別資料經由以 上步驟傳送至 File Manager 再傳給 Forwarder,用以配對 GUI 與 File Manager 的連線。
7. Forwarder fork 出子程序 Connector。Connector 為實際上進行轉送的程序。
8. Connector 依據識別資料進行配對,關閉其他無關的連線,僅留下兩條識別
資料相同的連線。Forwarder 則關閉兩條識別資料相同的連線。
9. Connector 通知 GUI 及 File Manager 橋接已完成。此後 GUI 將視原與 Forwarder 的連線為與 File Manager 的連線,File Manager 將視第 6 步中與 Forwarder 新建立的連線為與 GUI 的連線。
10. 完成橋接後,Connector 僅作轉送,將 GUI 傳送來的資料送往 File Manager、 將 File Manager 傳送來的資料送往 GUI。
圖 4-2 中 GUI 與 Manager 的連線實際上有 Connector 位於中間轉送,在此簡 化圖示表示。
28
圖 4-2、GUI 與 File Manager 透過 Forwarder 建立連線
雲端系統使用者的帳號及密碼儲存在資料庫中,我們以 MySQL 作為資料庫。 使用者透過 GUI 傳送帳號及密碼,透過上述之 Forwarder 轉送機制傳送至
Manager。Manager 以資料庫的資料驗證收到的帳號密碼是否正確,如正確則記
錄此連線由哪個使用者所使用,代表此連線已通過認證之連線。GUI 透過連線傳 送各種要求給 Manager 時,Manager 會檢查該連線是否已通過認證,是則執行相 應工作,否則拒絕 GUI 的要求。而 GUI 與 File Manager 連線的建立則需透過
Manager,Manager 只會為已通過認證的 GUI 建立此連線,因此 File Manager 可
29
4.2.2 傳送模擬工作
傳送模擬工作
傳送模擬工作
傳送模擬工作
使用者登入雲端系統、完成網路拓撲後,即可傳送模擬工作至雲端系統。在 傳送模擬工作時,使用者須設定模擬工作名稱、此工作要用多少虛擬機器同時進 行模擬、網路參數變化的設定、選擇要使用的模擬引擎。 網路模擬中網路拓撲主要由許多節點及節點間的連線組成。這些節點可能是 主機(host)、Switch、Router、無線 AP(Access Point)、擁有無線傳輸能力的主 機等。連線則可能是有線網路或各種無線網路,如 802.11n。在 EstiNet 網路模擬器中,每個節點有一個或多個「Port」,此處 Port 是指節 點上的網路介面,而非 TCP、UDP 協定中的 Port 概念。每個 Port 上有一協定堆 疊(Protocol Stack),協定堆疊由許多協定模組(Protocol Module)組成,如 FIFO、
802.3 MAC。如背景中所述,協定模組是 EstiNet 網路模擬器中實際運作協定規
則的元件,封包進出時會依序經過這些協定模組的處理。在協定模組中有許多參 數可供使用者調整,如 FIFO 模組的最大佇列長度(Maximum Queue Length)。 使用者在傳送模擬工作時以 GUI 設置他想變動的網路參數,GUI 將使用者 設定網路參數的指令寫在一文字檔中,傳送模擬設定檔時一同送至雲端系統。以 下說明該文字檔及設定參數的指令格式。 網路參數設定檔格式如下: 每一行代表一個參數變動的設定,使用者可同時設定多個參數。<Name>表 示參數名稱,<Setting>表示參數值的設定,兩者以逗號隔開,詳細說明如下。 <Name>有兩種格式,分別用於指定全域變數及節點協定模組中的參數:
1. G,<Global Variable Name>
此格式用於指定全域變數的名稱。
<Global Variable Name>為欲修改的全域變數名稱,如 RandomNumberSeed。
<Name>,<Setting> <Name>,<Setting> ……
30
例如:G,RandomNumberSeed
2. N,<Node ID>,<Port ID>,<Module Name>,<Module's Variable Name>
此格式用於指定節點協定模組中參數的名稱。
<Node ID>為欲設置節點的 ID。 <Port ID>為欲設置 Port 的 ID。
<Module Name>為欲設置參數所在模組名稱。 <Module’s Variable Name>為欲設置之參數名稱。
例如:N,1,2,FIFO,max_qlen,表示要設定節點 1 的 Port 2 模組堆疊中 FIFO 模組的最大佇列長度(Maximum Queue Length)。
在參數值<Setting>的設定上,我們提供兩種格式:
1. R,<min value>,<max value>,<delta>
此以等差數列的方式設定想要的參數值,以上三個參數分別代表最小值、最 大值及變動值。
例如:R,10,100,10 表示要設定的參數值為 10、20、30、…、90、100。
2. V,<Value 1>,<Value 2>,<Value 3>,...
此格式讓使用者可任意定義參數值。 例如:V,2,6,7,12,3,20 表示要設定的參數值分別為這六個數值。 在設置網路參數變化上,使用者可以指定多個參數變化,例如: 以上設定表示亂數種子為 1 到 3,節點 2 的 Port1 的 FIFO 模組中最大佇列長 度為 10、20、30、40、50。依此設定,雲端系統會組合兩個參數值,產生 15 個 模擬子工作。其中第一個模擬子工作的亂數種子為 1、最大佇列長度為 10,第二 個子工作亂數種子為 1、最大佇列長度為 20,……,第七個子工作亂數種子為 2、 最大佇列長度為 20,依此推類。 另外,為了讓參數設定更方便、有彈性,讓使用者可指定所有節點、節點上 所有 Port 或指定所有相同類型節點,在<Node ID>及<Port ID>的設定上除了以數
G,RandomNumberSeed,R,1,3,1 N,2,1,FIFO,max_qlen,R,10,50,10
31 字指定外亦可用「*」指定。各種設定方式及意義如表 4-1 所示,其中 N 及 M 為 整數。 Node ID Port ID 意義 N M 指定節點 N 的 Port M N * 節點 N 的所有 Port * M 所有節點的 Port M * * 所有節點的所有 Port N* M 所有跟節點 N 類型相同之節點的 Port M N* * 所有與節點 N 類型相同之節點的所有 Port 表 4-1、節點及 Port 之設定意義 使用者完成雲端系統相關設定後傳送工作。GUI 會將此模擬工作的模擬設定 檔,以及網路參數設定檔打包成一個檔案。接著從 EstiNet 認證伺服器(License Server)取得「雲端憑證(Cloud Certificate)」,與打包好的模擬設定檔一併傳送 至雲端系統。雲端憑證將於章節 4.6 說明。
設計上,我們將作為控制中心的 Manager 跟處理檔案傳輸的 File Manager 分開,因此在傳送模擬工作時需要 File Manager 及 Manager 彼此溝通才能完成模 擬工作的接收。我們用模擬設定檔的 SHA1 值讓 File Manager 識別 GUI 傳送的 模擬設定檔屬於哪個模擬工作。雲端系統接收模擬工作步驟如下:
1. GUI 傳送模擬工作要求(request)的命令給 Manager,命令中包含模擬設定
檔的 SHA1 值、雲端憑證等資訊。Manager 收到命令後將 SHA1 值、雲端憑 證連同模擬工作的資訊存入資料庫。
2. GUI 將打包後的模擬設定檔傳給 File Manager。File Manager 以收到的檔案
計算 SHA1 值,以此值至資料庫查詢、取得模擬工作 ID。
3. File Manager 告知 Manager 設定檔已就緒的模擬工作 ID,之後 Manager 可開
始分配此工作。
模擬工作的設定檔會放在使用者於 NFS 上的暫存目錄,之後 Dispatcher 及 模擬引擎皆透過掛載來存取模擬設定檔。
32
4.2.3 分配模擬工作
分配模擬工作
分配模擬工作
分配模擬工作
在 EstiNet 網路模擬器原本的架構中,一個 Dispatcher 可服務多個 GUI、處 理多個模擬工作。但在雲端系統中,由於一個模擬工作會再產生多個模擬子工作, 且每個模擬子工作皆可獨立執行(可視為原有架構中的一個模擬工作)。為了簡 化 Dispatcher 的工作,我們以一個 Dispatcher 處理一個模擬工作,也就是一個 Dispatcher 處理一個模擬工作的所有模擬子工作。一個模擬工作的所有子工作皆 完成時,代表該模擬工作完成。如果一個使用者有多個模擬工作,則每個模擬工 作皆有一個 Dispatcher 處理。
Manager 是整個雲端系統的控管中心,負責分配 Dispatcher 及 Coordinator。 Dispatcher 及 Coordinator 啟動時皆會連向 Manager,因此 Manager 知道目前系統
中有哪些 Dispatcher、Coordinator 可供分配。
在 Manager 收到模擬工作要求後,會先檢查系統中是否有空閒的 Dispatcher 及 Coordinator,若有則以空閒的 Dispatcher 及 Coordinator 提供服務,若無足夠 空閒的 Dispatcher 或 Coordinator 則開啟新的虛擬機器,即 DVM、CVM,以服務 此模擬工作。如圖 4-3 所示:
33
圖 4-3、分配模擬工作流程
Manager 分配 Dispatcher 給一個模擬工作的方式是通知 Dispatcher 模擬工作
的相關資訊、要求 Dispatcher 開始處理模擬工作。在 EstiNet 原有架構中,
Coordinator 於啟動時讀取設定檔、得知 Dispatcher 所在 IP Address,接著連向 Dispatcher 並向其註冊,Dispatcher 之後便可管理模擬機器。但在雲端系統中有
多個 Dispatcher,且無法以固定設定檔設定 Dispatcher 的 IP Address。我們修改原 有的連線機制,讓 Manager 於分配 Coordinator 時將負責該模擬工作的 Dispatcher 的 IP Address 告知 Coordinator,Coordinator 則可再自行連向 Dispatcher。
另外,Manager 開啟及分配虛擬機器時,會要求 NFS Exporter 分享相關目錄 給這些虛擬機器,此將於章節 4.4 說明。Manager 分配完模擬工作後,會將模擬 工作及負責虛擬機器的對應記錄在資料庫中。 Manager 開啟虛擬機器有兩個步驟: 1. 以事先建立的硬碟映像檔及 flavor 開啟虛擬機器。 2. 將一個未使用的 Floating IP Address 關聯至新啟動的虛擬機器。
34
在此雲端系統的建置中,須先手動在虛擬機器中安裝 EstiNet 網路模擬器需 要的環境,接著以此虛擬機器的硬碟製作硬碟映像檔,供開啟虛擬機器時使用。 如背景中所述,在 Openstack 中開啟虛擬機器須指定虛擬機器的運算資源,此設 定稱為 flavor。我們在 Manager 中指定事先建立好硬碟映像檔及 flavor,用於開 啟虛擬機器。
Manager 在資料庫中維護一份 Floating IP Address 表,記錄 Floating IP Address
跟虛擬機器的對應,代表哪台虛擬機器使用哪個 Floating IP Address。每開啟一 台虛擬機器,Manager 會找一個沒被使用的 Floating IP Address,將之關聯到新開 啟的虛擬機器,並更新資料庫、標示此 IP Address 由哪台虛擬機器使用。
由於 Floating IP Address 的關聯需在虛擬機器以從 Openstack 取得 Fixed IP
Address 後才得以進行,因此「開啟虛擬機器」及「將 Floating IP Address 關聯至
虛擬機器」兩個步驟之間會有一小段時間的間隔。
「開啟虛擬機器」及「將 Floating IP Address 關聯至虛擬機器」是使用
Openstack 的功能。如背景中所介紹,Openstack API 是一 RESTful Web 服務,我
們透過傳送 HTTP 要求、接收 HTTP 回應使用 Openstack API。實作上我們使用
libcurl 函式庫(library)收送 HTTP 要求及回應。Manager 先以我們架設的 Openstack 系統的帳號及密碼取得認證 token,之後以 Openstack API 定義的指令
及格式傳送 HTTP 要求,進行「開啟虛擬機器」、「將 Floating IP Address 關聯至 虛擬機器」的操作。
在系統架構中提到,我們將虛擬機器分為專門執行 Dispatcher 的 DVM 及專 門執行 Coordinator 及模擬引擎的 CVM。為達到雲端系統的自動化,我們需讓
Dispatcher 及 Coordinator 能自動啟動。因此我們將 Dispatcher 及 Coordinator 加入 Linux 開機時會啟動的程序中,讓在 Dispatcher 及 Coordinator 能在虛擬機器開啟
後自動執行。我們依照 DVM 及 CVM 不同的需求撰寫啟動腳本(shell script), 並將此腳本加入虛擬機器的/etc/rc.d/rc.local,Linux 於開機最後便會執行我們的 啟動腳本。
35 在 Dispatcher 跟 Coordinator 間有兩條連線。一連線用於傳輸控制命令,如 Dispatcher 要求模擬機器開始模擬、Coordinator 註冊等控制命令皆透過此連線。 另一連線用於傳輸模擬進度,此部分將於章節 4.2.7 說明。以下分別說明 Dispatcher 及 Coordinator 的啟動流程。 DVM 的啟動腳本執行以下動作: 1. 掛載(mount)NFS 上的目錄。 2. 執行 Dispatcher Manager。 為簡化軟體元件間的溝通及檔案傳輸,我們將模擬設定檔儲存在 NFS 中, 讓 Dispatcher、Coordinator 及模擬引擎透過掛載 NFS 存取模擬設定檔。
DVM 中 Dispatcher 都是由 Dispatcher Manager 啟動。Dispatcher Manager 負
責維持 DVM 中 Dispatcher 的個數,當一個 Dispatcher 完成工作、結束後 Dispatcher
Manager 會再執行一個 Dispatcher。
實作上,Dispatcher Manager 先用迴圈 fork 出固定個數的子程序(child
process),子程序以 execlp()執行 Dispatcher。接著用 sigsuspend()讓 Dispatcher
Manager 暫停執行直到收到表示有 Dispatcher 結束的信號(signal)SIGCHLD 時,
再 fork 子程序執行 Dispatcher。有多少 Dispatcher 結束 Dispatcher Manager 就會 再 fork 多少子程序,讓一台 DVM 維持一定數量的 Dispatcher。 Dispatcher 啟動後的執行流程如下: 1. 讀取設定檔。 2. 建立資料庫連線,用於將模擬工作的資訊更新至資料庫。 3. 以亂數產生兩個 Port Number 並監聽。 4. 連接 Manager。
36
6. 等待 Coordinator 的連線或來自 Manager 或 Coordinator 的控制命令
Dispatcher 完成上述啟動流程後,進入可接收模擬工作的狀態。其中會有兩 個監聽 Port 等待 Coordinator 之連線。一用於建立控制用連線,一用於建立傳送 模擬進度用連線。第 3 步中須以亂數產生 Port Number 是因一台 DVM 中會有多 個 Dispatcher,無法以固定 Port 監聽。 CVM 的啟動腳本執行以下動作: 1. 設定執行 EstiNet 網路模擬器所需要的環境變數。 2. 關閉防火牆 iptables。
3. 執行 Fip Asker,若 Fip Asker 執行成功且正常結束則執行 Coordinator。
前兩個步驟為以 EstiNet 網路模擬器運行模擬時所需要的步驟,需要第 3 步 驟之原因將於後說明。
Coordinator 啟動後的執行流程如下:
1. 初始化變數、產生相關物件,設定環境變數及讀取設定檔。
2. 連接 Manager。Manager 的 IP Address 及監聽 Port 由第一步讀取設定檔時取 得。
3. 等待 Manager 的分配命令。此命令帶有這個 Coordinator 被分配給哪個模擬 工作、由哪個 Dispatcher 管理的資訊。
4. 收到 Manager 命令後從中取得 Dispatcher 的 IP Address、Port 以及此模擬工 作所屬的使用者。
5. 掛載該使用者在 NFS 上用以存放模擬設定檔及結果檔的目錄。
6. 以第四步取得的資訊連接 Dispatcher,此為 Coordinator 及 Dispatcher 間用於 傳送控制命令的連線。
37
7. 向 Dispatcher 註冊,從 Dispatcher 收到另一個監聽 Port Number。
8. 以第七步取得的資訊與 Dispatcher 建立第二條連線,此連線用於傳送模擬進 度,於章節 4.2.7 詳細說明。
Coordinator 完成上述啟動流程後,進入可開始進行模擬的狀態。
在我們的系統架構中,虛擬機器存取 NFS 時,NFS 看到的虛擬機器 IP Address 是 Openstack 架構中的 Floating IP Address,因此在 NFS 的設定上是以 Floating IP
Address 進行目錄的分享設定。在前述 Manager 啟動虛擬機器的流程中,開啟虛
擬機器到虛擬機器擁有 Floating IP Address 間會間隔一小段時間,此段時間會隨 著虛擬機器開啟數量的增加而增長。
Coordinator 啟動後會連向 Manager,如果此時 CVM 尚未擁有 Floating IP Address,Manager 以 getpeername()取得連線對方的 IP Address 時無法取得 CVM
的 Floating IP Address,會由於 Floating IP Address 的機制而得到 Controller 的 IP
Address。這會造成 CVM 無法掛載 NFS 或對應錯誤使 Manager 無法識別此台 CVM。
有此問題是因為 Coordinator 在 CVM 尚未取得 Floating IP Address 時便連向
Manager。我們希望 Coordinator 是在已有 Floating IP Address 時才連向 Manager,
因為 Floating IP Address 的機制,我們無法從 CVM 中得知自己的 Floating IP
Address 再傳送給 Manager。最後我們以 Fip Checker 跟 Fip Asker 解決此問題,
以下說明解決方式。
在 Worker 上執行 Fip Checker,功能為檢查 IP Address 是否為 Floating IP
Address。在 CVM 啟動後且 Coordinator 執行前,我們會先執行 Fip Asker 用於確
認虛擬機器已取得 Floating IP Address。
Fip Checker 查詢 Openstack 資料庫中資料表 floating_ips 中欄位 deleted 為 0
的 IP Address,得到目前 Openstack 系統中使用的 Floating IP Address 範圍。Fip
Asker 啟動後會連接 Fip Checker,Fip Checker 用 getpeername()取得 Fip Asker 的 IP Address,比對是否為 Floating IP Address,是則回傳 OK 後關閉連線,若不是
38
Floating IP Address 則直接關閉連線。Fip Asker 如果偵測到 Fip Checker 直接關閉
連線則呼叫 sleep()睡眠一秒後再重新連線,Fip Asker 會不斷嘗試連線直到收到
OK 則結束執行。
在 CVM 的啟動腳本中,我們讓 Coordinator 在 Fip Asker 正常結束時啟動, 因此當 Fip Asker 收到 OK 時正常結束即可讓 Coordinator 得以啟動。如此便可達 到讓 Coordinator 在 CVM 擁有 Floating IP Address 的狀況下向 Manager 建立連線。
4.2.4 產生及分配模擬子工作
產生及分配模擬子工作
產生及分配模擬子工作
產生及分配模擬子工作
Dispatcher 收到 Manager 的模擬工作要求後會做一些簡單處理,接著依據變 數設定產生可各自獨立執行的模擬子工作,最後將模擬子工作分配給模擬機器。 以下說明前述各步驟的設計與實作。 首先,Dispatcher 解開打包的模擬設定檔,將模擬設定檔放在此工作所屬使 用者於 NFS 上的暫存目錄,模擬引擎讀取模擬設定檔會從掛載 NFS 的目錄讀取。 接著,Dispatcher 從資料庫中查詢此模擬工作的「雲端憑證」,用於分配模擬子工 作時傳送給 Coordinator,此認證於章節 4.6 說明。 Dispatcher 依據使用者的參數變化設定產生模擬子工作。首先依據使用者參 數變化的設定,組合出所有變數值的組合。接著依照組合的數量,產生相應數量 的模擬子工作,並為每個子工作產生一物件記錄此工作之相關資訊。再從模擬工 作的設定檔複製出多份設定檔、分別放到各子工作的目錄,模擬引擎進行模擬時 便會到該子工作的目錄讀取設定檔。最後 Dispatcher 修改每個模擬子工作的設定 檔,將要改變的網路參數寫入模擬描述檔(.tcl 檔)。 模擬描述檔會描述網路拓撲中,節點使用的協定模組之間的關係(即協定堆 疊),以及拓譜中的節點的連接關係。模擬描述檔中亦會指定各種網路參數,如 亂數種子(random number seed)等全域變數,以及節點中網路協定模組的參數 值。此檔案於使用者以 GUI 繪製網路拓撲後,由 GUI 產生。模擬描述檔有自訂 格式及指令,模擬引擎中有對應各指令的處理函式(function)。執行模擬時模擬 引擎會讀取此檔案,依其中的指令建立物件、設置變數值,建立出各節點的協定39
堆疊。模擬引擎讀取完整份模擬描述檔後,各節點協定堆疊的相關物件及關連便 建立完成,之後模擬引擎便可以這些物件開始模擬。因此我們透過修改模擬描述 檔,讓模擬子工作得以不同的網路參數進行模擬。
實作上,Dispatcher 會在模擬描述檔最後、RUN 指令前加入 CloudSet 指令, 用來修改全域變數及節點中網路協定模組的參數值。由於 CloudSet 指令在模擬 描述檔的最後,模擬引擎處理完前面的指令、要處理 CloudSet 時,所有網路模 擬物件皆以建立,此時便可直接修改模擬物件中的變數值,達到修改的目的。
CloudSet 指令分成兩種格式,分別修改全域變數與修改各節點各項變數,其
格式與意義說明如下:
1. CloudSet <Global Variable Name> = <Value>
此格式用於修改全域變數。
<Global Variable Name>是全域變數名稱。 <Value>是欲給予的值。
2. CloudSet Node <Node ID> Port <Port ID> <Module Name>.<Variable Name> = <Value>
此格式用於修改節點協定模組中的參數值。
<Node ID>為欲修改節點的 ID。
<Port ID>為該節點中欲修改 Port 的 ID。
<Module Name>為該 Port 上欲修改之協定模組名稱。 <Variable Name>則為該模組中欲修改之變數名稱。 <Value>為欲給予的值。 以下用兩個例子說明使用者於傳送工作時的參數設定如何轉換為 CloudSet 指令。 例一 例一 例一 例一 使用者設定: G,RandomNumberSeed,R,1,3,1 N,2,1,FIFO,max_qlen,R,10,50,10
40 以上設定表示亂數種子為 1 到 3,節點 2 的 Port1 的 FIFO 模組中最大佇列長 度為 10、20、30、40、50。此設定會產生 15 個模擬子工作。 經 Dispatcher 組合變數值,並修改模擬子工作的模擬描述檔,於第一個模擬 子工作的模擬描述檔會加上: 第二個模擬子工作的模擬描述檔會加上: 第七個模擬子工作的模擬描述檔會加上:
由例一可看到,Dispatcher 將節點 ID、Port ID、模組名稱、參數名稱套入
CloudSet 指令,參數值則是依照組合的結果設置。 例二 例二 例二 例二 假設網路拓撲中有節點 1 有 3 個 Port。使用者設定: 以上設定第一行如例一所述,第二行表示將所有連線的網路頻寬(bandwidth) 分別設為 10、100、1000 Mbps。此設定會產生 9 個模擬子工作。 經 Dispatcher 組合變數值,並修改模擬子工作的模擬描述檔,於第一個模擬 子工作的模擬描述檔會加上: CloudSet RandomNumberSeed = 1
CloudSet Node 2 Port 1 FIFO.max_qlen = 10
CloudSet RandomNumberSeed = 1
CloudSet Node 2 Port 1 FIFO.max_qlen = 20
CloudSet RandomNumberSeed = 2
CloudSet Node 2 Port 1 FIFO.max_qlen = 20
G,RandomNumberSeed,R,1,3,1 N,1,*,Phy,Bw,V,10,100,1000
CloudSet RandomNumberSeed = 1 CloudSet Node 1 Port * Phy.Bw = 10
41 第二個模擬子工作的模擬描述檔會加上: 第六個模擬子工作的模擬描述檔會加上: 由例二可看到,Dispatcher 僅負責參數變化的組合,對於未指明 ID 的節點 及 Port 不會加以展開,保留「*」並將此部分的展開交由模擬引擎處理。 此是由於我們希望分析模擬描述檔的程式僅在整體系統中的一個軟體元件 上,即模擬引擎,避免模擬描述檔未來若修改格式需維護多份分析程式。 Dispatcher 不會對模擬描述檔進行分析,無法知道網路拓撲中有哪些節點及 Port。 所以在使用者未明確指定節點或 Port 時,Dispatcher 無足夠資訊將「*」轉為多 個指明節點及 Port 的 CloudSet 指令。如例二中 Dispatcher 對於第六個模擬工作 無法產生以下指令: 在模擬引擎中以類別(class)實作模組,這些類別會繼承 NslObject,此處 的模組泛指協定模組(protocol module)及節點模組。在模擬引擎的實作上,將 「節點」也視為模組,主要用於記錄節點資訊。而協定模組則是協定堆疊(protocol stack)中協定的實作,主要為實現協定之功能。 網路拓撲中的節點擁有一個或多個協定堆疊(每個 Port 都有一個協定堆疊), 協定堆疊中有許多協定模組物件,因此每個節點擁有許多協定模組物件。這些物 件由協定模組的類別產生,於模擬時扮演真正執行功能的角色。在模擬引擎中將 一個節點擁有的協定模組物件串成一個串列。 CloudSet RandomNumberSeed = 1 CloudSet Node 1 Port * Phy.Bw = 100
CloudSet RandomNumberSeed = 2 CloudSet Node 1 Port * Phy.Bw = 1000
CloudSet RandomNumberSeed = 2 CloudSet Node 1 Port 1 Phy.Bw = 1000 CloudSet Node 1 Port 2 Phy.Bw = 1000 CloudSet Node 1 Port 3 Phy.Bw = 1000