微前端:DDD和微服務對客戶端開發的好處 - thenewstack
首席架構師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應用程式的所有元素不是由瀏覽器而是由伺服器組裝的。時尚電子商務網站Zalando在Project Mosiac的幫助下使用這種方法,這是一個服務框架,庫,以及元件應如何協同工作的規範。一個元件,Tailor為每個呈現的頁面建立一個微小的執行環境層,組裝所需的每個HTML片段。使用Go編寫,Tailor的靈感來自Facebook的BigPipe。
許多微前端JavaScript框架也可用於支援微前端的概念,包括Single-SPA,它將不同的SPA與微小的應用程式執行時聯絡在一起。Frint是另一種提供這種方法的軟體包。
微前端確實帶來了許多潛在的缺點:
一個是有效載荷大小的問題。每個元件都帶來了自己的技術,總會出現大量程式碼重複,減緩使用者體驗,並可能在元件需要更新時產生依賴性.
另一個問題是,與微服務本身一樣,是一種固有的複雜性。微前端中心將不可避免地導致需要管理更多資源 - 更多儲存庫,更多工具,更多構建/部署管道,更多伺服器,更多領域等。
微前端也將帶來他們自己的一套要求。配置和管理基礎設施需要更多的自動化。
微前端還可能有意想不到的好處:前端開發人員往往每年都會換工作,在很多情況下,他們只是為了嘗試新事物。微前端可以提供一種在不離開公司的情況下試驗新技術和框架的方法。
相關文章
- iOS客戶端開發與Web前端開發iOS客戶端Web前端
- TCP程式設計之服務端和客戶端的開發TCP程式設計服務端客戶端
- (23)go-micro微服務客戶端開發(使用負載均衡)Go微服務客戶端負載
- 微前端 – 將微服務理念延伸到前端開發中前端微服務
- 後端有微服務,那前端呢?初探 微前端 的世界後端微服務前端
- Java服務端和客戶端開發輔助工具UtilsJava服務端客戶端
- 微服務架構,客戶端如何catch服務端的異常?微服務架構客戶端服務端
- IE客戶客戶端程式開發的利器Bindows客戶端
- [TEAP早期試讀]真正的好處:客戶端批量處理客戶端
- 服務端渲染和客戶端渲染服務端客戶端
- 開發JAXR客戶端客戶端
- ZooKeeper服務發現客戶端客戶端
- 微服務對前端的衝擊:微前端終於落地了 - thecamjackson微服務前端
- 客戶端,服務端客戶端服務端
- 服務端,客戶端服務端客戶端
- 騰訊 客戶端開發 QT客戶端QT
- 對比分析--淺析SSR(服務端渲染)和SPA(客戶端渲染)服務端客戶端
- 【2】Windows C++ Redis服務端搭建與客戶端開發WindowsC++Redis服務端客戶端
- python建立tcp服務端和客戶端PythonTCP服務端客戶端
- 微服務架構如何實現客戶端負載均衡微服務架構客戶端負載
- 使用Apollo Server搭建GraphQL的服務端和客戶端Server服務端客戶端
- PostgreSQL客戶端處理事務功能詳解EGSQL客戶端
- MQTT伺服器搭建服務端和客戶端MQQT伺服器服務端客戶端
- Hybrid 開發:JsBridge - Web 和客戶端的橋JSWeb客戶端
- 微服務的未來? 更多抽象! - thenewstack微服務抽象
- Redis 客戶端 Jedis、lettuce 和 Redisson 對比Redis客戶端
- 【.NET6】gRPC服務端和客戶端開發案例,以及minimal API服務、gRPC服務和傳統webapi服務的訪問效率大對決RPC服務端客戶端APIWeb
- 使用 .NET MAUI 開發 ChatGPT 客戶端UIChatGPT客戶端
- OPC客戶端開發過程整理客戶端
- 開發WebApp之PC客戶端WebAPP客戶端
- 客戶端GUI程式開發漫談客戶端GUI
- ntp協議及客戶端開發協議客戶端
- BCB 客戶端 tuxedo 開發例項客戶端UX
- 《samba搭建win客戶端和linux客戶端的區別》Samba客戶端Linux
- netty服務端監聽客戶端連線加入和斷開事件Netty服務端客戶端事件
- Eureka高可用叢集服務端和客戶端配置服務端客戶端
- 微服務整合Spring Cloud Alibaba Seata (二) 客戶端連線微服務SpringCloud客戶端
- 對客戶又是供應商的客戶清賬處理