在微服务架构中,会将一个完整的应用程序拆分成一组服务。这些服务之间需要经过协作,通过接口调用,才能组成一个完整的应用。
成都创新互联公司是一家集网站建设,阆中企业网站建设,阆中品牌网站建设,网站定制,阆中网站建设报价,网络营销,网络优化,阆中网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
不同的服务部署在不同的机器上,或者同一个机器的多个容器中,进程间进行通信就不可避免了,也变得非常重要。
按种类来分,进程间的通信方式有很多种,比如远程过程调用的 RESTful API 和 gRPC 、基于消息机制的异步方式等。
按照交互方式来分,会有同步、异步。
这里有几个概念需要统一下语言:接口、客户端、服务端
在前后端分离之前的单体应用中,当接口方法有变化时,进行代码编译就知道哪些地方需要调整,或者在 IDE 中进行接口方法引用的查找,也能很容易处理。
在微服务中,不同的服务可能是不同的团队来进行开发,服务端接口的修改、滚动发布等都需要有很好的兼容性和可用性。
一种方式是在接口中向下兼容,但时间越长代码就会变得越复杂,比如:
另一种方式就是不向下兼容,所有的客户端需要进行代码的调整来适应新的接口。在客户端代码还没有完全调整完之前,新老接口需要共存,共存有两种方式:
所以,一个设计良好的接口可以在暴露有用功能的同时隐藏实现细节,对于细节,可以进行扩展,修改,并不会影响到客户端的调用,这就要求在接口设计之前,需要先进行定义,经过多轮评审后再进行编码实现。
好的设计自带防腐层。
因为客户端和服务端是互相独立的,服务端有时在特定时间内无法完全响应客户端的请求,可能是自己本身的故障,也可能是超过了负载。这时,客户端请求就会被阻塞,无限地等待。
有几种方式可以来解决这个问题:
现在有一些成熟的框架可以方便进行熔断的处理,比如:.NET 中的 Polly、Spring Cloud 中的 Sentinel、Hystrix 。
在传统软件中,经常使用环境变量和配置文件来进行静态地址的配置,而部署在云端的分布式微服务程序中,地址是动态的,那客户端怎么能找到这些地址呢?这就需要用到服务发现。
服务发现就是客户端不再依赖一个静态的固定地址去寻找服务端,而是根据一个路由名称在服务注册表去寻找服务端地址,服务端部署后会将地址写入服务注册表。
在微服务框架中,也有相关的框架来实现服务发现,比如:.NET 中的 consul 、Spring Cloud 中的 Eureka、Nacos 等。
对于实时性要求不高的场景,可以采用异步消息的方式来实现。比如删除数据时,需要删除数据中对应的附件信息、各种操作的日志记录、流程流转中需要发送消息通知等。
使用异步消息有下面几个好处:
现在流行的开源中间件有 RabbitMQ、ActiveMQ、RokcetMQ、Kafka 等,选择这些中间件时需要考虑:
很多工作流引擎使用的是消息驱动机制,流程在流转过程中需要保证消息是顺序处理的,否则流程数据可能出现错乱,如何在保证消息顺序处理的情况下又能横向进行扩展,这是一个挑战。在 Kafka 中可以使用分片的方式进行解决。
上面介绍的是服务间通信的一些常用方式,了解了基本逻辑,在具体实践时,无论是使用 .NET 技术栈还是 Java 技术栈来做微服务,就都不是什么难事了。
当前名称:微服务:服务间如何通信?
转载注明:http://www.shufengxianlan.com/qtweb/news27/35577.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联