Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么应该使用微服务(Microservices) ?

为什么应该使用微服务(Microservices) ?

作者头像
程序你好
发布于 2018-09-29 03:05:14
发布于 2018-09-29 03:05:14
1.2K0
举报
文章被收录于专栏:程序你好程序你好

如今,微服务非常流行。几乎每个人都喜欢。不仅仅是Netflix、亚马逊或谷歌,似乎几乎每个人都采用了这种架构风格。虽然微服务已经存在了很长一段时间,也有很多关于它的文章,但我今天想再写一篇,所以请耐心听我说。

要理解对微服务的需求,我们需要理解典型的单体三层架构的问题。

整体式架构是什么?

整体式是指把所有的东西都组合在一起。整体应用程序是自包含的应用程序。必须有应用的所有组件,才能使代码工作。

以构建在三个部分中的典型的三层传统web应用程序为例:用户界面、数据库服务器端应用程序。这个服务器端应用程序称为monolith,它进一步分为3层—表示层、业务层和数据层。整个代码在同一个代码库中维护。为了使代码工作,它被部署为单个整体单元。任何微小的更改都需要构建和部署整个应用程序。

什么是微服务架构?

微服务体系结构是一种体系结构风格,在这种体系结构风格中,整个应用程序被划分成松散耦合的、独立的、围绕业务领域建模的服务。微服务中的“微”是非常具有欺骗性的。人们对此争论不休,但在我看来,它并没有规定服务的大小。再一次,这是另一个我们应该有另一天的讨论。让我们前进。

重点是,每个独立的服务都有一个业务边界,可以独立开发、测试、部署、监视和扩展。它们甚至可以用不同的编程语言开发。

在基于微服务的体系结构中,每个组件或服务都有自己的数据库。没有集中式数据库,就像一个整体的情况一样。您甚至可以根据需要为每个微服务使用NoSQL、RDBMS或任何其他数据库。这使得微服务真正独立。

单体Monolith架构与微服务对比

扩展难易程度

这些应用程序只能通过在负载均衡器后面有多个完整应用程序实例来水平缩放。如果应用程序中的特定服务需要扩展,那么没有简单的选项。您需要完整地扩展应用程序,这是对资源的不必要浪费。

相反,基于微服务的应用程序允许您根据自己的需求独立地扩展单个服务。在上面的图中,如果服务B需要缩放,您可能有10个实例,而其他的保持原样。这可以根据需要随时更改。

部署方便程度

整个代码库被部署,而不仅仅是受影响的代码。对单个应用程序的任何部分/层所做的任何更改都需要构建和部署整个应用程序。单个开发人员还需要下载整个应用程序代码,而不只是下载他/她所影响的用于修复和测试的模块。这也会影响持续部署。

另一方面,在微服务体系结构中,如果只需要在100个微服务中的一个中进行更改,那么只需要构建和部署经过更改的微服务。不需要部署所有内容。事实上,如果需要,微服务甚至可以在一天中部署好几次。

越来越多的应用程序的复杂性

随着单体应用程序(特性、功能等)的增长,团队也会随之增长,很快,应用程序就变得复杂和交织在一起。随着不同的团队不断修改代码,维护模块化结构变得越来越困难,最终导致混乱的代码。这不仅会影响代码质量,还会影响整个组织。

在基于微服务的应用程序中,每个团队都在各自独立的微服务上工作,这使得制作交织在一起的代码变得不那么困难。

没有明确的所有权

在单体应用程序中,看起来独立的团队实际上并不独立。它们同时在同一个代码基上工作,但彼此之间严重依赖。

在基于微服务的应用程序中,独立的团队在独立的微服务上工作。一个团队将拥有一个完整的微服务。工作有明确的所有权,对服务的所有内容都有明确的控制,包括开发、部署和监视。

故障级联

如果不正确地设计,单个应用程序的某个部分的故障可能会级联并导致整个系统崩溃。

在基于微服务的架构中,我们可以使用断路器来避免这种故障。

开发和运维隔离

开发团队通常会进行开发、测试,一旦部署,就会将维护和支持的所有权交给运营团队。开发团队解散了,运维团队接管了所有权,并努力在生产中支持单块应用程序。

在基于微服务的应用程序中,团队是在“构建它,运行它”的理解下组织起来的。开发团队继续拥有产品中的应用程序。

在技术/语言

用一个整体,一个人被锁定在实现的技术/语言。如果需要进行技术/语言更改,则必须重写整个应用程序。

使用微服务,每个服务都可以根据需求和业务以不同的技术或语言实现。任何更改服务的技术/语言的决定只需要重写该特定服务,因为所有微服务彼此独立。

提供正确的工具/技术来支持微服务

几年前,还没有合适的工具和技术来支持微服务。自从Docker容器和云基础设施(尤其是PaaS)向大众开放以来,由于微服务无需经过传统的供应程序就能提供自由,因此被大量采用。

结论

我们已经详细讨论了单片架构和微服务架构风格。我们还讨论了单体应用程序的各种关键问题,以及微服务如何解决这些问题。简而言之,选择微服务体系结构有以下好处:

独立开发和部署服务

速度和敏捷性

更好的代码质量

围绕业务功能创建/组织代码

提高了生产率

容易扩展

在某种程度上,选择实现技术/语言的自由

即使有微服务体系结构提供的所有好处,它也不是一颗银弹。它有自己的复杂性。考虑一个大项目中数百个服务的多个实例。你将如何监控这些?在任何服务失败的情况下,如何跟踪、跟踪和调试错误?

所有这些开销都是高效应用程序需要解决的问题。

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

本文分享自 程序你好 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微服务Microservices——应用架构的未来
能够构建、演变和扩展大型应用程序对于组织来说是至关重要的,但是所涉及的挑战使其成为一项困难的任务。正因为如此,微服务已经成为构建现代云应用的主导模式,它将单个组件分解为独立的服务,这些服务围绕着特定的业务功能。
程序你好
2018/08/09
9560
微服务Microservices——应用架构的未来
单体架构和微服务架构:现实应用中的软件架构
如果没有一个好的架构,软件系统的开发可能会使公司付出很高的代价。举个例子,如果一个在线电子商务公司开发平台采用耦合程度高的模块化方法,用户界面和业务逻辑功能的源文件是混在一起的,如果想要支持新的智能手机本地应用或支持更大规模的用户交易,他们可能会需要大量的投资(时间和资源)。这种系统设计风格会影响软件的可维护性,质量,并会增加业务投放市场的时间。
程序你好
2018/07/23
1.2K0
微服务架构: 什么是微服务, 是什么时候和怎么使用微服务
微服务架构现在已经广泛使用,看看什么是微服务,简要概述一下什么时候和怎么样使用它们,以及相对于单体架构的优势。 介绍 现在,微服务架构模式得到了广泛关注,并且已经成为趋势。如果不清楚可以来看看谷歌搜索趋势。 可以看到从2014年开始,人们对这个词的兴趣大增,随着时间的推移,这种趋势还在不断增加。 这种对微服务炒作正处于顶峰。即使是在当前炒作的高峰期,也值得研究微服务架构风格。我相信这肯定有一定的风险,花时间去理解它是很好的。 有一些微服务架构优越性支撑起这种炒作。像Netflix、亚马逊(Amazon)和
程序你好
2018/07/20
1.4K0
微服务概念快速了解
近几年来,“微服务体系结构”这个术语出现了,它描述了将软件应用程序设计为可独立部署的服务套件的特定方式。尽管这种架构风格没有确切的定义,但围绕业务能力,自动化部署,智能终端以及数据的分散控制等方面存在着某些共同特征。
jack.yang
2025/04/05
910
微服务概念快速了解
微服务与其他三种软件架构的优缺点
当你开始构建一流的 Web 软件应用程序的时候,当你拥有适当的敏捷方法的时候,开发团队可以开始布局软件体系架构。
后场技术
2020/09/04
1.6K0
实用微服务
如今,微服务是软件体系结构领域中最受欢迎的热门词汇之一。有许多材料都在介绍微服务的基本原理以及它的好处,但教你如何在企业场景中使用微服务的资料就十分少了。
用户2412608
2018/07/04
4K0
实用微服务
微服务架构简介(单一架构VS微服务架构)
最近,关于微服务有很多争论。几乎所有的IT公司都在讨论微服务。当我们将微服务跟传统的单一架构比较时,可以很容易理解它。
码农小胖哥
2019/12/10
9480
微服务架构简介(单一架构VS微服务架构)
微服务架构体系——它适合您的软件开发吗?
“Microservice architecture provides a range of technical benefits that contribute to the development velocity and product quality in software projects, while also contributing to the overall business agility”– Mark Emeis, Senior director of software technologies, CA Technologies
程序你好
2018/09/29
7420
微服务架构体系——它适合您的软件开发吗?
迁移到微服务架构
在这篇文章中,我将介绍我对于一些微服务相关问题的看法。第一个问题是为什么金融科技公司应当把遗留的传统架构应用迁移到现代的架构风格上;其次,如何在这一范式迁移过程中重用现有的应用资产;最后是这种迁移将以何种方式解决这一领域中包括代码质量和重用性在内的一系列令人望而生畏的问题。
Techeek
2018/06/25
9640
迁移到微服务架构
微服务架构10个最重要的设计模式
自从软件开发的早期(1960年代)以来,解决大型软件系统中的复杂性一直是一项艰巨的任务。多年来,软件工程师和架构师为解决软件系统的复杂性进行了许多尝试:David Parnas的模块化和信息隐藏(1972),Edsger W. Dijkstra的关注分离(1974),面向服务的体系结构(1998)。
肉眼品世界
2021/01/06
1.1K0
微服务架构10个最重要的设计模式
Monolithic架构到微服务
这种应用程序不是说只负责单个任务,但它们需要几个任务来完成特定的职责。在单体应用程序中,所有服务都打包成一个包,并作为一个进程运行。在单个应用程序中,用户界面、数据访问层和数据存储层是紧密耦合的。通常,大型团队使用单块应用程序,它们不适合基于容器的部署。
程序你好
2018/09/29
3K0
Monolithic架构到微服务
什么是微服务?
自2011年以来,微服务一直是软件社区的重要组成部分,但与许多其他架构和设计理念一样,自从成立以来,围绕这种架构风格的争论不断。与许多这些炒作一样,有一种倾向于转换所有现有的软件或要求使用这种风格实施所有新软件。作为回应,许多人将这种风格视为纯粹的表面炒作,并且以与面向服务的体系结构(SOA)和跨平台面向对象的通信协议(即公共对象请求代理体系结构(Common Object Request Broker Architecture))相同的方式讽刺地期待它的突出地位被废, CORBA)。
Hi胡瀚
2018/07/04
8600
什么是微服务?
Monolith或Microservices:到底该选择哪一个?
【摘要】到底该选择Monolith还是Microservices呢?业界没有一个统一标准的答案,本文通过分析比较Monolith和Microservices的优缺点,给出了在哪些情况下,建议选择Mon
CSDN技术头条
2018/02/06
2K0
Monolith或Microservices:到底该选择哪一个?
Why、When以及How:成功迁移到微服务
当一个业务应用程序(一个开发团队)变得更大,达到一定的规模时,公司就会遇到严重的管理和合作瓶颈。此外,如果一个软件产品基于一个巨大的整体架构,那么它们也面临着技术挑战。在这种情况下,业务需要一个解决方案来修复工作流并增强项目上的协作。
程序你好
2018/12/06
4630
Why、When以及How:成功迁移到微服务
微服务架构的流行设计模式
几十年来,应用程序一直使用整体架构构建;但是,许多人现在正在转向微服务架构。微服务架构为我们提供了更快的开发速度、可扩展性、可靠性、使用适合的最佳技术堆栈开发每个组件的灵活性等等。微服务架构依赖于可独立部署的微服务。每个微服务都有自己的业务逻辑和数据库,由特定的域上下文组成。每个服务的测试、增强和缩放独立于其他微服务。
jack.yang
2025/04/05
1370
微服务架构的流行设计模式
7000 字 + 21 图,微服务架构概述
微服务(MicroServices)是一种架构风格,一个大型复杂软件应用由多个微服务和前端展示层组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。以往我们开发应用程序都是单体应用(可以理解为一个部署包包含了项目的所有功能),虽然开发和部署比较方便,但后期随着业务的不断增加为了能够达到响应业务需求,单体应用的开发迭代和性能瓶颈等问题愈发明显,微服务就是解决此问题的有效手段。想要回答为什么要使用微服务架构的问题,首先应该了解一体化架构。
芋道源码
2021/07/13
4230
Uber:面向领域的微服务架构设计实践
近来,一些关于面向服务架构的话题,特别是针对微服务架构的弊端这个话题上进行了大量的讨论。虽然在几年前,微服务架构受到很多人的青睐,因为它们提供了许多好处,如独立部署的灵活性、明确的所有权、系统稳定性的改善以及更好的分离问题等优点。但是不久,就开始有人吐槽微服务会大幅增加系统复杂性,有时甚至连一些简单的功能都难以构建。
玄姐谈AGI
2021/04/29
8110
Uber:面向领域的微服务架构设计实践
如何从传统单体架构转向微服务
当今,把单体架构的应用拆成微型服务是很时髦的。让我想起了2000年世纪初的那些日子,那时SOA正在流行,大多数公司,供应商和系统集成商,正忙着挥动SOA魔杖,希望它能将他们的遗留应用程序转变为更加灵活和敏捷的SOA应用程序。一个供应商甚至说,“使用SOA,您不需要编写一行代码“。不幸的是,事实却根本不是这样。虽然他们的大肆宣传,努力去做,结果却不美好。虽然服务的概念还不错,但是SOA具有强类型的服务定义,并且在HTTP上使用SOAP非常麻烦。这些缺点似于谚语中所说的“当你有一个新的闪亮的锤子时,一切看起来都像钉子”,这就是SOA的末日。
程序你好
2018/05/24
2K0
如何从传统单体架构转向微服务
微服务:如何拆分共享数据库?
在分解单体应用程序到微服务体系架构时,重点考虑独立数据库拆分是很重要的。您需要想出一个可靠的策略,将您的数据库分割为多个与应用程序对齐的小型数据库。简而言之,您需要将您的应用程序/服务从使用单一的共享数据库中拆分出来。
程序你好
2018/10/18
3.4K0
微服务:如何拆分共享数据库?
微服务设计指南
微服务是当今软件工程师的一个热门话题。让我们了解如何使用微服务架构风格构建真正模块化、业务敏捷的IT系统。
yuanyi928
2018/12/07
1.2K0
微服务设计指南
相关推荐
微服务Microservices——应用架构的未来
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档