當前位置:
首頁 > 最新 > Web 應用程序的架構體系變遷

Web 應用程序的架構體系變遷

在過去的幾年裡,Web應用程序開發環境,包括客戶端(前端)以及伺服器端(後端)在不斷地發生變化。在客戶端側,我們已經有了很多優秀且新的JavaScript(或其它腳本語言)框架;而在伺服器端,我們有新的架構類型,如單頁應用程序、微服務、以及無伺服器體系架構。

此文是面向全棧開發者的系列文章,特別是來自伺服器端的內容,關於Web應用程序設計和開發的趨勢和最佳實踐。

我們一起來看伺服器端架構已經發生的變化。

剛剛的過去:傳統的N層架構

在過去的十年里,互聯網已經成為提供內容和服務的首要平台。因此,每個企業都需要走到線上,提供在線服務。這種需求的激增,使得開發人員採用N層架構方法來構建和部署應用程序。

N 層體系結構由多個獨立的層組成;每一層都代表著系統的不同關注點。從層次順序來看,大多數系統通常分為三個主要層:客戶端,伺服器和持久存儲層。

客戶端層是最終用戶看到並與之交互的內容,通常指的是瘦客戶端(如Web瀏覽器)或胖客戶端(比如完整的基於Java Swing / .NET的應用程序) 。

即使電源關閉, 持久存儲層也會保留重要數據,並且通常是基本的關係資料庫系統(如MySQL,Oracle或SQLServer)。

伺服器層位於客戶端和存儲層之間,是應用程序所有實際操作發生的地方。 由於在這個層中發生了這麼多事情,所以伺服器層通常被進一步分成多個子層:網路,可用性和持久性。

伺服器Web層是應用程序在伺服器端的入口,負責處理用戶交互,將請求轉換為模型,渲染為動態用戶界面,會話管理和其它任務。 許多Java開發人員依靠諸如Spring MVC或Struts之類的框架來實現這一層。

伺服器業務層是業務邏輯作為組合和定義良好的API(應用程序編程介面 - 函數調用集合)實現的地方。 像EJB,.NET和Spring等技術用來實現這一層。

伺服器持久層負責通過對象關係映射(ORM)工具(如Hibernate,EclipseLink,Spring JDBC模板或其他ORM工具)抽取應用程序與存儲層特定關係資料庫的交互。

下圖描述了傳統的N層架構體系。

架構轉變#1:單頁應用的興起(SPA)

隨著Gmail和Facebook等產品的成功應用,開發者開啟了Ajax的新時代,整個網頁刷新的時代已經成為過去。

應用程序現在只需要根據需要請求必要的內容和信息片段(部分響應),以便用瘦客戶機創建高度互動式的用戶體驗。

以前只有使用胖客戶機才能實現這種體驗。 在客戶端執行此操作所需的額外邏輯並不是什麼新鮮事 - 它幾乎與以前在伺服器Web層中使用的相同。 我們基本上將Web層從伺服器移到客戶端(Web瀏覽器)。

然而,這種額外的客戶端邏輯帶來了新的挑戰和複雜性,例如必須處理大量的XML Http請求,並在比以往更深入的層次上理解Web瀏覽器的DOM對象(文檔對象模型)。

為了處理這個額外的複雜性,許多新的基於JavaScript的框架出現以處理低級細節和例行操作。 有些框架有View層,有些則沒有; 有些提供了簡單的功能,有些是端到端的解決方案。 雖然看起來每隔一天都會有一個新框架出現,但好的框架都利用了以前在伺服器Web層成功使用的最佳實踐和模式,包括組件,MVC(模型,視圖和控制器),注釋,依賴注入,服務和通過介面的協議等。

由於Web層已從伺服器端移至客戶端層,因此在伺服器層中引入了新的精簡層,以便將現有的伺服器業務層直接公開給新的客戶端Web層。 這通常是使用自定義SOAP或REST API完成的。這些API的創建以及Web層布局的體系結構轉變為支持離線支持等功能鋪平了道路。

但更重要的是,支持多種客戶端類型的能力,比如為iOS和Android應用程序以及桌面和移動Web界面提供支持的單一後端介面。

下圖描述了體系結構轉換:Web層從伺服器遷移到客戶端。

架構轉變#2:微服務的流行

將應用程序構建和部署為單個壓縮包的傳統方法是如何創建單個應用。而微服務是一種微型應用程序,只實現完整應用程序功能的一小部分。 微服務的目標是做一件事並做好這件事,並且可以使用幾乎任何技術棧來實現,不一定與其它服務棧相同。

有許多微服務增加了分散式管理,微服務間通信,身份驗證和授權,分散式日誌記錄和跟蹤,服務註冊和發現,反向代理和網關等方面的複雜性。有像Spring和Lagom這樣的框架可以通過大部分抽象為分散式。

雖然微服務是構建現代應用程序的新趨勢,但選擇設計和構建單一應用程序並不存在太大問題。 只要軟體可擴展性需求和需求仍在大規模變化,使用單一應用程序可以輕鬆地從單個代碼庫進行部署,管理與開發。

但是,當應用程序的功能增長、正常運行時間要求更快、可伸縮性需求非常高時,考慮重構或將應用程序設計為一組微型服務是明智的選擇。 微服務允許應用程序水平擴展並獨立更改,但這些好處不是免費的。 眾所周知,分散式應用程序難以監視,管理和測試。

下圖描述了微服務的流行。

架構轉變#3:無伺服器體系結構

無伺服器架構是我們最近常看到的流行辭彙。 我不想將它稱為Web應用程序架構的下一個迭代。現在更多的是一個有趣的想法。

這個概念很簡單:我們已經有了一個客戶端Web層 ,為什麼不重構後端,利用第三方託管服務來解決後端問題; 通過使用Lambda(或純函數),您的應用程序可以在第三方的雲基礎架構上執行任何所需的定製邏輯。 這與微服務的概念非常相似,但主要區別在於用戶並不擁有後端服務。不需要他來開發,管理運行的服務與硬體,從而使生活變得更簡單。

這種將所有跨領域關注(包括持久性數據)融入基礎架構的想法具有許多優點:

它將簡化分散式應用程序體系結構,但是還有一些問題需要解決,無伺服器體系結構成為主流還需要一些時間。 目前,無伺服器體系結構與幾年前的雲託管主機有些類似; 企業和客戶更關注云託管對數據隱私的威脅,還沒有看到它在基礎設施簡化方面的潛力。

下圖描述了無伺服器體系結構。

作者:Amit Rathi

編譯:高明

整理:21世紀技術官社區

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 21CTO 的精彩文章:

區塊鏈,一場正在進行的技術革命

TAG:21CTO |