reactjs - 微前端和微服务
问题描述
我们有一组微服务,它们都执行特定的功能。为了配置、操作和监控这些服务,我们有一个 Web 应用程序。这目前仍然是一个巨石。
微服务部署在我们的客户处,但并非每个客户都需要它们。这意味着 Web 应用程序包含许多客户未使用的功能,必须隐藏在视图之外。
我们想要分解 Web 应用程序,以便我们可以只部署客户需要或拥有许可证的那些 UI 组件。
为此,我们一直在研究微前端。但是,到目前为止,我遇到的所有示例都没有涉及多租户和动态组件的主题。
我们的应用程序目前是用 React 编写的。我一直在研究 Next.js、System.JS、Piral 和 Single-SPA 作为我们解决方案的选项,但无法弄清楚这些工具是否可以帮助我们实现目标。
那么有没有人知道如何创建一个动态加载已部署微服务后端的 UI 组件的容器应用程序?
解决方案
微服务最强大的案例之一是通过强隔离来部署和更改它们,以便:
- 更容易动态地部署新的微服务。
- 更容易更改现有的没有副作用。
- 必要时更容易删除服务。
要在前端应用微服务,我认为看看这 3 点是否也适用对于验证我们是否从此类架构中受益很重要(因为它不像构建一个单体那么容易)。
我不认为“微前端”今天真的是一件事,但这里有一些关于如何实现它们的想法:
- 多前端 - 应用程序分为多个前端,看起来和感觉它们是同一个应用程序。为了确保它们看起来都一样,您需要某种所有前端都使用的库(或者更好 - 可以存储这些资源(例如 css)以允许动态更改样式的单个 CDN)。
- AWS 就是一个例子,每个“aws 服务”都有自己的前端(您可以通过查看地址找到它)。AWS 看起来像一个统一的应用程序,但被划分为单独维护的微前端。
- 主前端 - 为客户端提供单个应用程序,但此应用程序通过使用 iframe 嵌入微前端。再次让每个微前端看起来都一样,您需要某种库。这种方法比其他方法更适合某些应用程序,因为它具有单一前端的优势。然而,这是有代价的,因为 iframe 并不完美(https://www.ostraining.com/blog/webdesign/against-using-iframes/)。
- 我想您可以使用没有 iframe 的 next.js 实现主前端,但与方法 #1 相比,恐怕它相当复杂。
推荐阅读
- go - 如何获取没有关联类型的通道“句柄”
- css - 如何在 Angular 7 中更新 scss 文件变量形式的 ts 文件
- c++ - 如何在 C++ 中计算(负二项式)分布 PDF 和 CDF?
- uml - SUD 之外的电子邮件系统在接收来自它的电子邮件时是否被视为参与者?
- amazon-cloudwatch - 访问 JSON 数组中的值
- c++ - 如何在没有 C++ STL sort() 的情况下对结构的向量进行排序
- go - 中间件执行流程
- java - display.getSize(size) 使用 Galaxy S10 返回错误的屏幕尺寸
- javascript - 元素 UI $confirm 不是函数
- php - 如何修复 PHP 中的“simplexml_load_file”错误