新一代網站伺服器架構:MEAN
(加贈 MEAN 免費電子書)
最近國外科技網站頻頻出現一個新名詞:「MEAN」。而且該名詞只會出現與「網站開發(Web Site Development)」相關的論壇。看著大家「卑鄙」來「卑鄙」去的(Mean 在英文是「卑鄙、小氣」的意思),彷彿這個名詞技客(Geeker)們都已經熟到不用解釋到底在卑鄙個什麼。擁有嚴重資訊焦慮症(笑)的我,眼睛怎能容忍一個不知道全名的縮寫,動不動就從畫面「立體突出」來恥笑我呢!... :-D 稍微用點技巧查了 Google,並且把結果分享給大家。
原來 MEAN 講的是架設網站時,所使用的四套軟體:MongoDB、Express、AngularJS、Node.js。早個十年,那時開發網站流行使用 LAMP (Linux, Apache, MySQL, PHP) 這四套軟體。近年來,由於「大數據(Big Data)」、「分散式架構(Distributed Architecture)」、「非同步函數呼叫(Asynchronous Calls)」流行,傳統的 LAMP 已經無法應付上述三個需求,因此,網站開發環境就從「檯燈(LAMP)」換成「卑鄙(MEAN)」了... :-D 。皆下來我就一一介紹「卑鄙會的會員們」有哪些特色。
MongoDB 是一款以「檔案」做為儲存媒介的資料庫(Database)。有別於用傳統資料庫伺服器儲存資料、得把資料集中在後端單一機器上,使用檔案來存資料,不必硬是把資料集中在後台的一部機器上。你可以把一筆資料「碎屍萬段」,人名與電話的基本資料放在一台機器內的檔案,學經歷資料放在另一台機器內的檔案,達到「分散儲存,平行存取」的效果。這類用檔案做為儲存媒介的資料庫,我們通常稱為 NoSQL Database。近來 Facebook、Google...等網站,都積極使用 NoSQL Database 來做為後端儲存媒介。不但能「分散儲存」資料來預防一台機器掛點、整個網站就不能動的窘境,還能藉由「平行存取」位於數十台機器上分散儲存的資料,達到「秒取」所需的數據。關於 NoSQL 的介紹,可以看這篇「NoSQL 入門指引」: http://www.openfoundry.org/tw/news/9040
接下來我會介紹 Node.js,因為它比 Express 或 AngularJS 都來得基本。什麼是 Node.js 呢?簡單來說,就是執行於伺服器端的 JavaScript。拿 LAMP 時代的成員來比喻,Node.js 的地位就與 PHP 相同,只不過它採用 JavaScript 來當成語言而已。當然,Node.js 不是只有把 JavaScript 從客戶端搬到伺服端那麼簡單而已,還添加了不少功能。最著名的,當屬「非同步呼叫(Asynchronous Calls)」機制了。想瞭解「非同步呼叫」,得先瞭解什麼是「同步呼叫」。當主程式呼叫副程式時,在副程式還沒執行完前,主程式會「卡住」,等待副程式完成返回後,主程式才會繼續下一列程式碼的執行。這種函數呼叫方法稱為「同步呼叫」。但若副程式執行時間長,主程式在等待時就會因螢幕凍結、讓使用者體驗到類似「當掉」的情況。所以另外一種作法,就是主程式呼叫副程式、副程式開始運作後,主程式不等待副程式完成,逕行執行下一道指令。此時主副程式處於「平行運作」的狀況。等待副程式完成,就會「通知」主程式說:「我做完了」,主程式再予以反應即可。這種函數的呼叫方法,就稱為「非同步呼叫」。Node.js 並非三言兩語可以講完,有興趣的朋友,可以參考這本免費的 Node.js 電子書「Node 入門」: http://www.nodebeginner.org/index-zh-tw.html
再來是 AngularJS。它是 JavaScript 的「函式庫(Library)」,地位比較偏「前端」,負責 UI 的建置。如果說 JavaScript 是「無敵鐵金剛」,那 AngularJS 就類似「金剛飛翼」。與無敵鐵金剛結合後,就能讓本來不會飛的鐵金剛,遨翔在天際。AngularJS 有兩大特色:「單一網頁」與「MVC 模式」。「單一網頁」就類似你查詢「Google 圖片」時的感覺相同。網站一開始只提供一部份資料,隨著你往下捲,網站會動態載入剩下的部分。所有內容只要一直捲動,就會完整呈現,不必按「下一頁」,這就叫「單一網頁」。至於「MVC 模式」比較難懂,完全不瞭解它是什麼的版友,就等您實際研讀 AngularJS 再去學吧!Facebook 這邊實在不適合我長篇大論地講「何謂 MVC」。真的求知若渴的朋友,或可參考這篇「MVC 淺談」: http://luvit.me/1GzNxqN。最後,對 AngularJS 有興趣的朋友,可以參考這篇「我的前端 AngularJS 初體驗」: http://upvot.es/1C6W9qd
Express,一稱 ExpressJS,是一款 JavaScript 的「框架(Framework)」。所謂框架,就是協助你快一點寫出你想要的程式碼的工具。如果 JavaScript 是無敵鐵金剛,Express 就是幫忙你快速產生一架無敵鐵金剛的工具(以便讓你快去跟 AngularJS 這個金剛飛翼結合)。如果你是 PHP 的老手,我說 Express 就像是 PHP 內的 PEAR,不知道您是否能更有體會呢?關於 Express 的簡單介紹,中文的不多,不過我還是勉強找到這一篇 OK 的:「使用Node.js + Express建構一個簡單的微博網站」( http://upvot.es/1E4MGQT )。
不知這樣介紹,大家知道怎麼「卑鄙」(MEAN)地建構一個網站了嗎?最後送大家一本「卑鄙入門 XD」免費電子書。點擊後,找尋「eBook」這個關鍵字就能免費下載囉:
"MEAN Web Development", Packt Publishing, 2014
http://www.it-ebooks.info/book/4849/
期待大家也開始在網站開發這一塊,越來越「卑鄙」....
參考資料:
MongoDB(維基百科): http://zh.wikipedia.org/wiki/MongoDB
用 Express 和 MongoDB 寫一個 todo list: http://upvot.es/17ER5vU
AngularJS(維基百科): http://zh.wikipedia.org/wiki/AngularJS
使用 Node.js、Express、AngularJS 和 MongoDB 构建一个实时问卷调查应用程序: http://upvot.es/187BAwj
精通 MEAN: 当 MEAN 遇到 Meetup.com 和微数据: http://upvot.es/1E4Mili
Search