關于微前端技術選型與說明

關于微前端技術選型與說明

目前各產(chǎn)品均為單個獨立產(chǎn)品温眉,但后期若聚合起來成為矩陣糯俗,那如果通過單純的柔和代碼,將會打造一個巨石項目壤巷,維護成本極高媳搪,且后期迭代時會局限在單一框架內铭段,擴展性也會很差,基于以上幾點秦爆,我們基本確定后期需要使用微前端去重構項目

一序愚、為什么我們需要微前端

  1. 系統(tǒng)本身是需要集成和被集成的 一般有兩種情況:

    • 舊的系統(tǒng)不能下,新的需求還在來等限。
      沒有一家商業(yè)公司會同意工程師以單純的技術升級的理由爸吮,直接下線一個有著一定用戶的存量系統(tǒng)的芬膝。而你大概又不能簡單通過 iframe 這種「靠譜的」手段完成新功能的接入,因為產(chǎn)品說需要「彈個框彈到中間」
    • 你的系統(tǒng)需要有一套支持動態(tài)插拔的機制拗胜。
      這個機制可以是一套精心設計的插件體系蔗候,但一旦出現(xiàn)接入應用或被接入應用年代夠久遠、改造成本過高的場景埂软,可能后面還是會過渡到各種微前端的玩法锈遥。
  2. 系統(tǒng)中的部件具備足夠清晰的服務邊界

    • 通過微前端手段劃分服務邊界,將復雜度隔離在不同的系統(tǒng)單元中勘畔,從而避免因熵增速度不一致帶來的代碼腐化的傳染所灸,以及研發(fā)節(jié)奏差異帶來的工程協(xié)同上的問題。

二炫七、 什么是微前端

微前端是一種多個團隊通過獨立發(fā)布功能的方式來共同構建現(xiàn)代化 web 應用的技術手段及方法策略爬立。

微前端架構具備以下幾個核心價值:

  • 技術棧無關
    主框架不限制接入應用的技術棧,微應用具備完全自主權

  • 獨立開發(fā)万哪、獨立部署
    微應用倉庫獨立侠驯,前后端可獨立開發(fā),部署完成后主框架自動完成同步更新

  • 增量升級

    在面對各種復雜場景時奕巍,我們通常很難對一個已經(jīng)存在的系統(tǒng)做全量的技術棧升級或重構吟策,而微前端是一種非常好的實施漸進式重構的手段和策略

  • 獨立運行時
    每個微應用之間狀態(tài)隔離,運行時狀態(tài)不共享

三的止、微前端技術選型

技術方案 描述 技術棧 優(yōu)點 缺點 單獨構建 / 部署 構建速度 SPA 體驗 項目侵入性 學習成本 通信難度
iframe 每個微應用獨立開發(fā)部署檩坚,通過 iframe的方式將這些應用嵌入到父應用系統(tǒng)中 無限制 1. 技術棧無關,子應用獨立構建部署
2. 實現(xiàn)簡單诅福,子應用之間自帶沙箱匾委,天然隔離,互不影響
體驗差氓润、路由無法記憶赂乐、頁面適配困難、無法監(jiān)控咖气、依賴無法復用沪猴,兼容性等都具有局限性,資源開銷巨大采章,通信困難 支持 正常 不支持
Nginx 路由轉發(fā) 通過Nginx配置實現(xiàn)不同路徑映射到不同應用 無限制 簡單、快速壶辜、易配置 在切換應用時觸發(fā)發(fā)頁面刷新悯舟,通信不易 支持 正常 不支持 正常
Npm 集成 將微應用抽離成包的方式,發(fā)布Npm中砸民,由父應用依賴的方式使用抵怎,構建時候集成進項目中 無限制 1. 編譯階段的應用奋救,在項目運行階段無需加載,體驗流暢
2.開發(fā)與接入成本低反惕,容易理解
1. 影響主應用編譯速度和打包后的體積
2. 不支持動態(tài)下發(fā)尝艘,npm包更新后,需要重新更新包姿染,主應用需要重新發(fā)布部署
不支持 支持 正常
通用中心路由基座式 微應用可以使用不同技術棧背亥;微應用之間完全獨立,互不依賴悬赏。統(tǒng)一由基座工程進行管理狡汉,按照DOM節(jié)點的注冊、掛載闽颇、卸載來完成盾戴。 無限制 子應用獨立構建,用戶體驗好兵多,可控性強尖啡,適應快速迭代 學習與實現(xiàn)的成本比較高,需要額外處理依賴復用 支持 正常 支持 正常
特定中心路由基座式 微應用業(yè)務線之間使用相同技術棧剩膘;基座工程和微應用可以單獨開發(fā)單獨部署衅斩;微應用有能力復用基座工程的公共基建。 統(tǒng)一技術棧 子應用獨立構建援雇,用戶體驗好矛渴,可控性強,適應快速迭代 學習與實現(xiàn)的成本比較高惫搏,需要額外處理依賴復用 支持 正常 支持 正常
webpack5 模塊聯(lián)邦 webpack5 模塊聯(lián)邦 去中心模式具温、脫離基座模式。每個應用是單獨部署在各自的服務器筐赔,每個應用都可以引用其他應用铣猩,也能被其他應用所引用 統(tǒng)一技術棧 基于webpack5,無需引入新框架茴丰,學習成本低达皿,像引入第三方庫一樣方便,各個應用的資源都可以相互共享應用間松耦合贿肩,各應用平行的關系 需要升級Webpack5技術棧必須保持一致改造舊項目難度大 支持 正常 支持 正常

市面框架對比:

  • magic-microservices 一款基于 Web Components 的輕量級的微前端工廠函數(shù)峦椰。
  • icestark 阿里出品,是一個面向大型系統(tǒng)的微前端解決方案
  • single-spa 是一個將多個單頁面應用聚合為一個整體應用的JavaScript 微前端框架
  • qiankun 螞蟻金服出品汰规,基于 single-spa 在 single-spa 的基礎上封裝
  • EMP YY出品汤功,基于Webpack5 Module Federation 除了具備微前端的能力外,還實現(xiàn)了跨應用狀態(tài)共享溜哮、跨框架組件調用的能力
  • MicroApp 京東出品滔金,一款基于WebComponent的思想色解,輕量、高效餐茵、功能強大的微前端框架

綜合以上方案對比之后科阎,我們確定采用了 qiankun 特定中心路由基座式的開發(fā)方案,原因如下:

  • 保證技術棧統(tǒng)一 Vue忿族、微應用之間完全獨立锣笨,互不影響。
  • 友好的“微前端方案“肠阱,與技術棧無關接入簡單票唆、像iframe一樣簡單
  • 改造成本低,對現(xiàn)有工程侵入度屹徘、業(yè)務線遷移成本也較低走趋。
  • 和原有開發(fā)模式基本沒有不同,開發(fā)人員學習成本較低噪伊。
  • qiankun 的微前端有 3 年使用場景以及 Issue 問題解決積累簿煌,社區(qū)也比較活躍,在踩坑的路上更容易自救~

四鉴吹、我們需要明確的

微前端并不是萬能的”解藥“姨伟,沒有正確治理,所有的 codebase 的歸宿都是”屎山”

1豆励、微前端的運行時容器

  • qiankun 所幫我們解決的這一塊實際上是微前端的運行時容器夺荒,這是整個微前端工程化里面其中一個環(huán)節(jié)
  • 從這個角度來講 qiankun 不算是一個完整的微前端解決方案,而是微前端運行時容器的一個完整解決方案良蒸,當我們用了 qiankun 之后技扼,我們幾乎能解決所有的微前端運行時容器的問題,但是更多的一些涉及工程和平臺的問題嫩痰,則需要我們去思考與處理剿吻。
  • 我們的版本管控、配置下發(fā)串纺、監(jiān)控發(fā)布丽旅,安全檢測、等等這些怎么做纺棺,都不是 qiankun 作為一個庫所能解答的

2榄笙、遷移成本

對于后期將Lims、IOT等平臺接入時祷蝌,我們很難做到零成本的接入办斑,須要在開發(fā)的時候要預留足夠的踩坑,魔改代碼的時間。并且會因為前期項目不規(guī)范編碼乡翅,所產(chǎn)生的各種奇怪的兼容性問題。

3罪郊、 技術棧的選擇

  • 微前端的核心不是多技術共存蠕蚜,而是分解復雜度,提升協(xié)作效率悔橄,支持靈活擴展靶累,能把“一堆復雜的事情”變成“簡單的一件事情”,但是也不是無腦使用的癣疟,每多一個技術棧都會增加:維護成本挣柬,兼容成本,資源開銷成本睛挚,這些都會無形的拖累生產(chǎn)力邪蛔。
  • 基座應用與微應用之間,盡量使用相同的技術棧扎狱,相同的技術棽嗟剑可以實現(xiàn)公共依賴庫、UI庫等抽離淤击,減少資源開銷匠抗,提升加載速度,最重要的是:“減少沖突的最好方式就是統(tǒng)一”污抬,通過約束技術椆常可以盡可能的減少項目之間的沖突,減少工作量與維護成本印机。(目前我們產(chǎn)品都是使用Vue所以可以很好的去避免沖突矢腻,但由于Lims、IOT耳贬、VMC等系統(tǒng)的架構與UI設計風格差距較大踏堡,后期在接入時,如何去平衡各項目之間兼容問題是一個大問題)

4咒劲、標準化才能提升生產(chǎn)力

  • 混亂的項目會拖累生產(chǎn)效率顷蟆,同時混亂的微前端也會加劇內耗,所以只有標準化才能提升生產(chǎn)力腐魂。
  • 解決微前端的接入問題是最簡單的帐偎,但是微前端接入后的:工程化,應用監(jiān)控蛔屹,應用規(guī)范削樊,應用管理才是微前端中困難的地方,如果我們只是想簡單的嵌入一個應用,推薦使用Iframe解決(目前IOT項目嵌入安全即是此方案)

5漫贞、qiankun 不支持 Vite

6甸箱、qiankun并不難

  • 對于qiankun的學習不用很擔心,因為 qiankun 真的很簡單滿打滿算 10個API 都沒有迅脐,但是難在創(chuàng)建基座項目與接入老項目時對各子應用的魔改
  • [Link qiankun 官網(wǎng)文檔]

五芍殖、微應用拆分規(guī)則

微應用的拆與合思考:拆的是系統(tǒng)復雜度,合的是系統(tǒng)復用度 核心原則:高內聚谴蔑,低耦合

  1. “盡量減少彼此的通信和依賴“豌骏,微前端的通信交互、鏈接跳轉等操作所帶來等成本其實是很大的隐锭,所以在拆分的時候盡量“完全獨立窃躲,互不依賴”

  2. 微應用的拆分的時候切忌“盲目細致拆分”,過度拆分會導致 “做的很牛逼钦睡,但是沒有用的困局”蒂窒,微應用的拆分并不是一步到位的,我們要根據(jù)實際情況逐步拆分赎婚。如果一開始不知道應該劃分多細刘绣,可以先粗粒度劃分,然后隨著需求的發(fā)展挣输,逐步拆分纬凤。

    • 如:現(xiàn)在有一個售后管理系統(tǒng),我們按業(yè)務線拆分為:客服管理撩嚼,庫存管理停士,物流管理,未來客服管理需求功能持續(xù)龐大再拆解為:智能客服完丽、電話客服恋技、在線客服。而這些客服逻族,又可以嵌入LIMS等相關項目使用蜻底。
  3. 在拆分的時候我們應該盡量考慮未來場景:漸變式技術棧遷移,前端應用聚合聘鳞、多系統(tǒng)業(yè)務復用薄辅,如何做業(yè)務解耦和代碼復用。

  4. 應用之間應該盡量解耦抠璃,子應用的事情就應該由子應用來做站楚。

    • 如:子應用的一些標識,如:路由前綴搏嗡,應用名稱窿春,根節(jié)點容器名稱拉一,依賴庫的使用
    • 需要明確什么是子應用應該維護的,什么是父應用應該維護的旧乞,如果什么資源都一股腦的使用父應用下發(fā)蔚润,則會導致應用之間耦合嚴重。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末良蛮,一起剝皮案震驚了整個濱河市抽碌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌决瞳,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件左权,死亡現(xiàn)場離奇詭異皮胡,居然都是意外死亡,警方通過查閱死者的電腦和手機赏迟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門屡贺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锌杀,你說我怎么就攤上這事甩栈。” “怎么了糕再?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵量没,是天一觀的道長。 經(jīng)常有香客問我突想,道長殴蹄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任猾担,我火速辦了婚禮袭灯,結果婚禮上,老公的妹妹穿的比我還像新娘绑嘹。我一直安慰自己稽荧,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布工腋。 她就那樣靜靜地躺著姨丈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夷蚊。 梳的紋絲不亂的頭發(fā)上构挤,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音惕鼓,去河邊找鬼筋现。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的矾飞。 我是一名探鬼主播一膨,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洒沦!你這毒婦竟也來了豹绪?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤申眼,失蹤者是張志新(化名)和其女友劉穎瞒津,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體括尸,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡巷蚪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了濒翻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屁柏。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖有送,靈堂內的尸體忽然破棺而出淌喻,到底是詐尸還是另有隱情,我是刑警寧澤雀摘,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布裸删,位于F島的核電站,受9級特大地震影響届宠,放射性物質發(fā)生泄漏烁落。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一豌注、第九天 我趴在偏房一處隱蔽的房頂上張望伤塌。 院中可真熱鬧,春花似錦轧铁、人聲如沸每聪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽药薯。三九已至,卻和暖如春救斑,著一層夾襖步出監(jiān)牢的瞬間童本,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工脸候, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留穷娱,地道東北人绑蔫。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像泵额,于是被迫代替她去往敵國和親配深。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容