前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【微前端架构】AWS 上的微前端架构

【微前端架构】AWS 上的微前端架构

作者头像
架构师研究会
发布于 2022-03-08 08:40:34
发布于 2022-03-08 08:40:34
2K00
代码可运行
举报
文章被收录于专栏:超级架构师超级架构师
运行总次数:0
代码可运行

微服务架构的特点是独立服务,这些服务专注于特定的业务功能,并由小型、自包含的团队维护。微服务架构经常用于在 AWS 上开发的 Web 应用程序,这是有充分理由的。它们提供了许多众所周知的好处,例如开发敏捷性、技术自由、有针对性的部署等等。尽管微服务很受欢迎,但许多前端应用程序仍然以单体风格构建。例如,他们有一个与所有后端微服务交互的大型代码库,并由一大群开发人员维护。

图 1. 带有单体前端的微服务后端

什么是微前端?

微前端架构将微服务开发原则引入前端应用程序。在微前端架构中,开发团队独立构建和部署“子”前端应用程序。这些应用程序由“父”前端应用程序组合而成,该前端应用程序充当容器来检索、显示和集成各种子应用程序。在此父/子模型中,用户与看似单个应用程序的交互。实际上,他们正在与由不同团队发布的多个独立应用程序进行交互。

图 2. 带有微前端的微服务后端

微前端的好处

与单体前端相比,微前端具有以下优势:

  • 独立工件:微服务开发的核心原则是工件可以独立部署,这对于微前端仍然适用。在微前端架构中,团队应该能够独立部署他们的前端应用程序,而对其他服务的影响最小。这些更改将反映在父应用程序中。
  • 自治团队:每个团队都是各自领域的专家。例如,计费服务团队成员具有专业知识。这包括与计费服务相关的数据模型、业务需求、API 调用和用户交互。与规模更大、专业性较低的团队相比,这些知识使团队能够更快地开发计费前端。
  • 灵活的技术选择:自治允许每个团队做出独立于其他团队的技术选择。例如,计费服务团队可以使用 Vue.js 开发他们的微前端,而配置文件服务团队可以使用 Angular 开发他们的前端。
  • 可扩展的开发:微前端开发团队更小,能够在不干扰其他团队的情况下进行操作。这使我们能够通过组建新团队以通过子应用程序提供额外的前端功能来快速扩展开发。
  • 更容易维护:保持前端存储库小而专业,可以更容易地理解它们,这简化了长期维护和测试。例如,如果您想更改单体前端的交互,则必须在大型代码库的上下文中隔离功能的位置和依赖关系。在处理与微前端相关的较小代码库时,这种类型的操作会大大简化。

微前端挑战

相反,微前端提出了以下挑战:

  • 父/子集成:微前端引入了确保父应用程序以与单体应用程序相同的一致性和性能显示子应用程序的任务。这一点将在下一节中进一步讨论。
  • 运营开销:微前端应用程序不是管理单个前端应用程序,而是涉及为所有团队创建和管理单独的基础架构。
  • 一致的用户体验:为了保持一致的用户体验,子应用程序必须使用相同的 UI 组件、CSS 库、交互、错误处理等。对于处于开发生命周期不同阶段的子应用程序,保持用户体验的一致性可能很困难。

构建微前端

微前端架构模式最困难的挑战是将子应用程序与父应用程序集成。优先考虑用户体验对于任何前端应用程序都至关重要。在微前端的上下文中,这意味着确保用户可以在父应用程序中从一个子应用程序无缝导航到另一个子应用程序。我们希望避免破坏性行为,例如页面刷新或多次登录。在最基本的定义中,父/子集成涉及父应用程序在加载父应用程序时动态检索和呈现子应用程序。渲染子应用程序取决于子应用程序的构建方式,这可以通过多种方式完成。两种最流行的父/子集成方法是:

将每个子应用程序构建为 Web 组件。 将每个子应用程序作为独立模块导入。这些模块要么声明一个函数来呈现自身,要么由父应用程序动态导入(例如使用模块联合)。 将子应用注册为 Web 组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<html>
    <head>
        <script src="https://shipping.example.com/shipping-service.js"></script>
        <script src="https://profile.example.com/profile-service.js"></script>
        <script src="https://billing.example.com/billing-service.js"></script>
        <title>Parent Application</title>
    </head>
    <body>
        <shipping-service />
        <profile-service />
        <billing-service />
    </body>
</html>

将子应用注册为模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<html>
    <head>
        <script src="https://shipping.example.com/shipping-service.js"></script>
        <script src="https://profile.example.com/profile-service.js"></script>
        <script src="https://billing.example.com/billing-service.js"></script>
     <title>Parent Application</title>
    </head>
    <body>
    </body>
    <script>
        // Load and render the child applications form their JS bundles.
    </script>
</html>

下图显示了一个基于 AWS 构建的示例微前端架构。

Figure 3. Micro-frontend architecture on AWS

在此示例中,每个服务团队都在运行一个单独的、相同的堆栈来构建他们的应用程序。他们使用 AWS 开发人员工具并使用 Amazon CloudFront 将应用程序部署到 Amazon Simple Storage Service (S3)。CI/CD 管道使用共享组件,例如 CSS 库、API 包装器或存储在 AWS CodeArtifact 中的自定义模块。这有助于提高父应用程序和子应用程序之间的一致性。

当您检索父应用程序时,它应该会提示您登录身份提供程序并检索 JWT。在此示例中,身份提供商是 Amazon Cognito 用户池。成功登录后,父应用程序从 CloudFront 检索子应用程序并将它们呈现在父应用程序中。或者,当您导航到特定路线时,父应用程序可以选择按需呈现子应用程序。子应用程序不应要求您再次登录到 Amazon Cognito 用户池。应将它们配置为使用父应用程序获取的 JWT,或者从 Amazon Cognito 静默检索新的 JWT。

结论

微前端架构为前端应用程序引入了微服务开发的许多熟悉的好处。微前端架构还允许您管理小型独立组件,从而简化构建复杂前端应用程序的过程。

本文

https://jiagoushi.pro/micro-frontend-architectures-aws

讨论:知识星球【首席架构师圈】或者加微信小号【cea_csa_cto】或者加QQ群【792862318】

公众号

【jiagoushipro】【超级架构师】精彩图文详解架构方法论,架构实践,技术原理,技术趋势。我们在等你,赶快扫描关注吧。

微信小号

【cea_csa_cto】50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

QQ群

【792862318】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。加QQ群,有珍贵的报告和干货资料分享。

视频号

【超级架构师】1分钟快速了解架构相关的基本概念,模型,方法,经验。每天1分钟,架构心中熟。

知识星球

向大咖提问,近距离接触,或者获得私密资料分享。

喜马拉雅

路上或者车上了解最新黑科技资讯,架构心得。

【智能时刻,架构君和你聊黑科技】

知识星球

认识更多朋友,职场和技术闲聊。

知识星球【职场和技术】

微博

【智能时刻】

智能时刻

哔哩哔哩

【超级架构师】

抖音

【cea_cio】超级架构师

快手

【cea_cio_cto】超级架构师

小红书

【cea_csa_cto】超级架构师

谢谢大家关注,转发,点赞和点在看。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 首席架构师智库 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JAVA面试50讲之4:int和Integer的区别
对于第4条的原因: java在编译Integer i = 100 ;时,会翻译成为Integer i = Integer.valueOf(100);,而java API中对Integer类型的valueOf的定义如下:
用户1205080
2019/01/02
1K0
2020Java核心面试题--基础题
答:byte、short、 int 、long、 float double、 boolean、 char
宇宙之一粟
2020/10/26
3370
int 和 integer :装箱和拆箱的过程,会用到什么方法,你觉得这个会对性能有影响吗,原因是什么(百度一面)
今天继续来讲面试,已经出了很多java一面真题系列文章了,之后也会整理成一个系列,欢迎持续关注哦。
用户7656790
2020/09/01
2.7K0
夯实Java基础系列8:深入理解Java内部类及其实现原理
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
Java技术江湖
2019/09/28
3.5K0
Java实用类(二)-包装类
​ Java中的基本类型功能简单,不具备对象的特性,为了使基本类型具备对象的特性,所以出现了包装类,就可以像操作对象一样操作基本类型数据;包装类不是为了取代基本数据类型,而是在数据类型需要使用对象表示的时候,才使用包装类;
化羽羽
2022/10/28
3850
Java基础:128陷阱之Integer缓存源码研究
在Java 5中,对于Integer的操作引入了一个新功能来节省内存和提高性能。整型对象通过使用相同的对象引用实现了缓存和重用。
鲲志说
2025/04/07
580
Java基础:128陷阱之Integer缓存源码研究
走进 JDK 之 谈谈基本类型
除了 char 和 double,基本涵盖了 Java 的所有基本类型。今天就来总结一下基本类型的相关知识。
路遥TM
2021/08/31
3880
必考:从字节码层面看自动拆装箱的原理
上一篇文章中,我们分享包装类的缓存机制时,提到了自动装箱的问题。今天我们就重点分享自动装箱的原理,及其相关的知识点(笔试必考)!
程序视点
2023/11/16
1620
必考:从字节码层面看自动拆装箱的原理
傻傻分不清?Integer、new Integer() 和 int 的面试题
1、Integer 是 int 的包装类,int 则是 java 的一种基本数据类型 2、Integer 变量必须实例化后才能使用,而int变量不需要 3、Integer 实际是对象的引用,当new一个 Integer时,实际上是生成一个指针指向此对象;而 int 则是直接存储数据值 4、Integer的默认值是null,int的默认值是0
Java技术栈
2019/10/22
3810
深度解析Java中的Integer类原理及方法实现
在Java编程中,我们经常使用Integer类来处理整数值。接下来,让我们通过结合Integer类的源码、设计思想以及方法和接口的设计,详细探讨其底层原理。
GeekLiHua
2025/01/21
980
你真的理解Java中的包装类吗?还有不少人踩坑了
   基础数据类型不是在计算机中运算更快吗?为啥还要有包装类?    因为想要对基本类型数据进行更多的操作,最方便的方式就是将其封装成对象。为啥呢?因为在对象描述中就可以定义更多的属性和行为对该基本数据类型进行操作。基本数据类型的包装类是为了解决基本数据类型有些操作不方便带来的问题。
程序员云帆哥
2022/05/12
5030
Java基础系列1:深入理解Java数据类型
当初学习计算机的时候,教科书中对程序的定义是:程序=数据结构+算法,Java基础系列第一篇就聊聊Java中的数据类型。
王金龙
2020/02/17
5560
JAVA自动拆装箱、equals与==比较
自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。
chenchenchen
2023/01/30
4210
一篇文章讲清楚Java基本数据类型,常量池,以及自动拆装箱的秘密
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
Java技术江湖
2019/09/24
6.3K0
一篇文章讲清楚Java基本数据类型,常量池,以及自动拆装箱的秘密
Java基础知识:数据类型
new Integer(123) 与 Integer.valueOf(123) 的区别在于:
DioxideCN
2022/08/05
2270
聊聊面试-int和Integer的区别
最近面试了很多候选人,发现很多人都不太重视基础,甚至连工作十几年,项目经验十几页的老程序员,框架学了一大堆,但是很多 Java 相关的基础知识却很多都答不上来。还有很多人会回答,只知道要用,但是从来不会去看看它具体是怎么实现的。
phoenix.xiao
2020/08/05
4650
【Java面试题系列】:Java基础知识面试题,看这一篇就够了
参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后,一般都会让先做一份笔试题,然后公司会根据笔试题的回答结果,确定要不要继续此次面试,如果答的不好,有些公司可能会直接说“技术经理或者总监在忙,你先回去等通知吧”,有些公司可能会继续面试,了解下你的项目经验等情况。
用户5546570
2019/06/06
4890
Java的基本数据类型
1. Java 的基本数据类型都有哪些各占几个字节 2. short s1 = 1;s1 =s1 + 1;有错吗?short s1 = 1;s1 += 1有错吗; 前者不正确,后者正确。对于s
海拥
2021/08/23
3290
【优雅的避坑】不要轻易使用==比较两个Integer的值
自然,我们都知道会打印 j = 667,曾经我很好奇,i是Integer对象,属于包装类型,而j是int基础数据类型,他俩怎么会在一起运算呢?直到我扒开Integer的外表,直接看到了他的内涵...
行百里er
2020/12/02
9050
【优雅的避坑】不要轻易使用==比较两个Integer的值
Integer、new Integer() 和 int 比较的面试题
https://www.cnblogs.com/cxxjohnson/p/10504840.html
java思维导图
2019/08/23
8010
推荐阅读
相关推荐
JAVA面试50讲之4:int和Integer的区别
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验