• 沒有找到結果。

第三章 系統架構與功能

第一節 架構說明

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

第三章 系統架構與功能

第一節 架構說明

三層式架構( 3-Layer Architecture)

本研究採三層式架構實作雲端演算法平台,三層式架構分別為使用者介面層 (Presentation Layer)、商業邏輯層(Business Logic Layer)、資料存取層(Data Access Layer),由於平台可能同時會跑上百種演算法,為了要降低單一伺服器負擔,三 層式支援的分布式計算環境,將複雜龐大的計算量分散在多台機器上運行,舒緩 伺服器的負擔且讓平台更具擴展性,此外,分開運算邏輯層與資料存取層的好 處,使得客戶端無法直接存取資料庫,也為整體系統的安全性提升不少。三層式 架構的簡易示意圖如下:

圖 三-1 三層式架構

(資料來源:本研究繪製)

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

本研究針對平台使用者的應用服務面與設計開發面,以及平台上會使用到的 工具,整合成一個三層式的詳細組成結構圖,如下圖:

圖 三-2 智能金融演算法雲端平台架構總圖

(資料來源:本研究繪製)

以下針對各層做進一步說明,先從使用者介面層逐一往下介紹。

一、 使用者介面層(Presentation Layer)

此層透過Mezzanine 網頁框架勾勒出網站畫面,並提供平台使用者三大功 能,分別是演算法市集(Algorithm Market)、社群(Community)、Python 演算法開 發平台(Jupyter)。介紹如下:

利用Mezzanine 快速建立好部落格、討論區等社群功能,提供空間給使用 者,讓他們可以在上面學習、討論與研究。

Python演算法開發平台

開發介面為Jupyter Notebook,透過 Jupyter 的互動功能,讓計算結果及資料 能即時呈現在瀏覽器上,而對本來就有使用Jupyter Notebook 的開發者也不會陌 生。

圖 三-3 Presentation Layer

(資料來源:本研究繪製)

二、 商業邏輯層(Business Logic Layer)

此層主要運作於分散式節點或雲端資料中心,負責處理系統中極大部分運 算,並分為應用服務(Services)與開發設計(Develop)兩大環境,根據上層傳下來的 指令,決定運行在哪個環境上,如下圖3-4,應用服務(左)、開發設計(右)。

應用服務

應用服務採用Celery 任務調度模組,接受自演算法市集下達的請求(Celery client),交付給底下 Celey Workers 運行,再將結果儲存以等待 client 使用。

RabbitMQ Broker 則是負責接收這些訊息,形成一條由 Celery tasks 所組成的佇 列。而此層分散式的架構讓我們可以在多台機器上運行多個 workers,解決之後 過多task 的狀況。

開發設計

當平台開發者建立帳號後,將經由HTTP proxy 驗證身份,產生 Spawner,

並啟動一個notebook server 供平台開發者使用,不過上述的方法若是應用在單一 伺服器上,一旦使用者太多,系統垮台的機率就會上升,因此,本研究將使用 JupyterHub 的另外一項技術 Docker Spawner。

Docker Spawner 是將原先的 Spawner 在單一伺服器上啟動 notebook server 的 動作,改成在Docker 的 cotainer 上啟動,好處是可以做到系統隔離,notebooks 之間不會影響彼此環境,也能針對container 進行特殊配置,讓單一 notebook 有 更多變化,另外,Docker Spawner 也可以在遠端機器上生成 container,落實該層 的分散式架構,降低單一伺服器的負擔。

在Python 運行環境的函式庫,除了裝好一般常用的套件(如 Numpy、Pandas、

MatPlotLib 等)外,另外加裝 Tensorflow,希望將深度學習的概念運用在演算法

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

交易上,加上Tensorflow 完整的 API,讓平台上的使用者們都可以快速上手。另 外此環境也提供GPU,旨在提升深度學習運算速度。

圖 三-4 Business Logic Layer

(資料來源:本研究繪製)

三、 資料存取層(Data Access Layer)

此層主要負責資料的儲存及使用,包含資料庫(HAWQ)以及連接資料庫的接 口(DAO)。HAWQ 作為整個架構的資料庫,有別於傳統 Hadoop 上的 Hive 或 Hbase,又或是熱門常用的 MySQL、MongoDB 等,平行化結構為它帶來更快的 計算速度,即便在金融大數據面前,速度上也毫不遜色,使得其他資料庫只能望 其項背。而建立HAWQ 資料庫的推手則是 Ambari,Ambari 易佈署且簡便管理 的特性,讓HAWQ 不論是要搭配 YARN 做資源分配或是在自訂參數設定上都十 分方便,此外,Ambari 的圖形化管理介面,也讓我們隨時監控資料庫平台的狀

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

Data Access Object 則是使用 Python 編寫,將存取資料庫的功能寫成 module,讓平台開發者直接取用,HAWQ 存取 Python 的函式庫是使用 psycopg2,用 TCP/IP 的方式進行資料傳輸。

圖 三-5 Data Access Layer

(資料來源:本研究繪製)

在第二章文獻探討HAWQ 中提到,HAWQ 資料庫是 Append-only,也就是 說,HAWQ 所有的 SQL 指令,都不支援更新(Update)及刪除(Delete),所以這也 會是設計資料表時該注意的問題,像是如何對已新增的資料進行修改或是刪除。