由於整個系統架構需要許多台機器,為了減少硬體的成本,所以本研究利用虛擬機器的方式,使用Kernel-based Virtual Machine解決方案在Linux 上建立所需的虛擬機器並且依照資料儲存層、應用服務層部分與服務分配層三部份分別架設系統。
資料儲存層部分使用MongoDB的文件導向型資料庫,並建置Sharded Cluster服務達到資料儲存層的需求。MongoDB是一種文件導向型資料庫管理系統,文件導向型資料庫中每一筆資料都是以文件形式存在,一群相關的資料會放在一起稱之為集合。在文件導向型資料庫中使用者可以在集合中放入自訂的格式的文件,也可以透過查詢去找出集合中想要的資料,這樣的好處可以讓虛擬平台依照使用者的需求去建立資料格式,而不用像關聯式資料庫需要調整表格定義。MongoDB還可以使用Shard的技術,將多個MongoDB系統形成一個大型的虛擬資料庫集合讓程式可以上面建立所需的虛擬資料庫。這樣的好處為可以隨時調整虛擬資料庫而不需要修改程式。
圖5-2-1 mongodb Shard功能示意圖
資料來源:(http://www.10gen.com/products/mongodb,2009)
應用服務層部分使用Node.js建置應用服務;Node.js是一個事件驅動去處理I/O的伺服端EcmaScript環境。一般程式語言在對資料庫進行查詢時,都是使用同步IO的方式,也就是查尋的過程,程式會等待資料庫回應資料後在進行之後的動作,所有如果要同時要應付多個需求,就必須使用多個行程或是執行緒去處理,而這些等待IO回應的行程或執行緒會消耗系統資源。Nodejs 使用非同步的事件驅動IO處理機制,在對資料庫進行查詢後,程式還可以繼續執行其他的動作,等到資料庫回應資料後再由系統通知程式做處理,這樣的好處是程式可以同時應付多個需求而不用等待IO回應。
圖5-2-2 node 處理模型
資料來源:(http://www.aaronstannard.com/post/2011/12/14/Intro-to-NodeJS-for-NET-Developers.aspx)
服務分配層使用Nginx的反向代理功能來處理:Nginx是世界使用率中第三大的,而且它的的系統資源消耗卻是前三大網頁伺服器軟體最小的,由於使用行程或執行緒的方式處理網頁需求時在進行切換時會消耗系統資源,所以它使用事件驅動的處理模型去處理網頁需求,所以能承受大量的連線數,解決同時處理一萬個以上連線的問題。
表5-2-1 2013年四月伺服器軟體的市占率
|
Developer
|
March 2013
|
Percent
|
April 2013
|
Percent
|
Change
|
|
Apache
|
341,021,574
|
54.00%
|
331,112,893
|
51.01%
|
-2.99
|
|
Microsoft
|
113,712,293
|
18.01%
|
129,516,421
|
19.95%
|
1.95
|
|
nginx
|
85,467,555
|
13.53%
|
96,115,847
|
14.81%
|
1.27
|
|
Google
|
22,605,646
|
3.58%
|
22,707,568
|
3.50%
|
-0.08
|
資料來源:(http://news.netcraft.com/archives/2013/04/02/april-2013-web-server-survey.html#more-8347)
資料來源:(http://blog.causal.ch/2012/02/micro-benchmark-apache-24-vs-nginx-10.html)
沒有留言:
張貼留言