美文网首页
微服务进程间通信 学习记录

微服务进程间通信 学习记录

作者: MlLance | 来源:发表于2020-03-25 20:45 被阅读0次

学习文章: https://www.nginx.com/blog/introduction-to-microservices/

  • 基于微服务的应用程序是在多台计算机上运行的分布式系统。每个服务实例通常是一个进程。服务必须使用进程间通信(IPC)机制进行交互。

客户端⇔服务交互方式

第一个维度是互动是一对一还是一对多:

  • 一对一–每个客户端请求仅由一个服务实例处理。
    • 请求/响应–客户端向服务发出请求并等待响应。客户希望响应能够及时到达。在基于线程的应用程序中,发出请求的线程甚至可能在等待时阻塞。
    • 通知(也称为单向请求)–客户端向服务发送请求,但不希望或未发送答复。
    • 请求/异步响应–客户端将请求发送到服务,该服务以异步方式答复。客户端在等待时不会阻塞,并假设响应可能不会在一段时间内到达。
  • 一对多–每个请求由多个服务实例处理
    • 发布/订阅–客户端发布通知消息,该消息由零个或更多感兴趣的服务使用。
    • 发布/异步响应–客户端发布请求消息,然后等待一定时间以等待感兴趣的服务的响应。

二个维度是交互是同步还是异步:

  • 同步–客户端期望服务及时响应,甚至在等待时可能会阻塞。
  • 异步–客户端在等待响应时不会阻塞,并且响应(如果有的话)不一定会立即发送。

API 定义

API定义的性质取决于您所使用的IPC机制。如果使用消息传递,则API包含消息通道和消息类型。如果使用的是HTTP,则API由URL以及请求和响应格式组成。

处理部分故障

  • 由于客户端和服务是独立的流程,因此服务可能无法及时响应客户端的请求。服务可能由于故障或维护而关闭。否则服务可能过载,并且对请求的响应非常缓慢。

方法

处理部分故障的策略包括:

  • 网络超时–永远不会无限阻塞,并且在等待响应时始终使用超时。使用超时可确保资源不会无限期地被占用。
  • 限制未完成请求的数量–限制客户端可以使用特定服务的未完成请求的数量。如果已达到限制,则发出其他请求可能毫无意义,并且这些尝试必须立即失败。
  • 断路器模式 –跟踪成功和失败请求的数量。如果错误率超过配置的阈值,请使断路器跳闸,以便进一步尝试立即失败。如果大量请求失败,则表明该服务不可用,并且发送请求毫无意义。超时后,客户端应重试,如果成功,则合上断路器。
  • 提供回退–当请求失败时执行回退逻辑。例如,返回缓存的数据或默认值,例如空的建议集。

IPC技术

  • 基于请求/响应的同步通信机制,例如基于HTTP的REST或Thrift。
  • 于消息的异步通信机制,例如AMQP或STOMP。
  • 基于文本的格式,例如JSON或XML。
  • 使用二进制格式(效率更高),例如Avro或Protocol Buffers。

基于消息的异步通信

一条消息由标头(例如发送方之类的元数据)和一条消息主体组成。消息通过通道交换。任何数量的生产者都可以将消息发送到一个频道。同样,任何数量的使用者都可以从频道接收消息。

点对点渠道和发布订阅渠道。

  • 发布订阅
    image.png
    开源消息传递系统可供选择,包括RabbitMQApache KafkaApache ActiveMQNSQ。在较高级别上,它们都支持某种形式的消息和通道。他们都努力做到可靠,高性能和可扩展。

消息传递优点
* 使客户端与服务脱钩–客户端仅通过向适当的通道发送消息即可发出请求。客户端完全不知道服务实例。它不需要使用发现机制来确定服务实例的位置。

  • 消息缓冲–使用同步请求/响应协议(例如HTTP),客户端和服务在交换期间必须都可用。相反,消息代理将写入通道的消息排队,直到消费者可以处理它们为止。例如,这意味着即使订单履行系统很慢或不可用,在线商店也可以接受来自客户的订单。订单消息只是排队。
  • 灵活的客户端-服务交互–消息支持前面描述的所有交互样式。
  • 显式进程间通信–基于RPC的机制试图使调用远程服务看起来与调用本地服务相同。但是,由于物理定律和部分失效的可能性,它们实际上是完全不同的。消息传递使这些差异非常明显,因此开发人员不会陷入错误的安全感中。

消息传递缺点

  • 额外的操作复杂性–邮件系统是又一个必须安装,配置和操作的系统组件。消息代理必须高度可用,否则系统可靠性会受到影响。
  • 实现基于请求/响应的交互的复杂性–请求/响应式的交互需要一些工作来实现。每个请求消息必须包含一个回复通道标识符和一个相关标识符。服务将包含相关ID的响应消息写入回复通道。客户端使用相关性ID将响应与请求进行匹配。使用直接支持请求/响应的IPC机制通常会更容易。

同步,请求/响应IPC

当使用基于请求/响应的同步IPC机制时,客户端会将请求发送到服务。该服务处理请求并发送回响应。其他客户端可能使用异步的,事件驱动的客户端代码,这些代码可能由Futures或Rx Observables封装。但是,与使用消息传递时不同,客户端假定响应将及时到达。有许多协议可供选择。两种流行的协议是REST和Thrift。首先让我们看一下REST。

REST

REST是(几乎始终)使用HTTP的IPC机制。REST中的一个关键概念是一种资源,通常代表一个业务对象,例如客户或产品,或业务对象的集合。REST使用HTTP谓词来操纵资源,这些谓词是使用URL引用的。


image.png

Apache Thrift

相关文章

  • AS下的进程间通信的实现

    前言:今天学习了进程间的通信,感觉实现比较繁琐的,于是在这记录一篇如何实现进程间的通信。 补充:本地服务:运行在自...

  • 微服务进程间通信 学习记录

    学习文章: https://www.nginx.com/blog/introduction-to-microser...

  • IPC机制

    仅做个人学习记录 什么是IPC? inter-process-communication 进程间通信(跨进程通信)...

  • linux进程间通信(1)

    一、进程通信概述 1、什么是进程间通信?什么是线程间通信? 进程间通信: 进程间通信就指的是用户空间中进程A与进程...

  • 微服务-进程间通信

    简介 在单体应用中,各模块间是直接通过编程语言调用函数来直接调用的。但在微服务这种分布式应用中,每个服务实例都是一...

  • Android进程间通信(四)——系统服务注册到servicem

    Android进程间通信(三)——系统服务管理进程servicemanager启动源码分析[https://www...

  • 第二十三章 进程间通信介绍(一)

    本章目标: 进程同步与进程互斥 进程间通信目的 进程间通信发展 进程间通信分类 进程间共享信息的三种方式 IPC对...

  • 进程间的通信

    进程间的通信主要分为本机器进程间的通信和不同机器间进程的通信。本文主要描述本机进程间的通信。 一、传统Linux的...

  • IPC机制(五)——Binder原理分析(一)

    跟着《Android艺术开发探索》一书学习了android中的进程间通信,刚好和最近学习操作系统的进程间通信做了比...

  • AIDL_Service_跨进程通信

    AIDL——进程间通信(必须用绑定服务)android interface defination language...

网友评论

      本文标题:微服务进程间通信 学习记录

      本文链接:https://www.haomeiwen.com/subject/alhxuhtx.html