前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浅析多服务在分布式系统下多事务通信处理机制方案

浅析多服务在分布式系统下多事务通信处理机制方案

原创
作者头像
粲然忧生
发布于 2022-08-01 13:38:16
发布于 2022-08-01 13:38:16
4550
举报
文章被收录于专栏:工程师的分享工程师的分享

分布式系统间的事务处理,一直是一个有意思的课题,这里有很多的文章去分析,这里笔者也有些思考,下面主要从消息队列、消息通道的角度说下自己的思考:

本着由易至难、由抽象到具体的原则,首先定义下一个简单业务场景:

假定有一个平台,里面有微服务A,微服务B,两个服务均提供外部接口,一个负责更新资源,一个负责提供资源服务,可以看到,由于两个服务存在关联(比如,A更新资源后,需要通知B拉取最新的资源),所以需要一定的内部通信机制,这是一个比较常见的平台服务场景,如图

当然这里可以再复杂一下,把分布式的因素加进来,为了方便举例说明,这里只将微服务B变为分布式的微服务,如图:

第一个要解决的问题:选择什么样的内部通信机制:

内部通信通道有很多个选择,比如HTTP、RPC、RedisKafka(类似的数据队列)、数据库

其中,同步的有:HTTP、RPC、Redis,异步的为:Kafka(类似的数据队列)、数据库,由于系统希望能够实时提供最新的资源服务,故选择同步通信机制

从服务间通信方式上,一般使用RPC比较多,特别是RPC支持跨语言的通信后,迅速成为业界的新宠,也是比较成熟的方案

但由于微服务A和微服务B都有外部服务,所以服务的部分接口是对外开放的,而使用HTTPRPC服务,会增加内部服务对外化的风险(事实上,在复杂环境部署上,这样的金手指的案例很多),所以这里并不一定是第一选择

再看下这个场景,微服务A资源的更新了,只需要告知微服务B一声“要更新了”即可,而不是将最新的资源直接传过去,是比较简单的提醒通信,这样的通信比较轻量,即使在高并发下,也不太涉及边界数据竞争情况处理。那自然而然就会想到:Redis

场景就变成了这样的:

第二个要解决的问题:如何使用Redis做通信

redis作为通信方式有很多中,在分布式系统下最经典的场景就是分布式锁,即各个分布式的服务抢redis的唯一“锁key”赋值:

这种,基本上把redis作为外延内存来使用,把“锁”作为几个服务的“全局变量”,适用于同服务内部的简单通信,故不适用于这里。

另外一种是创建一个list,通过push和pop的方式获取内容:

似乎可以,但这里存在一个严重的问题,即不支持重复消费:消费者拉取消息后,这条消息就从 List 中删除了,无法被其它消费者再次消费,即不支持多个消费者消费同一批数据,在分布式系统下无法满足,也不能选择这里

还有一种,则是比较经典的发布—订阅者模式

它正好可以解决前面提到的第一个问题:重复消费,即多组生产者、消费者的场景

所以场景再次更新:

当然,看到这里,可能会有疑问,直接将最新的资源从微服务A给到微服务B可以吗?

答案是否定的,因为Pub/Sub 最大问题是:丢数据

特别是在以下三个场景中:消费者下线、Redis 宕机、消息堆积

这样就会对服务的稳定性造成比较大的挑战,所以还是需要持久化存储,同时要做资源更新的兜底任务:

第三个要解决的问题:收到信息后应该怎么做

从这个场景下,可能会觉得,收到信息就去更新资源就好了,其实这里是有坑的

刚才我们模拟的是微服务B是分布式服务,事实上,微服务A也可能是分布式服务,场景变成:

同时,这个通信机制是服务之间的约定,作为接收方,要天然不信任信息的频次和有效性,对应下来就是三种不信任:

1.信息发送的频次

2.信息的重复性

3.信息的丢失性

针对第三种,不仅仅是发送方的问题,也可能是redis的问题,所以需要一个定时拉取资源的兜底方案

针对第一种,拉去最新资源可能是一个耗时耗资源的操作,所以不能频繁拉去

针对第二种,重复的拉去也会导致资源消耗的浪费

所以针对第二种和第一种,就需要对接收的数据,进行防抖和去重,这里可以根据业务的需要进行整合,比较经典的方案是:

加一个定时器,判断即X秒内,微服务B收到需要更新范围Y的资源,这里就可以一定程度内避免了前两种情况

第四个要解决的问题:收到信息后的事件处理与服务内部事件处理资源抢夺怎么办

上图可以看到,通过数据整合和去重,可以降低事件处理的频次,降低资源的消耗

但在微服务B,可能不只一个事件通信,可能多个事件通信都用到了事件处理X(或者用到事件处理X的部分资源),也可能服务本身也会用到事件处理X(或者用到事件处理X的部分资源),由于收到信息的时间不可控,所以这里的事件处理X的资源使用时间也不可知,可能会造成资源抢夺,如下图:

这里,有两种解决方案:

一种是在公共资源和公共逻辑加锁,但这样增加了逻辑的复杂度,如果涉及读写锁等概念则会更加复杂

还有一种是将多个事件处理放入队列,这样也可以避免问题的发生

建议选后者,即:

最后,事实上,这里还可以更加复杂场景,我这里也是抛砖引玉额,如果有想继续的同学,欢迎交流

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
腾讯云服务器宙斯盾安全防护相关概念及安全产品概述
腾讯云宙斯盾安全防护(Aegis Anti-DDoS)基于腾讯海量业务十余年安全技术积累,为业务提供多层级全方位、高性价比的应对 DDoS 攻击威胁的防护方案,能够对各类网络攻击流量进行精准清洗,并将正常业务流量回送到业务服务器,防止 DDoS 攻击造成业务波动、服务中断、用户体验劣化等问题。同时,宙斯盾安全防护具备 T 级防护资源和专属防护集群,并可通过自定义高级安全策略,对特定攻击行为进行针对性防护。
用户5915142
2019/09/11
6.3K0
腾讯云服务器宙斯盾安全防护相关概念及安全产品概述
腾讯云BGP高防IP优惠--什么是 腾讯云BGP 高防 IP ?
BGP 高防 IP 是腾讯云面向所有用户推出的抗 DDoS 攻击的付费产品,支持任意源站位置,最高可达 900 Gbps 的 BGP 线路防护,能轻松有效应对 DDoS 、CC 攻击,确保业务稳定正常。
用户4465285
2019/07/24
19.3K0
腾讯云BGP高防IP优惠--什么是 腾讯云BGP 高防 IP ?
接入高防之后网站问题需要排查的有哪些?
接入高防之后,为了保证业务最大程度的稳定,确认问题所在,墨者安全建议在切换本地的测试。本地测试步骤为:
墨者安全筱娜
2019/04/18
1.2K0
什么是高防IP?
高防IP是针对互联网服务器在遭受大流量的DDOS攻击后导致服务不可用的情况下,推出的付费增值服务,用户可以通过配置高防IP,将攻击流量引流到高防IP,确保源站的稳定可靠。(无需转移数据,理论上任何主机都可以使用高防IP来防护DDOS攻击。)
德迅云安全--陈琦琦
2023/11/12
4700
高防服务器-腾讯云高防IP服务器
高防服务器实际上应该称为高防IP。因为起防护作用的是高防IP,无论你的业务是否在腾讯云,都可以使用腾讯云的高防IP
用户3570397
2019/08/06
23.3K0
什么是BGP高防?
大家都知道BGP高防是DDOS流量攻击的首选防御之一,那么BGP高防到底是什么?有什么优势呢?今天小墨给大家讲一下。 
墨者安全科技
2019/12/25
3.3K0
什么是BGP高防?
云高防ip服务器的优势特点有哪些?
DDoS高防IP是针对互联网服务器在遭受大流量DDoS攻击后导致服务不可用的情况下,推出的付费服务,用户可通过配置高防IP,将攻击流量引流到高防IP,确保源站的稳定可靠。下面天下数据小编为大家解析云高防ip服务器的优势特点。
习惯说一说
2019/08/05
20.2K1
EdgeOne安全守护神:您的网站安全,从此无忧!
在数字化浪潮中,网络安全已成为企业和个人必须直面的重大挑战。从DDoS攻击到恶意软件,从数据泄露到隐私侵犯,这些安全问题不仅可能导致巨大的经济损失,还可能损害品牌形象和用户信任。为了应对这一问题,许多网站选择使用CDN服务来分散流量并提高访问速度,但在遭遇大规模DDoS攻击时,CDN的高昂费用可能成为一个负担。此外,安装和维护各种Web应用防火墙(WAF)也是一种解决方案,但它们通常价格不菲。
不惑
2024/07/25
5406
EdgeOne安全守护神:您的网站安全,从此无忧!
大禹高防最佳部署实践
大禹高防产品由于其功能特点,一般都是置于业务入口处,业务对高防产品的接入质量较为敏感.同时因为客户业务的多样性,在各个场景下大禹产品的最佳接入方案也成为部署架构中的重要一环,该文章将对常见业务部署架构下高防产品接入的最佳实践做个说明.
安轲
2020/11/12
1.8K0
【玩转EdgeOne】下一代CDN简介及实操
边缘安全加速平台 EO(Tencent cloud EdgeOne,下文简称为 EdgeOne)基于腾讯边缘计算节点提供加速和安全的解决方案,可以为电商与零售、金融服务、内容资讯与游戏等行业保驾护航,提升用户体验。EdgeOne 作为腾讯云下一代的 CDN ,提供域名解析、动静态智能加速、TCP/UDP 四层加速、DDoS/CC/Web/Bot 防护、边缘函数计算等一体化服务。
Freedom123
2024/03/26
8540
腾讯云高防服务器 腾讯云BGP高防IP是如何防DDos和cc攻击的?
腾讯云高防服务器又称为腾讯云BGP高防ip,无论你的业务是否在腾讯云,都可以使用腾讯云提供的DDos及cc防护。如果 业务不在腾讯云,只需把需要防护的设备绑定腾讯云高防即可防护,无需任何配置。
追梦者
2019/01/14
20.2K0
腾讯云高防服务器 腾讯云BGP高防IP是如何防DDos和cc攻击的?
腾讯云网站管家WAF 一指禅
腾讯云网站管家优势陈述腾讯云网站管家:共享腾讯Web 安全防护能力,让受护用户Web 业务轻松部署腾讯业务安全级别防护能力
胡文翠
2018/07/31
8.7K1
腾讯云网站管家WAF 一指禅
从零开始快速接入 EdgeOne
本文将引导您如何在 EdgeOne 上添加站点并开启安全加速的全流程,帮助您快速上手了解如何接入 EdgeOne 服务。
腾讯云 EdgeOne
2023/09/12
8550
从零开始快速接入 EdgeOne
一封载着大礼包的感谢信,等你拆
一捧鲜花一个信封 载着我们的感恩之心 为你们奉上感恩节大礼包 拆礼包的分割线           腾讯云大禹 BGP 高防 IP 新品正式发布 1941年,美国国会正式将每年11月第四个星期四定为“
腾讯云安全
2018/06/12
9630
腾讯云大禹高防IP之客户端获取真实IP
腾讯云大禹高防IP产品可用来对客户的4/7层业务进行ddos攻击的防护,其中一个很常见的诉求是如何获取真实的客户端ip。本文章会就云上常见的各高防IP部署场景下如何获取真实ip来做说明。
安轲
2020/10/27
15K2
高防IP是什么?如何隐藏源站IP?如何进行防护?
高防IP是针对互联网服务器遭受大流量的DDoS攻击后导致服务不可用的情况下,推出的付费增值服务。用户在数据不转移的情况下,就可以通过配置高防IP , 将攻击流量引流到高防|P,确保源站的稳定可靠。高防IP采用的技术手段包括DDoS防护、WAF ( Web应用程序防火墙)等,它能够有效抵御来自互联网的各种攻击,例如: DDoS攻击、CC攻击、 SYNFlood攻击等。
德迅服务器抗D盾
2023/11/15
5970
高防IP是什么?如何隐藏源站IP?如何进行防护?
如何将 Discuz! Q 站点接入腾讯云 CDN ,加速站点访问
已成功 安装部署 Discuz! Q 站点 (opens new window)。
佛系豪豪吖
2023/02/23
6.6K0
如何将 Discuz! Q 站点接入腾讯云 CDN ,加速站点访问
高防IP是什么?有什么优势?
高防IP是指高防机房所提供的IP段,一种付费增值服务,主要是针对网络中的DDoS攻击进行保护。用户可以通过配置高防IP,把域名解析到高防IP上,引流攻击流量,确保源站的稳定可靠。
德迅服务器抗D盾
2023/11/11
3530
高防IP是什么?有什么优势?
使用高防后,服务器还是会受到攻击这是为什么?
近期听墨者安全的客服人员说有些受了DDOS攻击的用户反映,曾使用了某些公司的高防产品,服务器还是会受到攻击,说DDOS攻击防御防不住,为此对DDOS攻击防御产生了质疑。下面咱就分析下接入高防后,服务器还是会受到攻击这是为什么?
墨者安全筱娜
2019/04/12
1.3K0
使用高防后,服务器还是会受到攻击这是为什么?
BGP高防IP专业版产品介绍
资源整合,为单用户提供1.7T超大防护能力(未来可至3T以上、拥有业界最大BGP防护带宽资源)
腾讯云开发者社区
2018/08/01
2.8K0
BGP高防IP专业版产品介绍
推荐阅读
相关推荐
腾讯云服务器宙斯盾安全防护相关概念及安全产品概述
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档