微前端:DDD和微服務對客戶端開發的好處 - thenewstack

banq發表於2019-08-09

首席架構師Luca Mezzalira在尋求將微服務的概念引入前端開發之後,看到它為快速發展的體育影片流媒體網站DAZN(發音為“Da-Zone”)帶來的好處。
微服務宗教還沒有在前端網路和移動開發人員中看到很多轉換 - 那些使用Vue,React,Angular或任何其他JavaScript框架提供流暢和動態使用者體驗的人,通常使用單頁應用(SPA)原則。
可伸縮性仍然是前端社群的一個問題,不僅是程式碼庫和依賴關係的增長,甚至是管理開發團隊的方式。

當Mezzalira在公司快速發展時簽約DAZN時,他需要一種方式來支援新的開發人員(該公司現在擁​​有數百家),同時仍然在越來越多的平臺(最後計數為30)之上創新和構建新服務。
今天,DAZN網站作為一組SPA執行,每個SPA由不同的開發團隊擁有。SPA可以透過伺服器以瀏覽器方式呈現,在伺服器端,JavaScript在持續整合階段進行編譯,並載入到Amazon S3儲存桶中。Lambda @ Edge為每個頁面執行微操作。這種方法允許候選測試版本,例如,德國Internet Explorer使用者獲得一個配置,而其他人獲得另一個配置。

分解SPA巨石:可以將部分應用程式用Vue.js編寫,然後部分使用React並部分使用Angular。

領域和子域
在領域驅動設計方面,Mezzalira將微前端定義為“業務子域的技術表示。”它們提供了明確約束的強大邊界,並避免與其他子域共享邏輯或程式碼。
領域是用軟體解決的問題空間目標,例如,DAZN的領域是流媒體影片。領域分為多個子域:發現和回放,客戶支援,身份驗證等。可以將軟體團隊分配到每個子域,建立新的組織結構,最小化跨子域之間的通訊。關鍵決策是在本地而非全域性情況下進行的。理想情況下,元件應該反映在服務本身的開發組織結構中。(banq注:康威定律)
當瀏覽器訪問DAZN站點時,會下載執行環境(暱稱為“Bootstrap”),該執行環境會啟動應用程式,設定I / O以及跨子域的路由和共享配置。Bootstrap收集有關使用者特定配置的資訊並獲取相應的元件。

微前端的幾種方法:
一種是使用基本的HTML iFrames元素,其中每個幀都有自己的子域。Spotify將此方法用於其基於Web的音樂流媒體服務。事件匯流排協調跨不同iFrame的事件。簡而言之,該公司正在使用Web技術作為前端,而後端邏輯則使用C ++編寫。

另一種方法是使用元件。線上預訂服務OpenTable使用OpenComponents技術棧走這條路。這裡,登錄檔包含構建應用程式所需的所有元件,每個團隊都可以在登錄檔中找到他們想要的元件。

第三種方法涉及伺服器端組合,其中Web應用程式的所有元素不是由瀏覽器而是由伺服器組裝的。時尚電子商務網站ZalandoProject Mosiac的幫助下使用這種方法,這是一個服務框架,庫,以及元件應如何協同工作的規範。一個元件,Tailor為每個呈現的頁面建立一個微小的執行環境層,組裝所需的每個HTML片段。使用Go編寫,Tailor的靈感來自Facebook的BigPipe

許多微前端JavaScript框架也可用於支援微前端的概念,包括Single-SPA,它將不同的SPA與微小的應用程式執行時聯絡在一起。Frint是另一種提供這種方法的軟體包。

微前端確實帶來了許多潛在的缺點:
一個是有效載荷大小的問題。每個元件都帶來了自己的技術,總會出現大量程式碼重複,減緩使用者體驗,並可能在元件需要更新時產生依賴性.

另一個問題是,與微服務本身一樣,是一種固有的複雜性。微前端中心將不可避免地導致需要管理更多資源 - 更多儲存庫,更多工具,更多構建/部署管道,更多伺服器,更多領域等。

微前端也將帶來他們自己的一套要求。配置和管理基礎設施需要更多的自動化。

微前端還可能有意想不到的好處:前端開發人員往往每年都會換工作,在很多情況下,他們只是為了嘗試新事物。​​​​​​​微前端可以提供一種在不離開公司的情況下試驗新技術和框架的方法。

 

相關文章