Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微前端学习笔记(1):微前端总体架构概述,从微服务发微

微前端学习笔记(1):微前端总体架构概述,从微服务发微

原创
作者头像
周陆军博客
发布于 2024-06-06 12:15:17
发布于 2024-06-06 12:15:17
4230
举报
文章被收录于专栏:前端博客前端博客

从最初的CS架构,如MFC Java Swing 等,到BS架构,JSP PHP,再到前端后端分离,前端从jquery  GWT-Ext  到 Handlebars ,再到angularJS/Vue/React,反观java 世界,学好 Spring MyBatis ,一路无忧,哎……

微服务

为了解决庞大的一整块后端服务带来的变更与扩展方面的限制,出现了微服务架构(Microservices)

微服务是面向服务架构(SOA)的一种变体,把应用程序设计成一系列松耦合的细粒度服务,并通过轻量级的通信协议组织起来 具体地,将应用构建成一组小型服务。这些服务都能够独立部署、独立扩展,每个服务都具有稳固的模块边界,甚至允许使用不同的编程语言来编写不同服务,也可以由不同的团队来管理

Micro frontends, An architectural style where independently deliverable frontend applications are composed into a greater whole.

微前端实际是一种思想,个人觉得并不是新的黑科技,其关键点还是解耦与分治。

微前端是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将单页面前端应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。各个前端应用还可以独立开发、独立部署。同时,它们也可以在共享组件的同时进行并行开发——这些组件可以通过 NPM 或者 Git Tag、Git Submodule 来管理。

如同微服务一样,微前端就是把系统拆解,解耦,然后组合。如同iphone的供应链管理。

可拆分式微前端
可拆分式微前端

微前端架构旨在解决单体应用在一个相对长的时间跨度下,由于参与的人员、团队的增多、变迁,从一个普通应用演变成一个巨石应用(Frontend Monolith)后,随之而来的应用不可维护的问题。这类问题在企业级 Web 应用中尤其常见。

微前端

微前端是一种类似于微服务的架构,是一种由独立交付的多个前端应用组成整体的架构风格,将前端应用分解成一些更小、更简单的能够独立开发、测试、部署的应用,而在用户看来仍然是内聚的单个产品。

Web 应用开发速度快、用完即走等特性,导致的一个最终结果就是「能用 Web 技术实现的应用,最终都会通过 Web 来实现」。在近几年涌现了一大批之前只能在传统 PC 软件中才能看到的优秀产品,例如:Photoshop、Web Office、Web IDE。尽管随着 Web 标准的演进,前端工程化也在不断演变,从模块化到组件化在到现在的工程化,但在面对跨团队大规模开发、跨团队企业级应用协作,现有的分治设计模式仍然显得有心无力

比如复杂的系统,由于整个系统涉及范围较广,在实际的研发过程中必然会以功能或业务需求垂直的切分成更小的子系统,切分成各种小系统后尽管由于分治的设计理念提升了开发者体验,但是一定程度上降低了用户体验。那能否以一种新的架构模式,既保开发者体验,又能提升用户体验呢。

微前端主要是用于解决:应用增量升级、多技术体系并存、构建大规模企业级 Web 应用而诞生的

目前微前端主要是采用应用分而治之 + 动态加载 + SPA 应用的模式来解决大规模应用带来的一系列问题。

为什么需要微前端?

  • 遗留系统迁移。解决遗留系统,才是人们采用微前端方案最重要的原因。
  • 聚合前端应用。微服务架构,可以解耦后端服务间依赖。而微前端,则关注于聚合前端应用。
  • 热闹驱动开发。新的技术,既然很热闹,那么就学吧。

微前端的实现,意味着对前端应用的拆分。拆分应用的目的,并不只是为了架构上好看,还为了提升开发效率。

微前端页面布局示范
微前端页面布局示范

微前端优势:

  • 应用自治。只需要遵循统一的接口规范或者框架,以便于系统集成到一起,相互之间是不存在依赖关系的。
  • 单一职责。每个前端应用可以只关注于自己所需要完成的功能。
  • 技术栈无关。主框架不限制接入应用的技术栈,子应用具备完全自主权。你可以使用 Angular 的同时,又可以使用 React 和 Vue。
  • 项目独立:独立开发、独立部署 子应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新

微前端缺点:

  • 应用的拆分基础依赖于基础设施的构建,一旦大量应用依赖于同一基础设施,那么维护变成了一个挑战。
  • 拆分的粒度越小,便意味着架构变得复杂、维护成本变高。
  • 技术栈一旦多样化,便意味着技术栈混乱。

前端微服务化

前端微服务化,是微服务架构在前端的实施,每个前端应用都是完全独立(技术栈、开发、部署、构建独立)、自主运行的,最后通过模块化的方式组合出完整的前端应用。其架构如下图所示:

前端微服务化
前端微服务化

采用这种方式意味着,一个页面上同时存在二个及以上的前端应用在运行。而路由分发式方案,则是一个页面只有唯一一个应用。

如何去拆分应用

技术方式

  • 路由分发式。通过路由将不同的业务分发到不同的、独立前端应用上。其通常可以通过 HTTP 服务器的反向代理来实现,又或者是应用框架自带的路由来解决。
  • 前端微服务化。在不同的框架之上设计通讯、加载机制,通过模块的方式组合出完整的前端应用,以在一个页面内加载对应的应用。
  • 微应用。通过软件工程的方式,在部署构建环境中,组合多个独立应用成一个单体应用。即在开发时,应用都是以单一、微小应用的形式存在,而在运行时,则通过构建系统合并这些应用,组合成一个新的应用。
  • 微件化。开发一个新的构建系统,将部分业务功能构建成一个独立的 chunk 代码(或称SDK),使用时只需要远程加载即可,如网站加载第三方广告与统计。
  • 前端容器。通过将 iFrame 作为容器,来容纳其它前端应用。
  • 应用组件化。借助于 Web Components 技术,来构建跨框架的前端应用。
  • SSR服务端渲染合并。利用SSR服务,渲染不同的HTML片段,然后拼凑成完整的HTML文件,直出。

业务拆分

  • 按照业务拆分。
  • 按照权限拆分。
  • 按照变更的频率拆分。
  • 按照组织结构拆分。利用康威定律来进一步拆分前端应用。
  • 跟随后端微服务划分。实践证明, DDD 与事件风暴是一种颇为有效的后端微前端拆分模式,对于前端来说,它也颇有有效——直接跟踪后端服务。

微前端的整体架构

微前端架构示例
微前端架构示例
微前端项目加载
微前端项目加载

微前端部署平台

目前较成熟的微前方案有 qiankun、micro-app、EMP 方案,但是它们与MF有着本质的不同,那就是对“微前端”的定义:

方案

微的定义

微前端的定义

Module Federation

模块

由多个互相独立的模块聚合而成的应用

qiankun/icestark等

应用

由多个互相独立的应用聚合而成的应用

定义上的不同决定了技术实现的不同:

方案

技术实现

Module Federation

模块本质上是JS代码片段,这种代码片段一般称为chunk。因此,模块的聚合,实际上是chunk的聚合。

qiankun/icestark等

应用本质上是HTML,而在SPA中,HTML又是main.js进行填充的。因此,应用的聚合,实际上是main.js的聚合。

技术实现的不同又决定了使用场景的不同:

方案

使用场景

Module Federation

是一种技术升级的创造性工作,有一定成本,目的是为了让系统具备更强大的能力。

qiankun/icestark等

是一种维持现状的保守性工作,成本极小,目的是为了让系统拥有更长久的生命力。

MF的实现其实并没有魔法,仅仅是异步chunk罢了。即便在MF中,不管是共享模块还是远端模块,其实还是使用的require.ensure去加载一些异步chunk罢了。只不过稍有不同的是,因为牵扯到依赖共享的逻辑,会有一个shared-scope的概念,用来实现依赖共享的相关逻辑。

这整个过程跟webpack5是没有绑定关系的,也就是说MF并非webpack5的专属功能,Rollup和webpack4都可以实现MF。更多的推荐查看:

参考文章:

微前端在美团外卖的实践 https://tech.meituan.com/2020/02/27/meituan-waimai-micro-frontends-practice.html

微前端如何落地? https://baijiahao.baidu.com/s?id=1638313846156942854&wfr=spider&for=pc

可能是你见过最完善的微前端解决方案 https://zhuanlan.zhihu.com/p/78362028

转载本站文章《微前端学习笔记(1):微前端总体架构概述,从微服务发微》, 请注明出处:https://www.zhoulujun.cn/html/webfront/engineer/Architecture/9029.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微前端架构:从单体到模块化的前端新革命
在信息技术(IT)的迅猛发展中,前端开发领域正迎来一场颠覆性的变革 —— 微前端架构(Micro - Frontends)。2025 年,随着 Web 应用的复杂性激增、团队协作需求的增长以及用户对无缝体验的期待,微前端从实验性概念迅速成长为前端开发的热门趋势。它将传统的单体前端拆分为独立、可复用的模块,让团队能够并行开发、独立部署,极大地提升了效率和灵活性。从电商平台的个性化页面到企业级应用的动态组装,微前端正在点燃前端开发的未来之火,稳居 CSDN 热榜的焦点。
DevKevin
2025/05/30
1680
微前端架构:从单体到模块化的前端新革命
【架构拾集】 微前端:微应用化
微应用化与微前端架构相当的类似,它们在开发时都是独立应用,在构建时又可以按照需求单独加载。如果以微前端的单独开发、单独部署、运行时聚合的基本思想来看,微应用化就是微前端的一种实践。只是使用微应用化意味着:我们只能使用唯一的一种前端框架。如果从框架不限的角度来定义,怕是离微前端有些远,不过大团队怕是不会想同时支持多个前端框架。
不知雨
2018/08/21
7240
2022年了你必须要学会搭建微前端项目及部署方式
一、微前端简介 微前端是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。各个前端应用可以独立运行、独立开发、独立部署。 微前端的好处 应用自治。只需要遵循统一的接口规范或者框架,以便于系统集成到一起,相互之间是不存在依赖关系的。 单一职责。每个前端应用可以只关注于自己所需要完成的功能。 技术栈无关。你可以使用 Angular 的同时,又可以使用 React 和 Vue。 微前端的缺点 应用的拆分基础依赖于基础设施的构建
前端进阶之旅
2022/01/06
2.4K0
2022年了你必须要学会搭建微前端项目及部署方式
你必须知道的11个微前端框架
微前端将前端整体分解为许多更小、更易管理的片段。每个团队可以端到端地拥有自己的功能,可以在自己的代码库中工作,可以独立发布版本,可以不断进行小的增量升级,还可以通过 API 与其他团队集成,以便他们可以一起组建和管理页面和应用程序。本文中,作者收集了 11 个最杰出的微前端构建工具,并提供了进一步学习的链接和视频。将单体后端分解成为微服务之后,后端开发流程已在效率和规模上取得了显著进步。然而,当今大多数前端应用程序架构仍然是单体式的,使得前端开发流程很难加速和扩展。
深度学习与Python
2020/11/05
2.6K0
Webpack5的Module Federation,号称改变JavaScript架构的游戏规则,是什么来头?
目前很多公司的业务都涉及到多个端的开发,有PC端/小程序/原生客户端等,而不同端都有对应的一个或几个独立的项目,而这些不同的项目之间都有一些可复用的业务逻辑,开发者往往需要在不同的项目中维护相同的逻辑。因此,为了节省维护成本,都会考虑跨项目模块复用,了解到 webpack5 的模块联邦特性,做了一下调研。
winty
2021/07/01
2.2K0
Webpack5的Module Federation,号称改变JavaScript架构的游戏规则,是什么来头?
微前端学习笔记(4):从微前端到微模块之EMP与hel-micro方案探索
Module Federation就是一个JavaScript远程模块加载架构,即:Module federation allows a JavaScript application to dynamically run code from another bundle/build, on both client and server。
周陆军博客
2024/06/06
5890
微前端概述
Tech 导读 本文由浅到深地对微前端进行了概括性介绍,读者可以了解到微前端的概念、微前端的特点与价值、微前端的实现方案、一个微前端框架应具备的功能,以及微前端的适用场景。读者可以多关注下本文提到的各个开源的优秀的微前端实现方案,通过对比及借鉴来实现一套适合自身业务的微前端方案。 01 微前端是什么 传统的分而治之的策略已经无法应对现代 Web 应用的复杂性,因此衍生出了微前端这样一种新的架构模式,与后端微服务相同,它同样是延续了分而治之的设计模式,不过却以全新的方法来实现。微前端是一种由独立交付的多个前
京东技术
2022/03/17
1.6K0
[14章附电子书]从0到1落地微前端架构, MicroApp实战招聘网站
能够应对不同技术栈、不同构建工具的巨石应用架构是前端高级工程师的衡量标准之一。本文为你提供一套大型中台项目构建、多技术栈项目融合的最佳落地方案,并结合主流微前端框架MicroApp,流行技术栈Vue3、React18、Nuxt2、Vue2、Vite、Webpack最终聚合实现多个子应用的大型招聘网站,助力你成长为独当一面、具备team leader潜质的前端高级工程师。
小企鹅204415010
2024/04/22
3370
架构的未来:微前端与微服务的融合
在当今快速发展的软件开发领域,架构设计一直是一个不断演化的领域。随着技术的不断发展,我们看到了微服务架构和微前端架构这两种新兴的架构风格的崭露头角。本文将探讨它们之间的关系,以及如何将它们融合在一起,为未来的应用程序架构提供更大的灵活性和可扩展性。
IT_陈寒
2023/12/13
5740
架构的未来:微前端与微服务的融合
一文读懂微前端架构
前端开发在程序猿中无疑是一个比较苦逼的存在,作为一个前端开发,你必须要掌握Javascript,HTML,CSS这三大基础。Javascript作为网络时代最为重要的开发语言,由于其设计上的限制,一直在演进,经历了ES3,ES5,ES6(ECMAScript 2015)... ... 而简单的CSS也无法完成你复杂的需求,你需要Less/Sass/Sytlus来增强你的CSS的功能。这些还远远只是一小部分,你还需要了解:
yuanyi928
2021/05/27
3.1K0
一文读懂微前端架构
前端资源共享方案对比-笔记:iframe/JS-SDK/微前端
前端页面资源如何分享,常见的有iframe,其次是js-sdk。这两类的在地图类工具经常用。微前端是最佳比较火的方式。本篇是他们的对比分析。
周陆军博客
2023/03/18
1.8K0
微前端在小米 CRM 系统的实践
大型组织的组织结构、软件架构在不断地发生变化。移动优先(Mobile First)、App中台(One App)、中台战略等,各种口号在不断的提出、修改和演进。同时,业务也在不断地发展,导致应用不断膨胀,进一步映射到软件架构上。
苏南
2020/12/16
1.1K0
微前端在小米 CRM 系统的实践
后端有 微服务,那前端呢?初探 微前端 的世界
最近笔者在工作上一直听到后端工程师们在谈论 Microservices(微服务) 的架构设计,听到的当下立马去查询才知道原来 Microservices 这麽潮,身为前端工程师的我当然也希望前端也可以有这麽新颖的架构,于是这篇文章就要来跟读者介绍 Micro Frontends(微前端)。
前端小智@大迁世界
2022/10/27
6360
后端有 微服务,那前端呢?初探 微前端 的世界
【微前端】1174- 有赞美业微前端的落地总结
想要回答这个问题直接给一个定义其实没那么难,但是没接触过的同学未必理解。所以需要先介绍一下背景,再解释会更容易明白。
pingan8787
2021/12/17
9370
【微前端】1174- 有赞美业微前端的落地总结
我们是怎么在项目中落地qiankun的
由于业务增长,团队拆分,我们需要将原有系统的一部分模块(Vue实现)迁移到另外一个系统(React)中。但两个系统技术栈不同,导致重构成本变大,但业务又希望在短期内看到效果,后面可以增量的重构。
GopalFeng
2022/08/01
1.5K0
我们是怎么在项目中落地qiankun的
微前端架构初探以及我的前端技术盘点
最近几年微前端一直是前端界的热门议题, 它类似于微服务架构, 主要面向于浏览器端,能将一个复杂而庞大的单体应用拆分为多个功能模块清晰且独立的子应用,且共同服于务同一个主应用。各个子应用可以独立运行、独立开发和独立部署。
徐小夕
2020/04/07
1.1K0
微前端架构初探以及我的前端技术盘点
理解微前端
「微前端」是一套用于「组织大型前端应用的指导规范」。是受后端「微服务」启发而发展而来。
前端柒八九
2022/08/25
4790
微前端:构建模块化、可维护的现代Web应用生态系统
微前端是一种现代Web应用架构模式,旨在解决大型前端应用的复杂性和维护性问题。它将前端应用拆分为小型、独立的模块,允许团队独立开发、部署和维护这些模块,从而提高开发效率、降低风险,并支持更灵活的应用扩展。本文将深入探讨微前端的概念、优势、实现方式、最佳实践以及如何构建一个强大的微前端架构。
海拥
2023/09/16
7130
微前端:构建模块化、可维护的现代Web应用生态系统
微前端究竟是什么?微前端核心技术揭秘!
导语 | 微前端是将Web应用由单一的单体应用转变为多个小型前端应用聚合为一的一种手段。本文从微前端的基础理论出发,对其核心技术进行阐述,最后结合项目进行简单的应用实践。 一、微前端背景 (一)什么是微前端 微前端提供了一种技术:可以将多个独立的Web应用聚合到一起,提供统一的访问入口。一个微前端应用给用户的感观就是一个完整的应用,但是在技术角度上是由一个个独立的应用组合通过某种方式组合而成的。 为了防止概念有点抽象,可以看一个具体的例子:上图是一个微前端的demo,主应用中有导航栏,footer组件以及
腾讯云开发者
2022/02/24
2.6K0
微前端史话:从CS/BS(JSP/PHP)/前后端分离/模板引擎/单页面应用
从最初的CS架构,如MFC Java Swing 等,到BS架构,JSP PHP,再到前端后端分离,前端从jquery  GWT-Ext  到 Handlebars ,再到angularJS/Vue/React,反观java 世界,学好 Spring MyBatis ,一路无忧,哎……
周陆军博客
2023/05/14
9320
推荐阅读
相关推荐
微前端架构:从单体到模块化的前端新革命
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档