【系统设计】主动查询与主动推送:如何选择合适的数据传输策略
基本描述总结
主动查询机制:系统A主动向系统B请求数据,采用严格的权限控制和身份认证,防止未授权的数据访问。数据在传输过程中使用TLS加密,并通过动态脱敏处理隐藏敏感信息。
推送机制:系统B在数据更新时主动向系统A推送数据,在推送前对敏感数据进行脱敏处理,确保数据安全。数据传输采用加密和数字签名,接收方确认数据完整性。
场景描述
我方(提供数据侧),客户侧(需要获取数据侧),假设客户需要我方提供相关业务数据,可以通过俩个方式处理:
主动查询机制:提供公开可访问的接口,由客户决定访问时间和数据处理
主动推送机制:在特定的业务事件触发时,主动推送给与客户约定的推送接口或者消息队列上。
主动查询机制分析
主动查询机制是指系统A需要从系统B获取数据时,由系统A主动向系统B发起数据请求。由请求方(系统A)主动发起数据请求。请求前必须通过严格的身份验证和权限控制,防止未授权的数据访问。
【身份认证与授权控制】
目的: 确保只有经过验证和授权的用户或系统可以访问数据,防止未授权的数据泄露或篡改。
方式:
- 多因素认证(MFA):要求请求方在发起请求时进行多因素认证,如使用用户名/密码+动态验证码或硬件令牌,以增加身份验证的安全性。
- 基于OAuth 2.0的认证:采用OAuth 2.0协议,通过授权服务器颁发访问令牌(Access Token)来验证请求方身份,令牌中包含用户的权限范围、有效时间等信息。
- 角色和权限管理(RBAC/ABAC):使用基于角色(RBAC)或属性(ABAC)的访问控制策略,根据用户或系统的角色、属性和上下文,决定其访问哪些数据和服务的权限。
- 接口非对称加密:在非对称加密中,系统B创建一对密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。以下是非对称加密的机制设计步骤:
公钥:公开给系统A(请求方),用于加密请求数据或验证数字签名。
私钥:由系统B(响应方)安全保管,用于解密请求数据或生成数字签名。
【数据脱敏与隐私保护】
目的: 保护用户隐私,确保敏感数据在不同权限级别的请求方之间得到合理控制。
- 动态数据脱敏:在响应请求时,根据请求方的权限级别,实时对返回的数据进行脱敏处理。例如,将敏感信息(如身份证号、信用卡号)只显示部分内容,隐藏其余部分。
- 敏感数据标记与分级:在数据层面对敏感数据进行标记和分类,例如:高度敏感、中度敏感和公开数据。根据数据类型和请求方权限,选择合适的脱敏规则。
- 图片和文件的脱敏:对于包含敏感信息的图片或文件(如身份证、人脸、证件图片等),使用图像处理算法进行模糊化或打码处理。
- 图片的过期机制:在系统设计中,增加图片的过期机制可以有效地控制敏感数据的存储时长,防止数据滥用和泄露,并与客户约定在获取到数据后即时下载保存。通过设计图片过期机制,可以有效管理图片的存储生命周期,增强数据安全和合规性,确保系统的安全和高效运行。
【数据传输加密与完整性验证】
目的: 确保数据在传输过程中不被非法截取、篡改或伪造,维护数据的机密性和完整性。
· 使用TLS加密:所有的请求和响应数据在传输过程中使用TLS(Transport Layer Security)加密协议,以防止数据被中间人截获或篡改。
· 数据签名与完整性验证:使用数字签名(如HMAC或基于PKI的数字签名)来确保数据的完整性和来源的真实性。接收方在收到数据后,对签名进行验证,确保数据未被篡改。
· 支持HTTP/2或HTTP/3协议:这些协议在提高传输效率的同时,提供更强的安全性,减少潜在的攻击面。
【请求频率控制与速率限制】
目的: 防止恶意用户通过频繁的请求导致服务器资源耗尽,同时保障系统的稳定性和可用性。
- 速率限制(Rate Limiting):在服务器端设置每个用户或IP的请求速率限制(例如每分钟100个请求),防止恶意用户频繁访问导致服务器过载或被攻击。
- 请求队列与优先级:对请求进行排队处理,根据请求的优先级(如系统管理员请求、普通用户请求)决定处理顺序,防止高优先级请求被低优先级请求阻塞。
- 自适应阻塞机制:对于短时间内大量的重复请求或异常请求,动态调整其阻塞策略,避免潜在的DDoS(分布式拒绝服务)攻击。
【安全审计与日志记录】
目的: 提供系统行为的可追溯性,及时发现潜在的安全威胁和违规操作,提升整体安全性。
- 详细日志记录:记录每个查询请求的相关信息,包括请求时间、来源IP、用户ID、请求参数、响应结果等。所有的日志都应加密存储,以防止被篡改
- 日志分析与监控:定期分析日志,利用机器学习或规则引擎检测异常行为,如频繁的失败请求、异常的数据访问模式等。
- 审计追踪:对于关键操作(如数据导出、大批量数据查询等),需要进行审计追踪,记录详细的操作历史,支持事后审计和分析。
主动推送机制分析
在主动推送机制中,由数据提供方(系统B)主动将更新的数据推送给请求方(系统A),这种机制通常用于需要及时将数据变化通知到其他系统的场景。在设计主动推送机制时,需要考虑多方面的因素,确保数据的安全性、可靠性、实时性和系统的扩展性。
数据加密与传输安全,数据脱敏和过期机制等和数据查询机制类似,都是需要考虑的点。
推送方式
重试机制
目的: 提高数据推送的可靠性,确保在网络波动或系统故障情况下,数据能够最终一致地到达接收方。
- 消息队列管理:使用消息队列(如Kafka、RabbitMQ)来管理推送数据,以提高数据传输的可靠性和系统的扩展性。消息队列应支持持久化和分布式架构,确保在服务故障或重启后消息不会丢失。
- 重试策略:当推送失败时,系统B应实现重试机制,按照一定的重试策略(如指数回退、最大重试次数)重新尝试发送数据,确保数据最终被成功接收。
- 幂等性支持:确保每条推送消息具有唯一标识(如UUID),接收方能够识别重复的消息并进行去重处理,避免重复消费导致的数据不一致。
推送频率控制与限流
目的: 控制数据推送的频率和数量,防止系统过载,保障服务质量和系统稳定性。
设计要点:
- 限流与速率限制:设置每个接收方的推送速率限制(如每秒钟的推送次数上限),防止系统过载或被滥用。限流策略可以基于接收方的优先级、网络状况等动态调整。
- 批量推送与合并:在数据频繁更新的情况下,可以采用批量推送策略,将多个小数据合并成一个大数据包进行推送,减少网络请求数量,提高推送效率。
- 推送优先级管理:根据推送数据的类型或重要性,设置不同的推送优先级。对于重要数据(如紧急告警或关键事件),应优先推送,确保及时到达接收方。
推送确认与回执机制
目的: 确保推送数据被成功接收和处理,提高数据传输的可靠性和可追溯性。
- 消息确认:系统A在接收到推送数据后,应发送确认回执给系统B,确认消息已成功接收和处理。可以使用HTTP状态码(如200 OK)或自定义协议的确认消息格式。
- 失败处理:如果系统A没有在规定时间内返回确认回执,系统B应触发重试机制或记录该次推送失败,并根据失败原因采取相应措施(如告警或降级处理)。
- 可靠的交付保证:系统B应根据推送数据的重要性,选择不同的交付策略(如确保至少一次交付、确保最多一次交付或精确一次交付)。
其他考虑因素
- 日志记录与监控:记录所有推送操作的详细日志,包括数据内容、推送时间、接收方信息、推送结果等,支持事后审计和异常分析。
- 安全性与合规性:在设计中应遵循相关的数据保护法律法规,确保推送数据的存储、传输和处理符合合规要求。
- 系统扩展性与负载均衡:支持多节点部署和负载均衡机制,确保系统能够扩展以处理大量并发推送请求。
- 在主动推送机制中,处理重复数据推送是一个重要的设计考量。重复数据可能会因网络重试、系统故障、消息队列重复投递等原因发生,导致数据的不一致性和冗余。有效的重复数据处理机制可以确保数据的一致性和准确性
相关文章:

【系统设计】主动查询与主动推送:如何选择合适的数据传输策略
基本描述总结 主动查询机制:系统A主动向系统B请求数据,采用严格的权限控制和身份认证,防止未授权的数据访问。数据在传输过程中使用TLS加密,并通过动态脱敏处理隐藏敏感信息。 推送机制:系统B在数据更新时主动向系统…...

mac 安装brew并配置国内源
前置条件 - Xcode 命令行工具 一行代码安装Homebrew 添加到路径(PATH) - zsh shell为例 背景介绍 最近重装了我的MAC mini (m1 芯片), 很多软件都需要重新安装,因为后续还需要安装一些软件,所以想着安装个包管理软件 什么…...

Temu官方宣导务必将所有的点位材料进行检测-RSL资质检测
关于饰品类产品合规问题宣导: 产品法规RSL要求 RSL测试是根据REACH法规及附录17的要求进行测试。REACH法规是欧洲一项重要的法规,其中包含许多对化学物质进行限制的规定和高度关注物质。 为了确保珠宝首饰的安全性,欧盟REACH法规规定&#…...

mysql高级sql
文章目录 一,查询1.按关键字排序1.1按关键字排序操作(1)按分数排序查询(不加asc默认为升序)(2)按分数降序查询(DESC)(3)使用where进行条件查询(4)使用ORDER BY语句对多个字段排序 1.2使用区间判断查询(and/…...

Linux CentOS 7.9 安装mysql8
1、新建mysql文件夹 数据比较大,所以我在服务器另外挂了一个盘装mysql,和默认安装一个道理,换路径即可 cd ../ //创建文件夹 mkdir mysql //进入mysql文件夹 cd mysql 2、下载mysql8.0安装包并解压、重命名 //下载安装包 wget https://dev…...
替代 Django 默认 User 模型并使用 `django-mysql` 添加数据库备注20240904
替代 Django 默认 User 模型并使用 django-mysql 添加数据库备注 前言 在 Django 项目开发中,默认的 User 模型虽然能够满足许多基础需求,但在实际项目中我们常常需要对用户模型进行定制化。通过覆盖默认的 User 模型,我们可以根据具体的业…...

三维激光扫描点云配准外业棋盘的布设与棋盘坐标测量
文章目录 一、棋盘标定板准备二、棋盘标定板布设三、棋盘标定板坐标测量一、棋盘标定板准备 三维激光扫描棋盘是用来校准和校正激光扫描仪的重要工具,主要用于提高扫描精度。棋盘标定板通常具有以下特点: 高对比度图案:通常是黑白相间的棋盘格,便于识别。已知尺寸:每个格…...

【Python知识宝库】文件操作:读写文件的最佳实践
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、文件读取1. 使用open函数2. 逐行读取3. 使用readlines和readline 二、文件写入1. 写入文本2. 追加内容3. 写入…...

Chapter 13 普通组件的注册使用
欢迎大家订阅【Vue2Vue3】入门到实践 专栏,开启你的 Vue 学习之旅! 文章目录 前言一、组件创建二、局部注册三、全局注册 前言 在 Vue.js 中,组件是构建应用程序的基本单元。本章详细讲解了注册和使用 Vue 的普通组件的两种方式:…...

u盘显示需要格式化才能用预警下的数据拯救恢复指南
U盘困境:需要格式化的紧急应对 在数字信息爆炸的时代,U盘作为便携的数据存储介质,承载着我们工作、学习乃至生活中的大量重要资料。然而,当U盘突然弹出“需要格式化才能用”的提示时,这份便捷瞬间转化为焦虑与不安。这…...

还不懂BIO,NIO,AIO吗
BIO(Blocking I/O)、NIO(Non-blocking I/O)和 AIO(Asynchronous I/O)是 Java 中三种不同的 I/O 模型,主要用于处理输入 / 输出操作。 一、BIO(Blocking I/O) 定义与工作原…...

物联网——DMA+AD多通道
DMA简介 存储器映像 某些数据在运行时不会发生变化,则设置为常量,存在Flash存储器中,节省运行内存的空间 DMA结构图 DMA访问权限高于cpu 结构要素 软件触发源:存储器到存储器传输完成后,计数器清零 硬件触发源&…...

Vue 中 watch 和 watchEffect 的区别
watch 和 watcheffect 都是 vue 中用于监视响应式数据的 api,它们的区别在于:watch 用于监视特定响应式属性并执行回调函数。watcheffect 用于更通用的响应式数据监视,但回调函数中不能更新响应式数据。Vue 中 watch 和 watchEffect 的区别 …...
pip install pyaudio sounddevice error: externally-managed-environment
shgbitaishgbitai-C9X299-PGF:~/pythonworkspace/ai-accompany$ pip install pyaudio sounddevice error: externally-managed-environment This environment is externally managed ╰─> To install Python packages system-wide, try apt installpython3-xyz, where xyz …...

HTML 转 PDF API 接口
HTML 转 PDF API 接口 网络工具 / 文件处理 支持网页转 PDF 高效生成 PDF / 提供永久链接。 1. 产品功能 超高性能转换效率;支持将传递的 HTML 转换为 PDF,支持转换 HTML 中的 CSS 格式;支持传递网站 URL,直接转换页面成对应的 …...

http://localhost:15672/ 无法访问
注意erlang版本和rabbitmq的版本要保持兼容 rabbitmq和erlang对应关系如下:https://www.rabbitmq.com/which-erlang.html 目前我选择的erlang版本是:otp_win64_24.3.3,rabbit版本是:rabbitmq-server-3.10.18.exe 如果两者之间的版…...

6.3图的遍历
图的遍历是指从某点出发,按照某种搜索方式沿着边访问图中所有节点 图的遍历算法主要有两种:广度优先,深度优先 都需要辅助数组visited[]来记录节点是否被访问过 6.3.1广度优先搜索 like层次遍历,需要辅助队列 代码实现 #include<stdio.h> #define maxnum 15 bool vi…...

2024数学建模国赛选题建议+团队助攻资料(已更新完毕)
目录 一、题目特点和选题建议 二、模型选择 1、评价模型 2、预测模型 3、分类模型 4、优化模型 5、统计分析模型 三、white学长团队助攻资料 1、助攻代码 2、成品论文PDF版 3、成品论文word版 9月5日晚18:00就要公布题目了,根据历年竞赛题目…...
大学课程-人机交互期末复习
绪论 什么是人机交互技术?⭐⭐ 是指关于设计、评价和实现供人们使用的交互式计算机系统,并围绕相关的主要现象进行研究的学。狭 义的讲,人机交互技术主要是研究人与计算机之间的信息交换,它主要包括人到计算机和计算机到人的 信息…...

畅游5G高速网络:联发科集成Wi-Fi6E与蓝牙5.2的系统级单芯片MT7922
这周末,除非外面下钞票,否则谁也拦不住我玩《黑神话悟空》(附:两款可以玩转悟空的显卡推荐) IPBrain平台君 集成电路大数据平台 2024年09月03日 17:28 北京 联发科一直以创新技术追赶市场需求…… “不努力向前游就会被海浪拍回岸边…” 芯片设计公司产品层出不穷,想要站…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...