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

曾幾何時,業界流行使用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架構,筆者撰寫了多本開源書籍,方便網友學習。包括:

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

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

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

參考引用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章