06微服务间的通信方式

一句话导读

        微服务设计的一个挑战就是服务间的通信问题,服务间通信理论上可以归结为进程间通信,进程可以是同一个机器上的,也可以是不同机器的。服务可以使用同步请求响应机制通信,也可以使用异步的基于消息中间件间的通信机制。同步的有restful、RPC等方式,异步的有各种mq中间件,如rabbitmq、rocketmq、kafka等,还有一些不常用的通讯方式,如websocket可以让服务间建立长链接,数据共享方式可以让服务通过数据库或文件的方式进行通讯。

目录

一句话导读

一、什么是通信

        1.定义

        2.通信媒介

        3.通信协议

二、微服务的通信方式有哪些

        1.微服务的同步通信

       (1) REST方式

        (2) gRPC方式

2.微服务的异步通信


一、什么是通信

        1.定义

        百度百科的解释:通信是指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递,从广义上指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法、任意媒质,将信息从某方准确安全地传送到另方。

        维基百科的解释:通信是发送者通过某种媒体以某种格式来传递信息到收信者以达致某个目的。广义上,任何信息的交通都是通信,狭义上的通信专指以电为载体进行的信息交流,所以很多时候,“通信”与“电信”的含义相近,不特别加以区分。通信技术拉近了人与人之间的距离,提高了通信的效率,深刻的改变了人类的沟通方式。

        整体来看,至少一点是通用共识的,就是通信发送者通过媒介将信息传递给接收者,而这里的发送者、接收者可以是人与人、人与自然界,机器与机器、人与机器等等。

        2.通信媒介

        在定义中提到的媒介就是通信媒介,那么具体什么是通信媒介呢?

        通信媒介指的是信息传递的物理或逻辑通道,它是信息传递的途径或介质。通信媒介可以是多种形式,包括电缆、无线信号、光纤、空气等。在不同的场景中,使用不同的通信媒介来传递信息。例如,在计算机网络中,通信媒介可以是以太网、Wi-Fi等;在人际交往中,通信媒介可以是声音、文字、图像等。

        3.通信协议

        人们要相互理解各自传递的信息,我们双方就要约定一个规则,比如我们通过声音说汉语或者通过文字写英文来传递信息,这里提到的说汉语、写英文那就是我们约定的规则,也就是通信协议。能够保障发送者、接收者都能够理解信息的含义。

        通信协议指的是在信息传递过程中所遵循的规则和约定,以确保信息能够正确、可靠地传递和解释。通信协议规定了信息的格式、传输方式、错误检测和纠正方法等。通信协议是确保通信双方能够相互理解并成功交流的基础。例如,在计算机网络中,TCP/IP协议是常用的通信协议;在人类交往中,语言和符号也是通信协议的一种形式。

二、微服务的通信方式有哪些

        微服务之间的通讯方式可以有很多,我们可以分成两个维度去总结,一个是接收端多少的维度,一个是接口阻塞情况维度。通过接收端多少我们可以分为,点对点模式和广播模式,点对点模式则是发送者只向一个接收者发送消息,广播模式,则是发送者通过广播的信息发送给众多的接收者;通过接口阻塞情况维度可以分为同步通信和异步通信,同步通信则是发送者发送消息后需要等待接收者响应,等待的过程则是阻塞过程。异步通信则是发送者将消息发送出去后,就不用管了,接收者处理消息时,发送者还可以做其他事,不阻塞等待响应。

        1.微服务的同步通信

        常见的有这两种方式:REST方式、gRPC方式

       (1) REST方式

        REST(Representational State Transfer)是一种网络架构风格,用于设计分布式系统中的网络应用程序。它最初由Roy Fielding在他的博士论文中提出,并在2000年被正式引入。REST强调以资源为中心,通过使用一组预定义的操作对这些资源进行状态转移和交互。

        REST 的核心思想是将资源(Resource)暴露为一组统一的、易于理解的URL,并使用不同的HTTP方法(如GET、POST、PUT、DELETE等)来对资源进行操作。每个资源可以用一个唯一的URL进行访问,而HTTP方法则指示了对该资源要执行的操作。例如,通过GET请求获取资源,资源可以通过xml、json对象、二进制等形式作为载体。通过PUT请求更新资源等等,在springcloud中,feign模式是将http请求进行了进一步封装。本质还是通过REST方式做服务间的交互的。

        REST 的特点

  •  无状态性(Statelessness):

        每个HTTP请求都应该包含足够的信息来执行请求,服务器不应该依赖之前的请求来理解当前的请求。这使得服务端不需要维护客户端的状态,使系统更简单和可扩展。

  • 资源导向(Resource-Oriented):

        REST 架构将数据或功能抽象为资源,每个资源都有一个唯一的标识符(URL)。客户端通过对资源进行操作来实现不同的业务功能。

  • 统一接口(Uniform Interface):

        REST 使用一组统一的操作方法(HTTP方法)来对资源进行操作,包括GET(获取)、POST(创建)、PUT(更新)和DELETE(删除)等。这简化了客户端和服务器之间的交互。

  • 缓存(Caching):

        REST 鼓励使用缓存来提高性能。服务器可以在响应中指定是否允许客户端缓存响应,以减少重复请求。

  • 按需获取(Client-Server):

        REST 鼓励将客户端和服务器分离,客户端负责用户界面和用户体验,服务器负责数据存储和业务逻辑。

  • 分层系统(Layered System):

        REST 支持构建分层的系统结构,每一层都只知道与之相邻的层,这有助于提高系统的可伸缩性和灵活性。

  • 自描述性(Self-Descriptive):

        REST 的响应应该包含足够的信息,使客户端能够理解如何处理响应的数据。这可以通过使用标准的媒体类型(如JSON、XML)和自描述的标头来实现。

  • 跨平台(Platform-Independent):

        REST 架构不依赖于特定的编程语言或技术栈,使得不同平台的应用程序能够相互通信和交互。

        (2) gRPC方式

        gRPC 是一种高性能、开源的远程过程调用(RPC)框架,最初由 Google 开发并开源。它允许不同的应用程序在不同的环境中进行通信,使用了现代的协议和序列化机制,如 Protocol Buffers(ProtoBuf),以提供高效、可靠的跨网络通信。

以下是 gRPC 的一些关键特点和组成部分:

  • 基于 HTTP/2:

        gRPC 基于 HTTP/2 协议,可以在一个连接上进行多路复用,减少了连接的数量,提高了性能。

  • 多种支持语言:

        gRPC 提供了多种编程语言的支持,包括 Java、C++、Python、Go、C#、Node.js 等,使得不同语言的应用程序可以进行跨平台的通信。

  • IDL(Interface Definition Language):

        使用 Protobuf(Protocol Buffers)定义服务接口,IDL 会自动生成客户端和服务器端的代码,使得开发者可以专注于业务逻辑的实现。

  • 支持多种通信模式:

        gRPC 支持多种通信模式,包括简单的请求-响应、流式请求、流式响应和双向流式通信。

  • 强大的错误处理和元数据支持:

        gRPC 提供了丰富的错误处理和状态码,以及对元数据(Metadata)的支持,使得开发者可以更好地进行错误处理和上下文传递。

  • 拦截器:

        gRPC 支持拦截器机制,可以在客户端和服务器端添加拦截器,用于处理日志、认证、鉴权等逻辑。

  • 性能优越:

        gRPC 基于二进制协议,序列化效率高,性能优越,适用于高并发和低延迟的场景。

2.微服务的异步通信

服务间的异步通信采用异步交换消息的方式完成,如RabbitMq、kafka

Kafka和RabbitMQ都是消息队列系统,它们的主要区别包括:

  • 通信模型:Kafka基于发布-订阅模型,而RabbitMQ则采用了AMQP协议、MQTT协议等不同模型,支持点对点和发布-订阅等模型。
  • 性能与可靠性:Kafka在高并发、大数据流时表现更出色,可实现每秒百万级别的数据处理;而RabbitMQ采用了AMQP协议,能够保证消息传输的可靠性和事务处理能力。
  • 数据存储:Kafka将消息以文件的形式存储在磁盘上,存储的消息不会立刻被消费;而RabbitMQ则采用内存缓存,消息一旦发送就会立刻被消费掉,存储的消息数受到限制。
  • 集群架构:Kafka支持集群架构的高可用和分区;而RabbitMQ则基于主从架构,支持镜像队列、负载均衡等机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/67632.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

栈和队列OJ题讲解

💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大家三连关注&…

vue3多条件搜索功能

搜索功能在后台管理页面中非常常见&#xff0c;本篇就着重讲一下vue3-admin-element框架中如何实现一个顶部多条件搜索功能 一、首先需要在vue页面的<template></template>中写入对应的结构 <!-- 搜索 --><div style"display: flex; justify-content…

【大数据】Flink 从入门到实践(一):初步介绍

Flink 从入门到实践&#xff08;一&#xff09;&#xff1a;初步介绍 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于在 无边界 和 有边界 数据流上进行 有状态 的计算。Flink 能在所有常见集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算。 1.架构 1…

[mongo]应用场景及选型

应用场景及选型 MongoDB 数据库定位 OLTP 数据库横向扩展能力&#xff0c;数据量或并发量增加时候架构可以自动扩展灵活模型&#xff0c;适合迭代开发&#xff0c;数据模型多变场景JSON 数据结构&#xff0c;适合微服务/REST API基于功能选择 MongoDB 关系型数据库迁移 从基…

测试人员该怎样写软件缺陷报告?

软件测试过程中&#xff0c;每个公司都制订了软件的缺陷处理流程&#xff0c;每个公司的软件缺陷处理流程不尽相同&#xff0c;但是它们遵循的最基本流程是一样的&#xff0c;都要经过提交、分配、确认、处理、复测、关闭等环节&#xff0c;如图1所示。 缺陷处理流程 关于图1所…

Windows环境下通过 系统定时 执行脚本方式 压缩并备份文件夹 到其他数据盘

环境配置 压缩时需要使用7-zip进行调用&#xff0c;因此根据自己电脑进行安装 官网&#xff1a;https://www.7-zip.org/ 脚本文件 新建记事本文件&#xff0c;重命名为git_back_up.bat echo off rem 设置utf-8可以正常显示中文 chcp 65001 > nulrem 获取当前日期和时间&…

系统架构设计师-系统可靠性分析与设计

目录 一、可靠性相关基本概念 二、可靠性指标 1、串联系统与并联系统可靠性指标计算 2、混合系统 三、可靠性设计 1、影响软件可靠性的主要因素&#xff1a; 2、增加可靠性的解决方案 2.1 避错技术 2.2 降低复杂度设计 2.3 检错技术 2.4 容错技术 3、双机容错 一、可靠性相关…

【算法|数组】滑动窗口

算法|数组——滑动窗口 引入 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度**。**如果不存在符合条件的子数组&#xff0c;返回 0 。 示例…

Vue [Day5]

自定义指令 全局注册 和 局部注册 inserted在指令所在的元素 被插入到页面中时&#xff0c;触发 main.js import Vue from vue import App from ./App.vueVue.config.productionTip false// 1.全局注册指令 Vue.directive(focus, {// inserted在指令所在的元素 被插入到页…

机器学习中训练数据的重要性

人工智能技术发展至今&#xff0c;训练数据的重要性已经是我们老生常谈的问题。在重声训练数据为什么重要之前&#xff0c;我们先重新回顾下AI技术大爆炸的三大初始概念&#xff1a;机器学习是什么&#xff1f;人工智能是什么&#xff1f;训练数据又是什么&#xff1f; 机器学…

阿里云内容审核服务使用(图片审核)

说明&#xff1a;在项目中&#xff0c;我们经常会对用户上传的内容&#xff08;如文字、图片&#xff09;等资源内容进行审核&#xff0c;审核包括两方面&#xff0c;一方面是内容与描述不符&#xff0c;一方面是违反法律法规。本文介绍使用阿里提供的内容审核服务&#xff0c;…

4、Rocketmq之存储原理

CommitLog ~ MappedFileQueue ~ MappedFile集合 正常情况下&#xff0c;RocketMQ支持消息体字节数最多为1个G。注意该消息体并不单单是消息体body。如果生产的消息其字节数超过1个G则该消息是无法被落盘处理的。因为没有一个MapperFile文件可以承载该消息所有的字节数。 1.All…

智慧工地源码 智慧工地云平台源码 智慧工地APP源码

智慧工地的核心是数字化&#xff0c;它通过传感器、监控设备、智能终端等技术手段&#xff0c;实现对工地各个环节的实时数据采集和传输&#xff0c;如环境温度、湿度、噪音等数据信息&#xff0c;将数据汇集到云端进行处理和分析&#xff0c;生成各种报表、图表和预警信息&…

windows10开启远程连接

目录 开启远程连接远程连接 开启远程连接 右击电脑图标->属性 点击 远程设置 远程连接 找到 远程桌面连接 点击 远程桌面连接 输入远程ip 10.0.8.5 然后点击连接 4.输入默认用户名new的密码&#xff0c;然后确定&#xff0c;搞定。

网络加速与文件传输软件:如何通过优化网络提升文件传输速度

在信息化社会&#xff0c;文件传输是人们生活和工作中必不可少的一个环节。但是&#xff0c;由于网络环境的多样性和传输过程中可能出现的各种问题&#xff0c;文件传输速度经常受到影响。因此&#xff0c;如何优化网络以提高文件传输速度成为了一个重要的课题。本文将探讨网络…

SQL SERVER 异地备份到远程共享文件夹异常处理

SQL SERVER 异地备份到远程共享文件夹异常处理 SQL Server 异地备份到远程共享文件夹异常处理 - 灰信网&#xff08;软件开发博客聚合&#xff09; -- 允许配置高级选项 EXEC sp_configure show advanced options, 1 GO -- 重新配置 RECONFIGURE GO -- 启用xp_cmdshell EXEC sp…

正则表达式的使用

1、正则表达式-教程 正则表达式&#xff1a;文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a到z之间的字母&#xff09;和特殊字符&#xff08;称为元字符&#xff09;。 正则表达式使用单个字符串来描述&#xff0c;匹配一系列匹配某个句法规则的字符串。 2、…

如何卸载SOLIDWORKS软件?

本文将为您提供一份简易指南&#xff0c;介绍如何正确卸载SOLIDWORKS软件&#xff0c;并分享一些注意事项&#xff0c;确保您的卸载过程顺利进行。 SOLIDWORKS软件作为一款强大的三维设计和工程分析工具&#xff0c;为许多工程师提供了优良的创作平台。然而&#xff0c;有时候我…

Redis-简单动态字符串(SDS)

文章目录 文章概要SDS数据结构定义SDS和C字符串的区别总结参考 文章概要 本篇文章&#xff0c;我们来学习Redis字符串的编码格式SDS编码&#xff0c;文章将将从以下几个方面介绍SDS&#xff1a; SDS的底层数据结构定义Redis是C写的&#xff0c;那SDS和C中的字符串的区别是什么…

OpenMV 自适应颜色阈值

目录 演示视频 思路讲解 OprnMV代码 演示视频 备战2023电赛~openmv自适应颜色阈值&#xff08;附源代码网盘链接&#xff09; 思路讲解 1. 参考openmv官方例程讲解10-Color-Tracking->image_statistics_info图像统计信息https://book.openmv.cc/example/10-Color-Trackin…