Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >「第二部:容器和微服务架构](11) 微服务架构中的通信

「第二部:容器和微服务架构](11) 微服务架构中的通信

作者头像
架构师研究会
发布于 2020-07-18 10:09:17
发布于 2020-07-18 10:09:17
6360
举报
文章被收录于专栏:超级架构师超级架构师

在单个进程上运行的单片应用程序中,组件使用语言级方法或函数调用彼此调用。如果使用代码创建对象(例如,new ClassName()),则可以强耦合这些对象;如果使用依赖注入,则可以通过引用抽象而不是具体的对象实例,以分离的方式调用这些对象。不管怎样,对象都在同一进程中运行。当从单一应用程序转变为基于微服务的应用程序时,最大的挑战在于改变通信机制。从进程内方法调用到服务的RPC调用的直接转换将导致在分布式环境中性能不佳的聊天和不高效的通信。正确设计分布式系统的挑战是众所周知的,甚至还有一个被称为分布式计算谬误的经典,它列出了开发人员在从单一设计转向分布式设计时经常做出的假设。

没有一个解决方案,只有几个。一种解决方案是尽可能地隔离业务微服务。然后在内部微服务之间使用异步通信,并用粗粒度通信替换对象之间的进程内通信中的典型细粒度通信。您可以通过对调用进行分组并将聚合多个内部调用结果的数据返回给客户端来完成此操作。

基于微服务的应用程序是在多个进程或服务上运行的分布式系统,通常甚至跨多个服务器或主机运行。每个服务实例通常是一个流程。因此,服务必须使用进程间通信协议(如HTTP、AMQP)或二进制协议(如TCP)进行交互,具体取决于每个服务的性质。

微服务社区提倡“智能端点和哑管道”的理念这一口号鼓励设计尽可能在微服务之间分离,并在单个微服务中尽可能具有凝聚力。如前所述,每个微服务都拥有自己的数据和域逻辑。但是,组成端到端应用程序的微服务通常只是通过使用REST通信而不是复杂的协议(如WS-*和灵活的事件驱动通信)进行编排,而不是使用集中的业务流程编排器。

这两种常用的协议是HTTP请求/响应和资源api(在大多数情况下查询时),以及在跨多个微服务通信更新时的轻量级异步消息传递。以下各节将更详细地解释这些问题。

通信类型

客户机和服务可以通过多种不同类型的通信进行通信,每种通信都针对不同的场景和目标。最初,这些类型的通信可以分为两个轴。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微服务概念快速了解
近几年来,“微服务体系结构”这个术语出现了,它描述了将软件应用程序设计为可独立部署的服务套件的特定方式。尽管这种架构风格没有确切的定义,但围绕业务能力,自动化部署,智能终端以及数据的分散控制等方面存在着某些共同特征。
jack.yang
2025/04/05
1030
微服务概念快速了解
「第二部:容器和微服务架构](12) 基于异步消息的通信
在跨多个微服务及其相关的域模型传播更改时,异步消息传递和事件驱动的通信至关重要。正如前面在讨论microservices和有界上下文(BCs)时所提到的,模型(用户、客户、产品、帐户等)对不同的microservices或BCs可能有不同的含义。这意味着当发生更改时,您需要某种方法来协调不同模型之间的更改。解决方案是基于异步消息传递的最终一致性和事件驱动通信。
架构师研究会
2020/07/18
7500
「第二部:容器和微服务架构](12) 基于异步消息的通信
「第二部:容器和微服务架构](17) 编排微服务和多容器应用程序
如果您的应用程序基于微服务或只是跨多个容器拆分,那么使用面向生产的应用程序的编排器是必不可少的。如前所述,在基于微服务的方法中,每个微服务都拥有自己的模型和数据,以便从开发和部署的角度来看它是自治的。但是,即使您有一个更传统的由多个服务组成的应用程序(如SOA),您也将有多个容器或服务,这些容器或服务由一个需要作为分布式系统部署的业务应用程序组成。这些类型的系统在扩展和管理方面很复杂;因此,如果您想要有一个生产就绪且可扩展的多容器应用程序,您绝对需要一个编排器。
架构师研究会
2020/07/20
3640
「第二部:容器和微服务架构](17) 编排微服务和多容器应用程序
「第二部:容器和微服务架构](16)微服务的回弹性和高可用性
处理意外故障是最难解决的问题之一,特别是在分布式系统中。开发人员编写的大部分代码都涉及异常处理,而这也是测试中花费最多时间的地方。这个问题比编写处理失败的代码更复杂。当运行微服务的机器出现故障时会发生什么情况?您不仅需要检测此微服务故障(这本身就是一个难题),而且还需要一些东西来重新启动您的微服务。
架构师研究会
2020/07/18
1.1K0
模块化 VS 微服务:别让架构选择误入 “伪需求” 陷阱
架构有时候挺难捉摸的——人们不断提出新想法,这些想法在没有任何背景或者细微差别的情况下快速成为主流“实现方式”;而迫于寻求架构改进之法的行业则盲目跟进,不假思索地全盘接受。
架构精进之路
2025/04/30
1220
模块化 VS 微服务:别让架构选择误入 “伪需求” 陷阱
微服务之初了解(一)
在使用微服务的时候,内聚性是一个很重要的概念。Robert C. Martion对 单一职责原则 有个论述是: 把相同原因而变化的东西聚合到一起,而把不同原因而变化的东西分离开。这个论述很好的强调了内聚性这个概念。
Vincent-yuan
2019/09/11
4850
微服务之初了解(一)
微服务架构与实践 学习笔记(1)
单一职责原则,即一个对象应该只有一个发生变化的原因。对于每个服务而言,希望它处理的业务逻辑能够单一,在服务架构层面遵循单一职责原则。也就是说,微服务架构中的每个服务,都是具有业务逻辑的,符合高内聚、低耦合以及单一职责的单元,不同的服务通过管道的方式灵活组合,从而构建出庞大的系统。
2019/02/25
3910
微服务架构深度解析微服务定义是什么?微服务与云原生有何关联?
微服务的概念来源于Martin Fowler 的一篇知名博文 :MicroServices。在博文中,“微服务架构”这个术语用来描述一种将软件应用程序设计为可独立部署的服务套件的特定方式。
愿天堂没有BUG
2022/10/28
7910
微服务架构深度解析微服务定义是什么?微服务与云原生有何关联?
微服务模式系列之二:微服务架构
译者评论: 微服务架构大家已经耳熟能详,但是我认为这篇文章最有价值的是这段: 但这类解决方案中也存在着以下弊端: 开发者必须应对创建分布式系统所产生的额外的复杂因素。 现有开发者工具/IDE主要面向单体应用程序,因此无法显式支持分布式应用的开发。 测试工作更加困难。 开发者必须采取服务间通信机制。 很难在不使用分布式事务机制的情况下跨服务实现功能。 跨服务实现功能要求各团队进行密切协作。 部署复杂。在生产环境下,对这类多种服务类型构建而成的系统进行部署与管理十分困难。 内存占用量更高。微
yuanyi928
2018/04/02
8750
微服务模式系列之二:微服务架构
「微服务架构」Medium的微服务架构实践
微服务¹架构的目标是帮助工程团队更快,更安全,更高质量地交付产品。解耦服务允许团队快速迭代,对系统的其余部分影响最小。
架构师研究会
2019/06/28
6460
「微服务架构」Medium的微服务架构实践
一篇故事告诉你什么是微服务架构!
看到最近“微服务架构”这个概念这么火,作为一个积极上进的程序猿,成小胖忍不住想要学习学习。而架构师老王(不是隔壁老王)最近刚好在做公司基础服务的微服务化研究和落地,对此深有研究。
Java后端技术
2018/08/09
5140
一篇故事告诉你什么是微服务架构!
溯源微服务:企业分布式应用的一次回顾
微服务作为架构风格几乎成为云时代企业级应用的事实标准,构成微服务的技术元素本身却并非革命性。跨平台的分布式通信框架、地址无关的服务注册与发现、智能路由与编排等技术早已在CORBA、SOA时代实现了一遍又一遍,我们不禁好奇,微服务有什么不同?本文是对企业分布式应用的一次回顾,与前微服务时代相比,我们究竟在哪些领域吸取了教训,哪些方面持续搞砸。
ThoughtWorks
2019/05/15
4670
溯源微服务:企业分布式应用的一次回顾
猫头鹰的深夜翻译:微服务概述
在过去几年中,出现了微服务架构的理念,它提倡将应用程序设计为可独立部署到额服务套件。虽然对于这种架构风格没有明确的定义,但是它在业务能力,自动部署,智能终端以及语言和数据的分散控制方面有共同的特征。
眯眯眼的猫头鹰
2019/03/13
4350
猫头鹰的深夜翻译:微服务概述
进大厂必须掌握的50个微服务面试问题
根据Gartner的说法,微服务是云开发的新应用平台。微服务是独立部署和管理的,一旦在容器内实现,它们与底层操作系统的交互很少。 因此,如果您计划在微服务中开始您的职业生涯,那么现在正是潜入技术处于新生状态的时候。因此,为了帮助您准备面试,我提出了微服务面试问题和答案博客。
Java架构师历程
2018/09/26
24.3K0
进大厂必须掌握的50个微服务面试问题
微服务和传统服务架构
单块架构应用:功能集中,代码和数据中心化,一个发布包部署后运行在同一个进程中的应用程序 单块架构的优势: 1)易于开发 2)易于测试 3)易于部署 4)易于水平伸缩(所有的功能都会打成一个包,在集群中新建一个节点,配置好节点的运行环境,复制软件包到响应的位置,保证负载均衡的分发策略有效分发到当前节点即可) 面临的挑战: 1)维护成本增加,代码量过大,不利于快速定位问题 2)持续交付周期长:构建 部署和测试的实际都会随着代码量的增加而成倍的增长 3)新人培养周期长:业务熟悉和环境部署都会有很大的难度 4)技术
Java高级架构
2018/04/19
8640
[译]微服务-Martin Fowler
作者:YYGCui 出处:http://blog.cuicc.com/blog/2015/07/22/microservices/ 在过去几年中,“微服务架构”这一术语如雨后春笋般涌现出来,它描述了一种将软件应用程序设计为一组可独立部署的服务的特定方式。虽然这种架构风格没有明确的定义,但在组织、业务能力上有一些共同的特征:自动化部署,端点智能化,语言和数据的去中心化控制。 “微服务” - 软件架构拥挤大街上的有一个新术语。虽然我们自然的倾向是轻蔑的一瞥将它一带而过,然而我们发现这一术语描述了一种越来越吸引人
纯洁的微笑
2018/04/18
1.3K0
[译]微服务-Martin Fowler
单体到微服务架构服务演化过程
在 Web 应用程序发展的早期,大部分工程是将所有的服务端功能模块打包到单个巨石型(Monolith)应用中,譬如很多企业的 Java 应用程序打包为 war 包,最终会形成如下的架构:
架构狂人
2023/09/28
4650
单体到微服务架构服务演化过程
微服务(Microservices)集成原则
在微服务的诸多优势中,最重要的动机是业务单位的规模和自主权。然而,我们仍然需要创建一个对最终用户有意义的集成体验。在为微服务之间的交互开发策略时,记住这两个目标是很重要的。这些策略可以成就或毁掉你的努力。
程序你好
2018/09/29
1.5K0
微服务(Microservices)集成原则
你知道微服务架构深度解析:微服务的主要特性有哪些吗?
微服务架构相比SOA分布式架构强调按业务边界做细粒度的服务拆分。SOA架构使用粗粒度的服务模式来封装业务和技术能力,减少服务交互,但同时带来了业务耦合的复杂性。而微服务架构本质上是一个做减法的架构,将规模庞大的单体系统进行服务拆分,每个细粒度服务的功能和职责单一。当然,服务的粒度并不是拆得越细越好,如果拆分不当,还会造成服务频繁地跨网络操作,增加系统的整体复杂性。
愿天堂没有BUG
2022/10/28
2.1K0
你知道微服务架构深度解析:微服务的主要特性有哪些吗?
关于微服务架构,你需要关注的那些点
今天谈到系统架构模式,很难不联想起微服务架构。企业或组织在系统架构的实践过程中,从最初的单体架构,之后走向 SOA,逐渐分布式之后,最终产生了微服务架构。
java思维导图
2018/10/24
1.2K0
关于微服务架构,你需要关注的那些点
推荐阅读
相关推荐
微服务概念快速了解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档