• 沒有找到結果。

雲端運算 _______________________________________________________ 10

立 政 治 大 學

Na tiona

l Ch engchi University

10

貳、 文獻探討

本章從五個方面來進行文獻探討,分別是雲端運算、協作雲、CouchDB、

JavaScript application framework 以及盈餘預測模型。前四個部分是系統概念 與架構,而盈餘預測模型則是主要功能。

一、 雲端運算

根據 NIST 定義,雲端運算為使用無所不在、便利、隨需應變的網路,共享廣 大的運算資源,如網絡、伺服器、儲存、應用程式以及服務等,可透過最少的管 理工作及服務供應者互動,快速提供各項服務。

雲端運算是一種模式,其依照需求能夠方便地存取網路上所提供的電腦資源,

這些電腦資源包括網路、伺服器、儲存空間、應用程式、以及服務等可以快速地 被供應,同時減少管理的工作,可降低成本並提昇效能。

雲端運算包含五大基本特徵(Essential Characteristic) 及四個佈署模型 (Deployment Models)與三種服務模式(Service Model)。

五項基本特徵分別為:

(一) On-demand self-service:

使用者可以依自己的需求直接於網路上取得所需之雲端服務,如網路硬 碟或者虛擬伺服器等等,而不需經過人工的機制。

(二) Broad network access:

使用者可以使用電腦、手機或者是更小的部件以標準的溝通機制透過網 路取得服務。

(三) Resource Pooling:

多人共享資源,如頻寬、儲存空間、運算資源以及記憶體。

(四) Rapid elasticity:

使用者能夠彈性且快速地重新佈署他們所需要的服務。

(五) Measured Service:

服務是能夠被監控與測量其狀態的。

(一) Infrastructure as a service, IaaS:

也就是提供運算、儲存以及網路等基礎設備的服務,以提供內外部使用 者存取之用。為了幫助內部或外部使用者來存取使用,IaaS 通常透過虛擬化 技術(Virtualization)來完成伺服器整合的基本作業。目前市面上的 IaaS 以 Amazon EC2(Amazon Elastic Cloud 2), Google Compute Engine 以及 IBM Smart Cloud 最廣為人知。

(二) Platform as a Service, PaaS:

服務提供商提供運算平台給外部開發人員或者使用者,並提供整合的 API 以及相關的管理套件來方便開發人員來構建、開發以及佈署他們的系統,但 平台的管理成本相對較為昂貴。目前最有名的為 Google 所推出的 Google App

‧ 國

立 政 治 大 學

Na tiona

l Ch engchi University

13

Engine(GAE), Windows 推出的 Azure 以及 Amazon 的 S3。

(三) Software as a Service:

用戶向服務提供商租用雲端應用服務,使用者透過多種溝通協定對其所 租用的軟體進行操作或者取得運算結果。所有軟體的管理以及運轉皆由服務 提供商負責,對於使用者管理負擔以及成本的降低有不小的助益。

(一) Concurrency Control in Distributed Database Systems

(Philip A. Bernstein and Nathan Goodman ,1981)

同步一直是很重要的問題。在 1981 年這篇論文中提到關於 concurrency control 的方法,這份研究使用了很多的同步技術並且轉換成演算法來解決 concurrency control 的問題,最後這份研究設計了關於 concurrency control 的演算法框架。

(二) Managing and Querying Multi-Version XML Data with Update

Logging(Raymond K.Wong and Nicole Lam , 2002)

因為網路上面的資料量越來越大,因此需要控制管理這些資料就變成越 來越重要。作者認為使用者會想要查詢到之前版本的資料以及這些文件的變 動記錄,以及有效得查詢到某一特定的文件版本,這份研究提出了 XML 的版 本管理系統,可以有效地管理及查詢到這些有意義的資料。

(三) Extending Google Docs to Collaborate on Research Papers

(Stijn Dekeyser and Richard Watson , 2006)

學者在撰寫研究相關文獻的時候有許多軟體可以選擇,但是很少軟體可 以提供他們與其他人協同合作,像是同步版本的系統或是共同合作的系統在 當時使用情況還遠不急用電子信箱互相交換文件,主要原因出在系統可用性 以及協作環境存在衝突的問題。Google 文件在這方面表現的非常好,特別是 學者想要與其他人協同合作一個共同的題目時。此研究比較了 google 文件以 及其他解決方案發現用 google 文件可以充分解決這些問題。

(四) Google Fusion Tables: Data Management, Integration and

Collaboration in the Cloud(Hector Gonzalez , Alon Halevy, Christian

S. Jensen , Anno Langen , Jayant Madhavan , Rebecca Shapley and Warren Shen , 2010)

Google Fusion 是一個以雲端為基礎資料管理與整合的服務,讓大家上傳 表格式的資料,像是 spreadsheet,CSV 等。最重要的特點是他提供多個不同的 使用者一起整合資料,創造出協同合作的環境,使用者可以擁有私人的資料 也可以分享給特定的使用者一起協作,或是公開讓所有使用者從搜尋引擎裡 面爬到,這份研究主要是對 Fusion Table 的使用做討論,討論這些協作者在 資料使用上面的細節,還有資料在系統中如何儲存。

(五) Private cloud for collaboration and e-Learning services: from IaaS

to SaaS(Frank Doelitzscher , Anthony Sulistio , Christoph Reich , Hendrik kuijs , David Wolf,2010)

Hochschule Futwangen University(HFU)建立了一個私有雲基礎設施,

叫做 Cloud Infrastructure and Application CloudIA,CloudIA 主要的目 標使用者是 HFU 的教職員工與學生,以及讓外部的人進行協同合作的目的。

因此這份研究在介紹 HFU 是如何建立這個私有雲,以及此私有雲是用怎樣的 模式讓這個數位平台能在整個大學的環境裡面達到協同合作的作用。

(六) E-Learning Computational Cloud (eLC 2 ): Web Services Platform to

Enhance Task Collaboration(Sidhant Rajam,Ruth Cortez,Alexander VazheninmSubhash Bhalla,2010)

e 化學習平台的建立是很仰賴雲端技術的。這是使用網路服務的技術建立 一個使用者介面提供使用者整合以及溝通,所以 e 化社群是一個高度協同合 作的環境。此研究主要是要建立一個 e 化學習的服務,來提升協同合作的效 率,透過建立這樣的平台,可以讓客戶透過雲端技術去分享資料以達到協作。

(七) Always Up-to-date – Scalable Offline Patching of VM Images in a

‧ 國

立 政 治 大 學

Na tiona

l Ch engchi University

16

Compute Cloud(Wu Zhou; Peng Ning; Xiaolan Zhang; Glenn Ammons; Ruowen Wang and Vasanth Bala , 2010)

版本控制可以讓你電腦系統維持最新的狀態,這份研究主要是提出了一 個新穎的工具叫做 Niiwa,他分析版本並儲存起來,並且使得程式在離線時能 夠繼續改寫,而此工具 Niiwa 也實際應用在 IBM Research Compute Cloud(RC2) 上面。

(八) Cooperative Data Access in Multi-cloud Environments(Meixing Le,

Krishna Kant, and Sushil Jajodia , 2011)

這份研究討論在不同的雲端環境下,要怎麼透過協作來共享資料,像是 不同企業間擁有自己的資料,彼此共享但又存在某些規則不是完全公開分享,

這裡提出了使用權限規則去決定哪些企業可以得到哪些資料,以達到協作環 境同時又能確保資料安全性。

與傳統的關聯式資料庫不同,CouchDB 是以文件為基礎的資料庫。所謂文件型 資料庫,是只 CouchDB 是以文件為儲存單位,因此不像關聯式資料庫一樣是有架 構的。在關聯式資料庫當中,每個數據表的字段都要定義為一種類型,像是 int、

char 或是 datetime。但在 CouchDB 裡面的字段只有三個:文件編號、文件版本號 以及內容,內容字段可以看成是一個 text 檔案的文本,裡面可以隨意定義數據而 不用定義數據類型,但此數據必須要以 JSON 格式儲存,也就是 key/value 的格式,

但是在 value 方面限制是自由的,可以是字串、陣列或是物件。CouchDB 底層是 ERLANG 語言,以 Restful API 的格式提供服務,所以 CouchDB 所有的讀寫能力都 可以通過簡單的 HTTP 請求來實現,正因為採用那麼統一的服務接口,因此可以很 方便開發各種語言的個戶端,以方便不同開發者使用。

在 CouchDB 中,Database 表示一個資料庫,每個 Database 對應一個 Storage 以及多個 View Index(用來支持查詢以及儲存結果)。Database Storage 中可以儲 存任意的 Document,用戶可以在 Database 中自定義 View,方便對資料庫進行查 詢,View 是使用 JavaScript 進行定義,定義好的相關函數保存在 design document 中,而 View 對應的具體數據則是存在 View Index 文件中,我們可以透過上述所 說的 HTTP API 請求 Database,Document,View,可以進行簡單的 Query 以及其他 各種系統相關的信息。CouchDB 的架構如下圖:

‧ 國

立 政 治 大 學

Na tiona

l Ch engchi University

18

圖 三 CouchDB 架構圖

而底層儲存結構是由 Header 和 Body 組成。以下是關於 Header 與 Body 的規 則與特性。Header 包含兩個完全相同的 Header 信息,每個 Header 的 Size 為 2048KB;

Header 中前四字節為 magic code:$g、$m、$k、0;隨後為 Header 的 payload,

通過 term_to_binary(db_header_record)產生;接下來是填充空格;最後是 16 字 節的摘要信息(md5 產生);Header 總長度為:單個 Header*2 = 2048KB。而 Body 是由兩個 B+Tree 組成,其中一個 B+Tree 根據文件編號進行組織,另一個 B+Tree 以 seqnum(CouchDB 內部使用的序號,用來只是最新版本的文檔)為 key。

fulldocinfo_by_id_btree 使用文件編號作為 key,常用來根據文件編號來查找對 應的文件,fulldocinfo 中包含對應文件的所有版本信息,通過這些信息,我們可 以獲取指定版本的文件;而 docinfo_by_seq_btree 是使用 seq 作為 key,當文件 被更新時,對應的 seq 會增加。具體的文件數據(JSON 格式),以及 B+Tree 混合儲 存與這個文件之中。通過 B+Tree,我們可以快速的定位到指定的文件。整個 Storage File 結構如下圖所示:

‧ 國

立 政 治 大 學

Na tiona

l Ch engchi University

19

圖 四 底層儲存結構圖

所有的更新操作(包括文件的創建,修改和刪除)都是以在 Couch 文件尾部追 加的方式(即 Append 方式)進行。我們進行更新時,首先複製原有的數據信息(僅 僅針對修改,如果是創建那麼就沒有複製可言了),隨後將其追加到文件的結尾,

這個時候就激發 B+Tree 從 leaf 到 root 的更新過程,更新的 Node 信息也是採用 Append 的方式寫入到文件的結尾,到達根節點時,我們將根節點信息寫入到 Header

Erlang 主要應用在電信業者,像是北電網路、T-Mobile 等都會用 ERLANG 開發分散式系統,以達到共時(Concurrent)與容錯(Fault-Torrent)的能力,

除了共時與容錯,現在多核心與超執行緒(HT)的處理器環境,也提供 ERLANG 語言相當好的發揮環境。而 Erlang 最主要的特色是平行導向程式設計,強調 多程序平行運行,並且以訊息對彼此溝通。我們可以想像如果系統要向發一 萬筆資料給不同的人,我們可能可以從第一筆發到第一萬筆,但是第一萬個 人收到的時間與第一個人收到的時間間隔可能相隔十分鐘,如果使用 Erlnag 就可以輕鬆將一萬筆資料同時送出,這一萬個聯絡人也會幾乎同時收到這些 資料。如果在發送的過程中有發生錯誤,這些節點也會回傳錯誤訊息請求重 發。當然 Erlang 還有其他特點,但最主要的可以歸為三點:共時(Concurrency)、

訊息基礎(Massage Based)與分散式(Distributed),那麼用 Erlang 開發系統 的好處有以下幾點,第一:寫出來的程式,移轉到多核心的環境中執行,速 度會自然變快(甚至有可能達到線性加速,n 個核心就提昇 n 倍);第二:可以 寫出容錯的系統,電腦當機之後會重新啟動;第三:寫出來的程式不可思議

訊息基礎(Massage Based)與分散式(Distributed),那麼用 Erlang 開發系統 的好處有以下幾點,第一:寫出來的程式,移轉到多核心的環境中執行,速 度會自然變快(甚至有可能達到線性加速,n 個核心就提昇 n 倍);第二:可以 寫出容錯的系統,電腦當機之後會重新啟動;第三:寫出來的程式不可思議