MEAN架構實戰:基於MongoDB、Express、Angular、Node.js構建企業級應用

語言: CN / TW / HK

曾幾何時,業界流行使用LAMP架構(Linux、Apache、MySQL和PHP)來快速開發中小網站。LAMP是開放原始碼的,而且使用簡單、價格廉價,因此LAMP這個組合成為了當時開發中小網站的首選,號稱“平民英雄”。而今,隨著Node.js的流行,這使得JavaScript終於能夠在伺服器端擁有了一席之地。JavaScript成為了從前端到後端再到資料庫層能夠支援全棧開發的語言。而以MongoDB、Express、Angular和Node.js四種開源技術為基礎的MEAN架構,除了具備LAMP架構的一切優點外,更能支撐高可用、高併發的大型網際網路應用的開發。MEAN架構勢必也會成為新的“平民英雄”。

本文介紹了MEAN架構的概念、發展趨勢,並闡述瞭如何學習和使用MEAN架構。

什麼是MEAN架構?

MEAN架構,是指以MongoDB、Express、Angular和Node.js四種技術為核心的技術棧,廣泛應用於全堆疊Web開發。

1. MongoDB

MongoDB是強大的非關係型資料庫(NoSQL)。與Redis或者HBase等不同,MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富、最像關係資料庫的,旨在為Web應用提供可擴充套件的高效能資料儲存解決方案。它支援的資料結構非常鬆散,是類似JSON的BSON格式,因此可以儲存比較複雜的資料型別。MongoDB最大的特點是其支援的查詢語言非常強大,其語法有點類似於面向物件的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。
自MongoDB 4.0開始,MongoDB開始支援事務管理。

圖1-1是最新的資料庫排行結果。從圖中可以看到,MongoDB是在NoSQL資料庫中是排行第一的。該資料來自於DB-Engines(https://db-engines.com/en/ranking

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-5FSWZ67e-1591539233123)(https://waylau.com/images/post/20200607-mongodb.png)]

在MEAN架構中,MongoDB承擔著資料儲存的角色。

2. Express

Express是一個簡潔而靈活的Node.js Web應用框架, 提供了一系列強大特性幫助你建立各種Web應用。同時,Express也是一款功能非常強大的HTTP工具。

使用Express可以快速地搭建一個完整功能的網站。其核心特性包括:

  • 可以設定中介軟體來響應HTTP請求。
  • 定義了路由表用於執行不同的HTTP請求動作。
  • 可以通過向模板傳遞引數來動態渲染HTML頁面。

在MEAN架構中,Express承擔著構建Web服務的角色。

3. Angular

前端元件化開發是目前主流的開發方式,不管是Angular、React還是Vue.js都如此。相比較而言,Angular不管是其開發功能,還是程式設計思想,在所有前端框架中都是首屈一指的,特別適合大型企業級應用的開發。

Angular不僅僅是一個前端的框架,而更像是一個前端開發平臺,試圖解決現代Web應用開發各個方面的問題。Angular有著諸多特性,核心功能包括MVC模式、模組化、自動化雙向資料繫結、語義化標籤、服務、依賴注入等。而這些概念即便對於後端開發人員來說也不陌生。比如,Java開發人員肯定知道MVC模式、模組化、服務、依賴注入等。

在MEAN架構中,Angular承擔著UI客戶端開發的角色。

4. Node.js

Node.js是整個MEAN架構的基石。Node.js採用事件驅動和非阻塞I/O模型,使其變得輕微和高效,非常適合構建執行在分散式裝置的資料密集型實時應用。自從有了Node.js,JavaScript不再只是前端開發的小腳色,而是擁有了從前後臺到資料資料庫完整開發能力的全棧能手。JavaScript和Node.js是相輔相成的,配合流行的JavaScript語言,使得Node.js擁有更廣泛的受眾。

Node.js能夠火爆的另外一個原因是npm。npm可以輕鬆管理專案依賴,同時也促進了Node.js生態圈的繁榮,因為npm讓開發人員分享開源技術變得不再困難。

MEAN架構的優勢

MEAN架構的在企業級應用中被廣泛採用,總結起來具備以下優勢。

1. 開源

正如前兩節所述,無論是MongoDB、Express、Angular、Node.js四種核心技術,還是NG-ZORRO、ngx-markdown、NGINX、basic-auth等周邊技術,MEAN架構所有的技術棧都是開源的。

開源技術相對與閉源技術而言,有其優勢。一方面,開源技術原始碼是公開的,網際網路公司在考察某項技術是否符合自身開發需求時,可以對原始碼進分析;另一方面,開源技術相對閉源技術而言,商用的成本相對比較低,這對於很多初創的網際網路公司而言,可以節省一大筆技術投入。以此,MEAN架構也被稱為開發下一代大型網際網路應用的“平民英雄”。

當然,開源技術是把雙刃劍,你能夠看到原始碼,並不意味著你可以解決所有問題。開源技術在技術支援上不能與閉源技術相提並論,畢竟閉源技術都有成熟的商業模式,會提供完善的商業支援。而開源技術,更多依賴於社群對於開源技術的支援。如果在使用開源技術過程中發現了問題,可以反饋給開源社群,但開源社群不會給你保證什麼時候、什麼版本能夠修復發現的問題。所以,使用開源技術,需要開發團隊對開源技術要有深刻的瞭解。最好能夠吃透原始碼,這樣在發現問題時,能夠及時解決原始碼上的問題。

比如,在關係型資料庫方面,同屬於Oracle公司的MySQL資料庫和Oracle資料庫,就是開源與閉源技術的兩大代表,兩者佔據了全球資料庫的佔有率的前兩名。MySQL資料庫主要是在中小企業或者是雲端計算供應商中廣泛採用,而Oracle資料庫則由於其穩定、高效能的特性,深受政府和銀行等客戶的信賴。

2. 跨平臺

跨平臺,意味著開發和部署的應用的成本的降低。

試想一下,當今作業系統三足鼎立,分別是Linux、macOS、Windows。如果開發者需要針對不同的作業系統平臺,而要開發不同的軟體,那麼開發成本勢必會非常高。而且每個作業系統平臺,都有不同的版本、分支,僅僅做不同的版本的適配都需要耗費極大的人力,更別提要針對不同的平臺開發軟體了。以此,跨平臺可以節省開發成本。

同理,由於MEAN架構開發的軟體是具有跨平臺的,無需擔心在部署應用過程中的相容性問題。開發者在本地開發環境所開發的軟體,理論上是可以通過CICD平臺直接一鍵部署到測試環境,甚至是生產環境中,因而可以節省部署的成本。

MEAN架構的跨平臺特性,使其非常適合構建Cloud Native應用,特別是在當今容器技術常常作為微服務的宿主,而MEAN架構的應用是支援Docker部署的。

有關Cloud Native方面的內容,可以參閱筆者所著的《Cloud Native 分散式架構原理與實踐》。

3. 全棧開發

類似與系統架構師,全棧開發者應該是比一般的軟體工程師具有更廣的知識面,是擁有全端軟體設計思想並掌握多種開發技能的複合型人才,能狗獨當一面。相比於Node.js工程師、Angular工程師偏重於某項技能而言,全棧開發意味著必須掌握整個架構的全部細節,要求全棧開發者能夠從零開始構建全套完整的企業級應用。

作為一名全棧開發者,在開發時往往會做如下風險的預測,並做好防禦。

  • 當前所開發的應用會部署到什麼樣的伺服器、網路環境中?
  • 服務哪裡可能會崩?為什麼會崩?
  • 是否應該適當的使用雲端儲存?
  • 程式有無具備資料冗餘?
  • 是否具備可用性?
  • 介面是否友好?
  • 效能是否能夠滿足當前的要求?
  • 哪些位置需要加日誌,方便日誌排查問題?

除上述的思考外,全棧開發者要能夠建立合理的、標準的關係模型,包括外來鍵、索引、檢視、查詢表等。

全棧開發者要熟悉非關係型資料儲存,並且知道它們相對關係型儲存優勢所在。

當然,人的精力畢竟有限,所以想要成為全棧開發者並非易事。所幸MEAN架構讓這一切成為了可能。MEAN架構以Node.js為整個技術棧的核心,而Node.js的程式語言是JavaScript,這意味著,開發者只需要掌握JavaScript這一種程式語言,即可以打通所有MEAN架構的技術,這不得不說是全棧開發者的福音。

4. 支援企業級應用

無論是Node.js、Angular還是MongoDB,這些技術在大型網際網路公司都被廣泛採用。無數應用也證明了MEAN架構是非常適合構建企業級應用的。企業級應用是指那些為商業組織、大型企業而建立並部署的解決方案及應用。這些大型企業級應用的結構複雜,涉及的外部資源眾多、事務密集、資料量大、使用者數多,有較強的安全性考慮。

MEAN架構用來開發企業級應用,不但具有強大的功能,還能夠滿足未來業務需求的變化,且易於升級和維護。

更多有關企業級應用開發方面的內容,可以參閱筆者所著的《Spring Boot 企業級應用開發實戰》《Angular企業級應用開發實戰》《Node.js企業級應用開發實戰》等。

5. 支援構建微服務

微服務(Microservices)架構風格就像是把小的服務開發成單一應用的形式,執行在其自己的程序中,並採用輕量級的機制進行通訊(一般是HTTP資源API)。這些服務都是圍繞業務能力來構建,通過全自動部署工具來實現獨立部署。這些服務,其可以使用不同的程式語言和不同的資料儲存技術,並保持最小化集中管理。

MEAN架構非常適合構建微服務:

  • Node.js本身提供了跨平臺的能力,可以執行在自己的程序中。
  • Express易於構建Web服務,並支援HTTP的通訊。
  • Node.js+MongoDB支援從前端到後端再到資料庫全棧開發能力。

開發人員可以輕易地通過MEAN架構來構建並快速啟動一個微服務應用。業界也提供了成熟的微服務解決方案來打造大型微服務架構系統,比如Tars.js、Seneca等。

讀者欲瞭解更多微服務方面的內容,可以參閱筆者所著的《Spring Cloud 微服務架構開發實戰》。

6. 業界主流

MEAN架構所涉及的技術都是業界主流,主要體現在以下幾方面。

  • MongoDB是在NoSQL資料庫中是排行第一的,而且使用者量還在遞增。
  • 只要知道JavaScript就必然知道Node.js,而JavaScript是在開源界最流行的開發語言。
  • 前端元件化開發是目前主流的開發方式,不管是Angular、React還是Vue.js都如此。相比較而言,Angular不管是其開發功能,還是程式設計思想,在所有前端框架中都是首屈一指的,特別適合大型企業級應用的開發。而且,從市場佔有率來看,Angular都是首屈一指的。
  • 在大型網際網路應用中,經常使用NGINX作為Web伺服器。NGINX也是目前使用最廣泛的代理伺服器。

如何學習MEAN架構?

MEAN架構知識點繁多,涉及面廣,不是一時可以掌握。關於MEAN架構,筆者撰寫了多本開源書籍,方便網友學習。包括:

這些開源書都免費的,可以隨時學習哦,附帶案例和原始碼。有任何問題都可以線上在相關的主頁留言,有問必答。

當然,筆者也出版了一些的專著,網友們可以按需選擇。包括:

上面的案例和原始碼也都是公開免費的哦。

參考引用