Microservices是什么?优点,缺点,以及如何建立它们
MicroService架构是软件开发中最讨论的主题之一。betwayapp下载安装在本文中,您会发现MicroServices是什么。
Microservices是什么?
微服务系统是许多大型软件项目使用的架构风格。目的是提高效率,可靠性,性能和可扩展性。让我们用传统的方法比较微服务,通常称为单片架构。
上次更新了2021年8月
使用Kubernetes部署微服务体系结构。您将部署,管理和监控Live Kubernetes集群。|由Richard Chesterwood,虚拟对程序员,Prageeth Warnak
探索课程整体架构
单片架构是人们作为一个单位开发整个系统的地方。这是易于管理的,是小项目的有效策略。单片架构的好处包括:它们是:
- 易于开发:您可以在集成开发环境(IDE)甚至文本编辑器中打开整个项目。betwayapp下载安装
- 易于运行:您可以在IDE中击中运行按钮并开始测试。
- 易于部署:您可以通过上传单个文件来部署整个系统 - 例如,Java应用程序中的WAR文件。
但所有这些优势仅适用于小型系统。
随着系统的增长超过一定的规模,出现困难。系统的增长越多,困难越大。这可能导致所谓的“单片地狱!”
问题可能包括以下方面:
部署变得更加困难和风险
假设您发现了一个重大错误。你得马上修好它!所以,你修复了这个错误。现在,整个系统需要重新部署!但现在,还有其他功能正在开发中。betwayapp下载安装因此,风险在于,当你修复一个bug时,你会引入许多其他的bug。
大爆炸替代方案
另一种选择是项目将部署限制为“大爆炸”版本。这意味着设定了提交所有更改和新功能的最后期限。只有在测试了整个系统之后,系统才会被部署。这似乎是一个更安全的选择,但最大的问题是您不能再发布紧急修复。随着项目的发展,截止日期也会越来越长。如果您的项目每年发行一次,那么您就会陷入一个巨大的地狱!
它变得太大,太复杂了。
单个开发者可能无法理解这个庞然大物。加强模块之间的边界太困难了。随着时间的推移,模块会陷入大量依赖关系中。你是否曾致力于一个整体,当你改变了一个模块时,却发现你破坏了另一个模块?如果你认为这些模块是不相关的,那么你就是在大泥球!
这个庞然大物变得难以扩大规模。
随着部署单元的增长,唯一的选择是增加目标硬件的大小。在云环境中,这意味着升级到更大的虚拟机。这被称为垂直扩展,效率非常低,因为成本不是线性扩展的。例如,如果你需要一台内存两倍的新机器,成本就会远远超过两倍。而且,在某种程度上,你会触及实际的极限。
替代方案:微服务架构
通过微服务方法,我们开发了一系列单独的微服务。每个微服务都是:
- 由一个独立的团队开发。
- 托管在自己的存储库中(比如Git)。
- 执行有用的业务功能。
- 独立部署。
- 可运行的独立,并做一些有用的和可测试的事情。
- 能够与其他微服务合作,实现更大的目标。
微服务如何协作是一篇完整的独立博客文章的主题。它们可以是简单的具象状态传输(representational state transfer, REST) web服务,也可以使用更复杂的异步消息传递系统。
它很容易定义微服务架构的样子,但建立一个微型架构更难!您如何确定系统中的微服务应该是什么?他们应该多大?这里肯定有一些“艺术”,很难精确,所以让我们通过微服的功能。
建筑microservices
应围绕业务能力组织微服务
例如,一个电子商务网站不仅仅是一个“购物车”。它处理库存、产品目录、账单、客户、订单等。这些业务功能是微服务的潜在候选对象。例如,库存管理听起来像一个候选微服务,只要它满足微服务的其余标准。
单个团队将开发,部署和操作微服务
一支团队采取全身拥有。这确保了微服务不会变得太大。该团队中的每个开发人员都应该能够理解整个微服务。来自亚马逊的经验法则是,两个比萨饼应该足以在任何团队会议中养活每个人。当然,这是模糊的指导(比萨饼有多大?我可以吃一个)。我更愿意更具体,并将六到八个团队成员的限制设定。团队可以开发库存管理服务吗?如果是这样,它可能是一个合适的候选人。如果没有,那么那个微惯性太复杂,需要进一步分解。
重要的是要记住,第一次不可能得到这个。一个很好的微服务项目将拥抱灵活性。如果有任何MicroService变得痛苦,良好的项目将把它重构为两个或更多新服务。
微服动物应具有高凝聚力
在微野跑的核心是与任何好的软件设计的核心相同的原则。高凝聚力意味着单个微伺服术必须执行一个事情并这样做一个事情良好。当然,什么“一个事情“意味着模糊而且判断。但它将有助于记住,微服务应与业务的特定区域对齐。
想象一下,库存管理MicroService还计算每个项目的税。也许这方面更容易发展。嗯,这将是一个迹象,即其他地方缺少重要的微寿。也许是税收服务?
独立改变的事情需要独立的微服务。税率一直在变化。如果每次出现新税,我们都必须更新和测试整个库存服务,那将是痛苦的!
微服动物应该有松散的耦合
服务之间的依赖关系应该尽可能小。更改一个微服务应该对其他微服务产生最小的影响。
单独部署微服务
每个微服务应随时重新部署,对系统的其余部分没有影响。想象一下,您发现了库存微伺服术中的错误。该团队可以在无需咨询其他开发团队的情况下部署到实时系统的变更。betwayapp下载安装
微服务自动化
您可能能够忍受手动部署单巨石应用程序的痛苦,旋转几个云实例来托管它,或将软件安装到这些实例上。但忘了缩放最多100个部署或1000个实例。微服务取决于部署,配置和配置管理的自动化。持续集成或连续交付是必不可少的任何微服务项目。马丁福勒有一些很好的信息.
微服务通常是分布式系统
您可以将所有微服务部署到单个服务器上。或者,在极端情况下,您可以为每个微服务使用单个服务器。这将是一种非常有效的隔离方式!当然,对于大多数项目来说,这将是非常昂贵的。
最好的解决方案是使用Docker将每个微服务将每个微服务转换为容器,然后使用Orchestration工具管理运行容器。最常见的策戒工具是Kubernetes。Kubernetes使用负载平衡和复制来实现高度的弹性。
微服务体系结构的优点
微服务架构的最大优点包括以下内容:
- 您强制执行良好的模块化原理,凝聚力和松散耦合。
- 您可以随时部署和重新部署各个服务。可以快速引入更改和新功能。
- 每个微服务都可以用您选择的任何语言编写。这就是所谓的多语言编程。例如,金融微服务可能最好用Python编写。另一方面,对于需要高性能的图形处理服务,可以选择C语言。
- 如果微服务变为问题,则可以从头开始丢弃并重新开发。
- 随着微服务可以分布,很容易水平缩放系统。这意味着微服务可以在许多机器中划分。这比垂直缩放更便宜(购买更昂贵的机器)。
微服务体系结构的缺点
但是,MicroService架构也有一些缺点:
- 这些原则很简单,但付诸实践却很难。例如,决定什么是微服务是主观的。
- 一些糟糕的项目正在切换到微服务,希望解决他们的问题。当事情不顺利时,他们错误地责怪微源。
- 很多工具必须到位:自动化,连续交付,源控制等。
- 可以难以运行和测试单独的微自动。
你应该构建一个整体架构还是一个微服务架构?
如果单个团队可以开发和运行它,则单线列表应用程序是合理的。一旦你超越那个尺寸,那么整理巨头的痛苦就会变得无法忍受。但是你不能只切换到微服务并期望它解决所有问题!
这是对微服务的简要概述。想了解更多吗?投资你的职业生涯我在微服务中的课程准备即将接受采访这25个问题.
我希望你喜欢你的微服旅程!