微前端架构是一种应用于前端的设计类型,它允许我们将其划分为更小的、独立的、半独立的应用程序,并一起工作。这种前端概念在很大程度上受到主要用于后台的微服务的启发。这种架构的目标是将网络应用视为一个功能的组合,每个功能都由独立的团队来完成。每个团队都有一个特定的业务领域,开发是端到端的,从数据库到用户界面。然而,这个想法并不是什么新东西,这个概念出现在2016年左右,但在此之前,这种类型的架构已经被使用,它被称为 "垂直系统的前端集成 "或 "自足系统"。毋庸置疑,微型前端有能力更 "时髦"。
在下面的图片中,你可以看到不同的结构,其中前端始终是单体的:
在另一张图片中,你可以看到一个垂直结构,其中前端不是单体的:
在这个架构的背后,有一些关键的概念,这个概念的基础是,必须应用这些概念来考虑。这些将在下面解释。
技术独立。每个团队可以有不同的技术堆栈,而不相互依赖。
团队的分离。这一点与工作方法论更为相关。它允许你对每个团队有一个更具体的关注,并能够针对目标进行更具体和详细的管理。
团队名称。有一些资源必须在团队之间共享,每个团队必须有一个特定的命名,以避免资源混合。
弹性Web设计。每个团队将在系统的一个孤立的部分工作,这将有助于更快地解决问题并具有适应性。
使用原生浏览器事件。最好的选择是使用原生浏览器事件,允许团队之间的沟通,如果这还不够,我将尽量保持一个共同的API,尽可能的基本。
在微型前端的世界里,也有一些好的做法,有必要应用这些做法,以便使结果具有预期的质量。下面是一些在使用微前端架构时应该应用的最佳实践。
1. 组织流程
正如上一节所提到的,这种架构允许我们有不同的团队相互独立。正因为如此,我们必须考虑到每个团队都有不同的目标和挑战,这些目标和挑战必须在所有团队之间达成一致。为了实现所有这些目标,非常重要的一点是,所有各方和API之间的合同都是非常明确的,这样才能使沟通尽可能的流畅。这样,你的团队就能独立行动,实现其目标。同样重要的是,能够以模块化的方式交付。如果你的业务需求使你不能这样做,那就意味着这种架构不适合你的组织,因为你的组织是单体的。
2. 自动化
自动化在所有的系统中都很重要,但在微观前端,它是至关重要的,因为如果你没有良好的自动化,你会在某些功能上产生阻塞。测试自动化是非常重要的,因为它确保了微观前台与系统其他组件的兼容性,并且在与生产整合的时候,它可以顺利工作。
3. 不要过度使用微前端
如果你把你的系统分割得太多,很可能最后留下的片段并不能为你的目标增加价值。重要的是,系统被分割是有原因的,例如,部署的方式或每个部分遵循的策略。如果你过度使用这个架构,到头来,它是没有意义的。
4. 为你的微前端找到合适的尺寸
为你的微前端找到完美尺寸的方法类似于在微服务中使用的方法,因为如果它太大,你的应用程序将有太多的耦合,如果它们太小,你将有一个碎片化的应用程序。不幸的是,进行这种划分并没有什么黄金法则。然而,重要的是要记住,每个业务目的必须被隔离。最好的方法是提前决定你的划分,这样你就可以在开始之前计划所有的合同和所有部分之间的互动。
最后,这在很大程度上取决于你所面临的业务场景,以了解是否值得使用这种架构。这种架构对小团队或小项目是无效的。大多数情况下,它被应用于有不同分布的团队和大型基础设施的大型项目。出于这个原因,这个系统被最大的公司所使用,因为他们是能得到最大好处的公司。这些公司中有一些是宜家、DAZN、Spotify、Zalando等。 我希望你已经了解了这个架构,它无疑已经是大公司的存在,并且正在标志着工作的方式。
如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails
目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式
在Rails3.x应用程序中,我正在使用net::ssh并向远程pc运行一些命令。我想向用户的浏览器显示实时日志。比如,如果两个命令在net中运行::ssh执行即echo"Hello",echo"Bye"被传递然后"Hello"应该在执行后立即显示在浏览器中。这是代码我在rubyonrails应用程序中使用ssh连接和运行命令Net::SSH.start(@servers['local'],@machine_name,:password=>@machine_pwd,:timeout=>30)do|ssh|ssh.open_channeldo|channel|channel.requ
我尝试用Ruby设计一个基于Web的应用程序。我开发了一个简单的核心应用程序,在没有框架和数据库的情况下在六边形架构中实现DCI范例。核心六边形中有小六边形和网络,数据库,日志等适配器。每个六边形都在没有数据库和框架的情况下自行运行。在这种方法中,我如何提供与数据库模型和实体类的关系作为独立于数据库的关系。我想在将来将框架从Rails更改为Sinatra或数据库。事实上,我如何在这个核心Hexagon中实现完全隔离的rails和mongodb的数据库适配器或框架适配器。有什么想法吗? 最佳答案 ROM呢?(Ruby对象映射器)。还有
我正在为Jekyll编写一个转换器插件,需要访问一些页眉(YAML前端)属性。只有内容被传递给主要的转换器方法,似乎无法访问上下文。例子:moduleJekyllclassUpcaseConverter关于如何在转换器插件中访问页眉数据有什么想法吗? 最佳答案 基于Jekyll源代码,无法在转换器中检索YAML前端内容。根据您的情况,我看到了两种可行的解决方案。您的文件扩展名可以具有足够的描述性,以提供您本应包含在前言中的信息。看起来Converter插件的设计就是这么基本的。如果修改Jekyll是一个选项,您可以更改Convert
“架设一个亿级高并发系统,是多数程序员、架构师的工作目标。许多的技术从业人员甚至有时会降薪去寻找这样的机会。但并不是所有人都有机会主导,甚至参与这样一个系统。今天我们用12306火车票购票这样一个业务场景来做DDD领域建模。”开篇要实现软件设计、软件开发在一个统一的思想、统一的节奏下进行,就应该有一个轻量级的框架对开发过程与代码编写做一定的约束。虽然DDD是一个软件开发的方法,而不是具体的技术或框架,但拥有一个轻量级的框架仍然是必要的,为了开发一个支持DDD的框架,首先需要理解DDD的基本概念和核心的组件。一.什么是领域驱动设计(DDD)首先要知道DDD是一种开发理念,核心是维护一个反应领域概
一、简介之前在Vue项目中使用过element的上传组件,实现了点击上传+拖拽上传的两种上传功能。然后我就在想是否可以通过原生的html+js来实现文件的点击上传和拖拽上传,说干就干。首先是点击获取上传文件自然没的说,只需要借助input标签即可,但原生的点击上传按钮,实在是过于简陋,所以我的想法是通过一个div,模拟成上传按钮,然后监听其点击事件,通过input.click()去模拟点击真正的上传元素。然后是拖拽获取上传文件,这个稍有难度,我的想法是通过HTML5新增的drag拖放API+dataTransfer来实现文件的拖拽获取,但是由于是html5新增的,所以可能在某些低版本IE浏览器
我在当前项目中使用由Oracle数据库和memcached支持的RubyonRails。有一个非常常用的功能,它依赖于单个数据库View作为数据源,并且该数据源内部有其他数据库View和表。这是一个虚拟数据库View,能够从一个地方访问所有内容,而不是物化数据库View。大多数情况下,如果用户正在使用他们希望更新的功能,那么让数据保持最新很重要。从这个View获取数据时,我将安全表内部连接到View(安全表不是View本身的一部分),其中包含一些我们用来在更细粒度级别上控制数据访问的字段。例如,安全表有user_id,prop_1,prop_2列,其中prop_1,prop_2是数据库
为什么需要服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关,客户端只能在本地记录每个微服务的调用地址,当需要调用的微服务数量很多时,它需要了解每个服务的接口,这个工作量很大。有了网关之后,网关作为系统的唯一流量入口,封装内部系统的架构,所有请求都先经过网关,由网关将请求路由到合适的微服务。使用网关的好处1)简化客户端的工作。网关将微服务封装起来后,客户端只需同网关交互,而不必调用各个不同服务;(2)降低函数间的耦合度。一旦服务接口修改,只需修改网关的路由策略,不必修改每个调用该函数的客户端,从而减少了程序间的耦合性(3)解放开发