【弹力设计篇】聊聊异步通讯设计

news2024/10/7 2:21:10

为什么需要异步设计

刚开始参加工作,发现有一些API设计中回落数据之后,然后将数据写入到消息队列中,当时很是不理解为什么要这么做,直到后边系统学习消息队列之后才发现原来这其实就是异步处理,当流量很多的时候,可以通过消息队列进行缓存用户请求,后续下游系统根据自身处理水平消费。其实说白了排队设计也大多采用消息队列实现。
在这里插入图片描述
另一点就是当系统进行拆分后,系统的通讯就需要评判使用同步还是异步通讯。
同步通讯有点打电话,需要实时响应,而异步通讯类似发邮件,可以异步处理。两种方式各有千秋,但是总的来说,异步方式在处理超高吞吐量的时候更具备优势。

同步调用的问题

  • 同步调用需要被调用方的吞吐量不能消息调用方,否则被调用方会拖死调用方。整体同步调用链路由最慢的服务决定。
  • 同步调用需要保存现在context,如果调用层级过多,那么比较耗费资源。
  • 同步调用只能一对一,而异步可以一对多。
  • 同步调用就是 A->B 一旦B系统出现问题,整个链路就会出问题。

异步通讯相比于同步来说 1.可以增加系统的吞吐量 2.系统之间服务的解耦合 3.系统可以按照自己的速率进行处理。

异步通讯的三种方式

请求响应式

请求响应式的,发送方发送请求 接受方进行处理,如果处理时间短的话,可以基于一个请求的响应进行返回数据。这种就是同步方式。

异步的方式的话。一般来说有两种方式,
1.发送方定时去查询接口 查询有没有处理完毕
2.接受方处理完毕后,进行回调通知发送方。
在这里插入图片描述

通过订阅的方式

订阅模式就是接收方需要订阅发送方写入的队列,然后进行处理,发送方不需要直到对方处理的结果。
基于请求响应的方式其实是有数据往来,这种服务是有状态的,如果去掉服务的状态那么就只有事件了。
但是这种方式接收方需要订阅发送方的事件。有一定耦合。

通过Broker方式

通过一个中间人,引入一个Broker,发送方和接收方都不需要关心对方的存在
在这里插入图片描述
发送方写入消息到Broker,接收方订阅对应的Topic,然后进行消费,进行处理。
Broker需要保证几点
1.需要高可用,所以一般搭建的是一个集群模式。通过冗余来实现。
2.需要高性能,水平拓展。
3.需要持久化数据。
其实就是消息队列,Kafka,Rabbitmq等

异步通讯的设计重点

异步设计带来的好处

  • 提升系统的整体吞吐量,系统可以解耦合
  • 提高系统之间的隔离性,不会出现一倒倒一片
  • 利用Broker可以把抖动的吞吐量变成均匀的吞吐量,削峰。
  • 在部署、扩容和运维上可以做到服务不互相干扰

异步设计需要引入一个Broker

  • 这个Broker 高可用 (集群模式)高性能,以及消息顺序,消息丢失等问题引入 需要在业务上设计好
  • 异步通讯会导致流程上不那么直观,所以在梳理业务流程的时候,需要通过Topic进行梳理上下游系统之间的关系。
  • 服务间只通过消息交互,所以业务状态由一个总控方来管理,维护业务流程的状态变迁逻辑。
  • 消息传递过程中,TCP那样发送send和ACK机制,所以A服务发出一个消息之后,开始等待处理方的ACK。需要重传机制。以及需要处理方的幂等机制。

小结

本篇主要设计了弹力设计中异步设计的要点,聊了异步设计的好处和坏处 以及异步设计的几种方式请求响应,直接订阅和中间人订阅。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一张表中几列字段以不同的条件规则去统计计数展示实现思路设计

今天在写一个业务的时候,遇到这样一个需求 一、需求描述 一张表中其中几列字段需要以不同的条件规则去统计计数,求实现方式 因为项目业务涉及隐私,我就想了一个类似的情景 二、情景描述 有一张月考成绩表,包含学生和他的各科…

区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归多输入单输出区间预测

区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归多输入单输出区间预测 目录 区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归多输入单输出区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRBiGRU双向门控循环单元分位数回归…

EXCEL,如何比较2个表里的数据差异(使用数据透视表)

目录 1 问题: 需要比较如下2个表的内容差异 1.1 原始数据喝问题 1.2 提前总结 2 使用EXCEL公式方法 2.1 新增辅助列: 辅助index 2.2 具体公式 配合条件格式 使用 3 数据透视表方法 3.1 新增辅助列: 辅助index 3.2 需要先打开 数据透视表向导 …

基于CNN卷积神经网络的调制信号识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1. 卷积神经网络(CNN) 2. 调制信号识别 3.实现过程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 % 构建调制类型…

支付宝短视频平台创作分成激励项目

没想到支付宝也开通了中视频计划,这波羊毛算是蒿定了,最近啊,马爸爸火速上线了支付宝创作分成计划,明显就是抄的抖音中视频计划,目前还在内测阶段,补贴的力度非常大,错过的话就只能拍大腿了&…

Prometheus 的应用服务发现及黑河部署等

目录 promtool检查语法 部署Prometheus Server 检查语法是否规范 部署node-exporter 部署Consul 直接请求API进行服务注册 使用register命令注册服务(建议使用) 单个和多个注册,多个后面多加了s 在Prometheus上做consul的服务发现 部署…

windows安装linux

https://www.cnblogs.com/liuqingzheng/p/16271895.html 咱们安装linux系统是centos7 准备工作: 安装软件:vmware -------虚拟机 官网下载地址:下载 VMware Workstation Pro | CN 也可以从这里面下载 链接:https://pan.bai…

MySQL优化(面试)

文章目录 通信优化查询缓存语法解析及查询优化器查询优化器的策略 性能优化建议数据类型优化索引优化 优化关联查询优化limit分页对于varchar end mysql查询过程: 客户端向MySQL服务器发送一条查询请求服务器首先检查查询缓存,如果命中缓存,则立刻返回存…

行车遥控接线图

这个一般只有电工才会用。 主要是 【共线和总电】让人疑惑。 这图实际就是PLC的梯形图。 共电:接主电源。【它串联10A保险丝,再到继电器】 总电:它是所有继电器的公共端。【共电的继电器吸合,共电和总电就直通了。】共电的继电器…

Io进、线程——进程的基础

进程的基础 进程是计算机中最基本的执行单位,是程序在操作系统中的一次执行过程。每个进程都有自己的地址空间、数据栈、程序计数器等,相互之间独立运行,互不干扰。进程间的通信通过特定的机制来实现,进程的创建和撤销由操作系统…

详解Mybatis之动态sql问题

编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 文章目录 一. 在sql映射文件中如何写注释?二. 什么是动态sql?三. 动态sql常用标签有…

Vue项目如何生成树形目录结构

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、有兴趣的可以关注一手。 前言 项目的目录结构清晰、可以帮助我们更快理顺项目的整体构成。在写文档之类的时候也比较方便。生成树形目录的方式有多种,我这里简单介绍其中一种较为简单的实现 过…

CSP 2021入门级 第一轮 题目讲解

A: a进栈,直接出栈;b进栈,直接出栈;c进栈,直接出栈;d进栈,直接出栈;e进栈,直接出栈。 B:全进栈后全出栈。 C:a和b先进栈,然后直接出…

【雕爷学编程】MicroPython动手做(09)——零基础学MaixPy之人脸识别2

自己打包kfpkg,试着整了好几次,都是无法烧录,只好不做第七步了,直接把前面获得的人脸识别模型烧录了 烧录完成后,打开IDE串口,确认开发板Maixpy固件的版本,好像是前期的稳定版本V0.4.0 第九步&a…

idea中创建请求基本操作

文章目录 说明效果创建GET请求没有参数带有参数带有环境变量带有动态参数 说明 首先通过###三个井号键来分开每个请求体,然后请求url和header参数是紧紧挨着的,请求参数不管是POST的body传参还是GET的parameter传参,都是要换行的,…

Java版本spring cloud + spring boot 电子招标采购系统源码

营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标…

《MySQL》第十二篇 数据类型

目录 一. 整数类型二. 浮点类型三. 日期和时间类型四. 字符串类型五. 枚举值类型六. 二进制类型七. 小结 MySQL 支持多种数据类型,学习好数据类型,才能更好的学习 MySQL 表的设计,让表的设计更加合理。 一. 整数类型 类型大小SIGNED(有符号)…

网红项目AutoGPT源码内幕及综合案例实战(三)

AutoGPT on LangChain PromptGenerator等源码解析 本节阅读AutoGPT 的prompt_generator.py源代码,其中定义了一个PromptGenerator类和一个get_prompt函数,用于生成一个提示词信息。PromptGenerator类提供了添加约束、命令、资源和性能评估等内容的方法,_generate_numbered_l…

effective c++ 条款2

条款2 常量(const)替换宏(#define)指针常量类成员常量 枚举(enum)替换宏(#define)模板函数(template inline)替换宏函数 尽量用const,enum,inline替换#define 总结就是: 常量(const)替换宏(#define) // uppercase names are usually for macros #define ASPECT_R…

HTML基础 第一课

文章目录 什么是HTMLHTML规范标签的种类开闭合标签整合标签标签中的属性 我的第一个HTML 什么是HTML Hyper Text Markup Language 超文本标记语言 超文本:表示页面上的一切要素,正如Java中的万物皆对象一样,在网页中包含 普通的文本样式 结构 视频 音频…