【翻译】进程间通信是什么?

2023-10-27

从单体架构到微服务的转变需要构成应用程序的不同服务之间的通信。服务实例通常是需要以某种方式相互通信的进程,这就是进程间通信(IPC)--有时称为服务间通信(ISC)--的作用。

人们

往往想到的IPC机制是RESTful APIs,因为这仍然是使用最广泛的,但其他选择已经出现,可能更适合特定的使用案例。在这篇文章中,除了REST,我们还考虑了其他三种流行的选择:GraphQL、gRPC和Messaging。但是,在确定哪种通信类型最适合你时,有几个类别需要考虑。

同步或异步

同步通信意味着微服务或客户端在等待对请求的响应时被阻塞,而异步通信在收到响应之前能够继续进行(可能稍后或永远不会收到)。

点对点或多点

服务要1:1通信(称为点对点),其中每个请求由一个其他服务处理?那么可以选择同步的请求/响应通信,或者只是简单的异步单向通知。

如果请求要到达多个其他服务(1:n,又称多点),那么异步发布/订阅交互会更好。这些通常使用消息代理来实现:这样,一个请求仍然只需要发送一次就可以被多个服务处理。流行的开源代理选项包括RabbitMQApache Kafka,而主要的供应商产品包括IBM的古老的MQ,最初于1993年推出,以及TIBCO的基于JMS的企业消息服务

消息格式

如果发送的数据将被人们检查,你可能想选择一种他们可以阅读的消息格式(如JSON或XML)。否则,二进制格式(如协议缓冲区或Apache Avro)会更有效。

API的作用

API通常作为服务之间或服务与客户之间的契约。对于内部微服务之间的通信,建议通常不使用同步(因此是阻塞)协议,但这仍然是面向公众或客户的API的标准。

根据架构和微服务之间的预期交互,有不同的机制可供选择。纵观进程间通信的选项,每一种都有自己的优点和缺点,并有不同的最佳使用情况。下面是微服务架构中IPC选项的一些例子。

wtf-is-IPC

REST

RESTful APIs是与服务进行通信的事实上的行业标准。它们由三个部分定义:URI、标准的HTTP方法(如GET和PUT)以及媒体类型。数据用资源表示--例如,客户或其他业务对象。

使用REST有几个优点:

  • 简单的接口,容易上手
  • 众所周知的,成熟的
  • 防火墙友好(因为它使用HTTP/S端口)
  • 用浏览器或简单的curl命令测试

有一些缺点:

  • 通常是同步的请求/响应互动
    → 替代方法:消息传递
  • URI必须由客户知道-需要服务发现
  • 端点是由资源定义的,因此很难在一个请求中从多个资源中获得数据,这可能导致类似的请求:
    GET /customers/customer_id?expand=orders 当试图同时获得客户和订单资源时。
    → 替代方案:GraphQL
  • 对HTTP动词的依赖会导致更复杂的URI端点结构(例如,更新请求很难映射到PUT,因为更新不是等价的)
    → 替代方案:gRPC
  • 没有中间缓冲区,所以请求和响应服务都需要在交换期间运行

(如果你在手机上查看这篇博文,你可以下载 以下表格的PDF ,以方便阅读。)

IPCtable1


GraphQL

与REST不同,GraphQL查询确切地定义了他们想要的数据,并且只接收这些数据。

他们不只是针对每个请求的一个资源,而是遵循它们之间的引用,以便通过单个请求实现更快的数据检索。这是通过使用类型和字段而不是多个资源端点来实现的。

GraphQL最初是由Facebook在2012年发明和使用的,然后在2015年成为开放源代码。类似的项目大约在同一时间共同发展,包括Netflix的Falcor,但没有看到那么多的采用,而Netflix本身已经开始转向GraphQL。其他已经采用GraphQL的大公司包括AirbnbCourseraGitHub。GraphQL 通过HTTP工作,但像REST一样,也可以使用其他协议,包括RSocket

当使用HTTP时,你可以使用各种工具来查询GraphQL API,例如:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【翻译】进程间通信是什么? 的相关文章

  • 【翻译】如何在你的IT转型中浪费数以亿计的资金

    你担任范德雷工业公司的首席执行官已经有几年时间了 这是一家在运输领域存在了几十年的巨无霸 真正的战略 你真的希望股价能尽快上涨 这样你就可以在命运之轮转动之前 在最佳的时间点卖掉你的股票 而董事会也不可避免地要把你赶走 你已经厌倦了蒲公英
  • 【翻译】API版本管理:它是什么,为什么这么难?

    如果你想在API技术专家之间展开一场辩论 只要让他们分享他们对 API版本 的看法 可以肯定的是 你会在短时间内发现一些强烈的感受 术语 API版本 已经成为 改变API 的同义词 这是理清支持已发布的API持续变化而又不给API消费者带来
  • 抱抱脸(hugging face)教程-中文翻译-分享一个模型

    分享一个模型 最后两个教程展示了如何使用 PyTorch Keras 和 Accelerate 优化分布式设置的模型 下一步就是把你的模型公之于众 我们相信公开分享知识和资源 使人工智能大众化 我们鼓励你考虑与社区分享你的模式 以帮助其他人
  • 【翻译】 如何应对内核警告?

    LWN net需要你 没有订阅者 LWN就根本不存在 请考虑注册订阅 帮助LWN继续出版 作者 Jonathan Corbet 2021年11月18日 内核在内部提供了许多宏 允许代码在出错时产生警告 然而 它并没有提供很多关于警告发出时应
  • 理解JPEG文件头的格式

    1 JPEG 1 why jpeg jpeg作为图片传输格式使用最为普遍 压缩比最高 每天我们都会产出和传输大量的jpeg格式数据 手机拍出来的格式默认是jpeg 朋友圈各种分享 磁盘上积累了大量的jpeg 因此本人一直对jpeg头部数据非
  • Scratch 3.0源码 之 多语言实现

    文章目录 实现方式 初始版本 多语言版本 1 页面文件 2 配置文件 3 建立关联 语法说明 案例1 带HTML标签写法 建议写法 案例2 带超链接写法 建议写法 Scratch 3 0中各类显示文本默认是英文 如果不支持自己的语言 或者自
  • 抱抱脸(hugging face)教程-中文翻译-预处理

    预处理 在您可以在模型中使用数据之前 需要将数据处理为模型可接受的格式 模型不理解原始文本 图像或音频 这些输入需要转换成数字并组装成张量 在本教程中 您将 用tokenizer处理文本 用特征提取器对图像或音频数据进行预处理 使用处理器预
  • 【python】20行代码实现有道翻译api接口调用

    文章目录 1 目标站点 2 完整代码 3 测试样例 3 1 测试样例 汉译英 3 2 测试样例 英译汉 4 调用文档 4 1 接口地址 4 2 请求方法 4 3 请求参数 4 4 请求示例 4 5 成功响应 5 接口分析 6 相关推荐 1
  • 【翻译】我们能从英国教育考试院的算法失败中学到什么?

    如果你想找一个表面上聪明的人是如何不小心把别人的生活搞得一团糟的例子 那就看看去年英国公开考试的情况吧 简而言之 政府认识到科维德 19的威胁 取消了英国学生的公开考试 在寻求另一种评分方法时 政府及其教育监管机构可以说是由于无知或选择而违
  • 【翻译】Attention Is All You Need

    Attention Is All You Need 注意力是你所需要的一切 论文地址 https proceedings neurips cc paper 2017 file 3f5ee243547dee91fbd053c1c4a845aa
  • 【翻译】 2.6 中的 4K 堆栈 [发布于 2004 年 5 月 12 日,作者:corbet

    传统上 Linux 内核在大多数架构上都使用 8KB 内核堆栈 该堆栈必须满足系统调用可能产生的任何调用序列 以及可能同时调用的任何 硬或软 中断处理程序的需要 实际上 在稳定的内核中 堆栈溢出的情况几乎闻所未闻 内核开发人员早已学会避免使
  • 【翻译】为什么你现在比以往更需要混沌工程?

    大约一年前 像餐馆和杂货店这样的实体店正争先恐后地设置送货和路边取货 他们中的很多人都在生产中使用混乱工程 在推出新功能和服务之前迅速寻找失败的原因 教育平台也是如此 在短短一周的时间里 从 好的 变成了 绝对必要 企业混沌工程平台 Gre
  • 【翻译】 使用 SFrame 进行可靠的用户空间堆栈跟踪

    请考虑订阅 LWN订阅是 LWN net 的生命线 如果您喜欢这些内容并希望看到更多 您的订阅将有助于确保 LWN 继续蓬勃发展 请访问此页面加入我们 让 LWN 继续在网络上传播 作者 Jonathan Corbet 2023 年 5 月
  • 【翻译】BItcoin数据结构——UTXO definition-Investopedia

    原文 https www investopedia com terms u utxo asp UTXO意味着什么 UTXO代表比特币交易的未花费的输出 每个比特币交易都以用于平衡分类账的硬币开始 UTXO会不断处理 并负责开始和结束每笔交易
  • JDBC规范——(8)异常

    当访问一个数据源时发生错误或者警告 JDBC 用 SQLException 这个类及其子类来表示并提供相关的异常信息 8 1 SQLException SQLException 由一下几部分组成 1 描述错误的文本信息 可以通过 SQLEx
  • 【翻译】白人男性在改善性别多样性方面的作用是什么?

    我们都知道 或者说现在应该知道 多元化的团队和组织更成功 更有创造力 有更好的留任率 并能带来更健康的工作场所文化 强调这些观点的数据是很多的 然而 技术团队在这方面往往是落后的 艾米丽 张在她的书 Brotopia 中认为 在一个如此有力
  • Qt多国语言动态切换(含源代码)

    Qt中文国际化 含高阶做法 作者 melon 日期 2019 7 15 1 国际化需要用到的工具 lrelease exe lupdate exe linguist exe 非必须 这些工具在Qt5 12 2的bin文件夹都可以找到 lup
  • 【翻译】 DMA和get_user_pages()

    LWN net需要你 没有订阅者 LWN将根本不存在 请考虑注册订阅 帮助LWN继续出版 作者 Jake Edge 2018年12月12日 Linux管道工会议 在2018年Linux Plumbers大会 LPC 的RDMA微型会议上 J
  • 【翻译】 WireGuard 何去何从?

    请考虑订阅 LWN订阅是 LWN net 的生命线 如果您喜欢这些内容并希望看到更多 您的订阅将有助于确保 LWN 继续蓬勃发展 请访问此页面加入我们 让 LWN 继续在网络上传播 作者 Jonathan Corbet 2019年3月25日
  • [英语学习][15][Word Power Made Easy]的精读与翻译优化

    序言 这次翻译 译者还是显得啰啰嗦嗦 另外还有一个地方没有能很准确的翻译出来 英文学习的目标 提升自身的英语水平 对日后编程技能的提升有很大帮助 希望大家这次能学到东西 同时加入我的社区讨论与交流英语相关的内容 原著英文与翻译版对照 第20

随机推荐

  • 6 个以假乱真的AI自动配音工具介绍

    6 个以假乱真的AI自动配音工具介绍 用 AI 重新配音 完美骗过各大视频平台的原创保护机制 但这个机器声音味儿太冲 而类似的声音已经快把全国人民包围了 家人们藏不住了 完了芭比Q了 这个男人叫小帅 这个男人叫小美 所以我们很想盘点一下 这
  • 进化优化算法--第二章:爬山法

    算法2 1 最快上升爬山法 x0 lt 随机生成的个体 while not 终止准则 计算x0的适应度f x0 For 每一个解的特征 q 1 2 n xq lt x0 用一个随机变异替换xq的第q个特征 计算xq的适应度f xq 获取下一
  • ChatGPT-4下周要来了

    昨天的一则新闻引起了轰动 微软德国首席技术官 Andreas Braun 在最近一次名为 AI in Focus Digital Kickoff 的活动中透露了这一消息 根据 Braun 的说法 我们将在下周推出 GPT 4 我们将拥有多模
  • npm ERR! code EINTEGRITY npm ERR! sha1-BO3IiUkrA6RF56xm6SJqcBdcqKA= integrity checksum failed when u

    npm ERR code EINTEGRITY npm ERR sha1 BO3IiUkrA6RF56xm6SJqcBdcqKA integrity checksum failed when using sha1 wanted sha1 B
  • 基于 MATLAB 的时间卷积神经网络(TCN)数据回归预测

    基于 MATLAB 的时间卷积神经网络 TCN 数据回归预测 时间卷积神经网络 Temporal Convolutional Network 简称 TCN 是一种基于卷积神经网络的模型 可以有效地处理时间序列数据 并具备较强的建模和预测能力
  • 变量键盘读取、数组与声明:read、array、declare

    变量键盘读取 数组与声明 read array declare 1 read root linux read pt variable 参数 p 后面可以接提示符 t 后面可以接等待的 秒数 范例一 让用户通过键盘输入内容 将该内容变成ate
  • Jdbc 连接MYSQL数据库代码模块

    获得数据库连接的四个步骤 Class for com mysql cj jdbc Driver 由于使用的是MYSQL 8 所以必须要使用相应的驱动 相比于mysql connector java 5 1 47 tar 在jar包中Driv
  • Grafana图表配置快速入门

    1 Grafana图表配置快速入门 前面我们使用 Prometheus Grafana 实现了一个简单的 CPU 使用率变化图 但是这个图还有许多缺陷 例如 左边栏的数值太小了无法调整 下面的图标信息无法定制化等等 其实 Grafana 的
  • ifconfig出现command not found解决办法

    问题 说下我linux配置情况 不一样的可以选择借鉴我的办法 在虚拟机中以最小化方式安装centos7 ifconfig命令无效 而且在sbin目录中没有ifconfig文件 原因 这是因为centos7已经不适用ifconfig命令了 已
  • vue监听一个对象的多个属性

    可以分开监听 但是不能深度监听 不能监听对象 只能 监听属性 如果监听对象 直接在handler外层加上对象名就可以了 下面加deep和immediate都为true watch lineType t console log t rowTy
  • RT-Thread记录(十四、I/O 设备模型之ADC设备)

    RT Thread ADC 设备学习使用 目录 前言 一 ADC 采样基础 1 1 ADC 通道 1 2 ADC 分辨率 1 3 ADC 采样计算 二 ADC 设备操作函数 2 1 查找 ADC 设备 2 2 使能 关闭 ADC 通道 2
  • 前端工程化:express服务端开发

    目录 1 express基本使用 1 安装依赖 2 创建服务 3 启动服务 2 express中间件和异常 1 中间件分3种 2 异常捕获有3种 3 https服务和静态服务 1 https服务 2 静态服务 1 express基本使用 1
  • 揭秘-只有13台DNS根域名服务器原因

    引言 什么是DNS DNS服务 将主机名映射成IP地址 一个主机可以有一个规范主机名 多个别名 www sina com就是个别名 邮件服务器也有别名 目的 负载平衡 通过IP分流 DNS的架构 前面我们说DNS是将主机名对应到IP 那么这
  • ConstraintLayout使用总结

    0dp的使用 app layout constrainedWidth true android layout width wrap content android layout width 0dp 效果是一样的 可以自动充满剩余空间 例子一
  • 【ZT】怎么查PC的CPU序列号?(wmic CPU get ProcessorID。WIN7可用)

    https zhidao baidu com question 38740362 html 怎么查CPU序列号 怎么查CPU序列号 我的是AMD Athlon4000 2的处理器 处理器上面写的是 AD04000IA5DD CAARG 07
  • CSS3新增了哪些新特性?

    一 是什么 css 即层叠样式表 Cascading Style Sheets 的简称 是一种标记语言 由浏览器解释执行用来使页面变得更美观 css3是css的最新标准 是向后兼容的 CSS1 2的特性在CSS3 里都是可以使用的 而CSS
  • C语言进阶,第4节-自定义类型详解(结构体+枚举+联合)

    一 结构体 1 结构的声明 描述一个学生 struct Stu 结构体标签 成员变量 char name 20 int age char sex 5 char id 20 x x 为 struct Stu 类型的变量 匿名结构体类型 str
  • LLama 2部署教程+私有模型分发

    近日 Meta发布了LLama的最新版本 LLama2 尽管其对中文的处理能力尚有待提升 但其整体表现无疑是令人瞩目的 在发布当天 我便迫切地将其下载下来进行试用 发现相比之前的版本 LLama2在多个方面都实现了显著的进步 特别是在编程能
  • stable diffusion实践操作-文生图

    本文专门开一节写文生图相关的内容 在看之前 可以同步关注 stable diffusion实践操作 正文 1 liblib SD1 5底模 lora baihuaniang 1 0 详细信息 底模 SD 1 5 Lora baihuania
  • 【翻译】进程间通信是什么?

    从单体架构到微服务的转变需要构成应用程序的不同服务之间的通信 服务实例通常是需要以某种方式相互通信的进程 这就是进程间通信 IPC 有时称为服务间通信 ISC 的作用 人们 往往想到的IPC机制是RESTful APIs 因为这仍然是使用最