系统设计-系统回调通知设计


很多公司的架构都存在与外界系统有交互,交互难免会有一些同步请求、回调通知等。且公司一般网络的出入口都是只有一个,而各个业务条线只要存在和外界系统有业务往来,都会存在回调通知,所以可以设计一个公司级别的回调通知,避免重复造轮子,提高科技中心效率,并能统一进行监控、告警等处理。

消息类型

系统之间的交互往往伴随着两大类型的调用,同步、异步调用。‌

同步
调用者需要等待消息通知方(服务提供者)的响应。
优点:时效性强,可以立即得到结果;
缺点:耦合度高,性能和吞吐能力较差,且在高并发场景下会导致资源浪费和级联失败问题;

异步
调用者无需等待消息通知方(服务提供者)响应,只需保证最终一致性即可。
优点:吞吐量高,耦合度低,能够避免级联失败,适合处理高并发情况;
缺点:架构复杂;

同步调用和异步调用的主要区别在于响应机制、资源利用效率,系统耦合性。异步调用我们可以借助一些中间件来保证消息可靠性。整体架构如下:
在这里插入图片描述

容错机制

集群容错机制是分布式系统中的一种关键技术,旨在确保在服务调用过程中即使部分服务实例出现故障,系统依然能稳定运行,如服务提供者故障、网络延迟等。通过配置不同的容错策略,系统可以在服务调用失败时自动切换到其他节点,从而保证服务的连续性和可用性‌。

常用容错机制有:

  • FailoverClusterInvoker:失败自动切换,当出现失败,重试其它服务器。
  • FailfastClusterInvoker:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
  • FailsafeClusterInvoker:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
  • FailbackClusterInvoker:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
  • ForkingClusterInvoker:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=“2” 来设置最大并行数。
  • BroadcastClusterInvoker:广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。

那这和系统回调有什么关系呢?换一个角度来看,系统回调也是RPC调用的一种方式,同步调用时,可以通过以上容错机制,提高系统可用性。异步调用时,一般采用衰减重试机制进行处理。

消息协议

作为一个公司级别的通用系统回调系统,提供多种消息协议支持也是不可避免的,常用的有:

  • HTTP/HTTPS:超文本传输协议。
  • Socket:Socket是一种用于实现网络通信的编程接口,通过套接字,应用程序可以进行网络连接、发送和接收数据。
  • WebSocket:WebSocket是一种全双工通信协议,通过单个TCP连接实现客户端和服务器之间的双向通信。
  • TCP:TCP是一种面向连接的、可靠的传输协议,通过建立可靠的连接来传输数据。
  • UDP:UDP是一种无连接的、不可靠的传输协议,通过数据报方式传输数据。

负载均衡

在进行消息回调时,如果系统回调地址存在多个时,还需要提供负载均衡算法,来获取调用服务地址。

监控&告警

一个完善的系统当然少不了监控和告警,在系统回调通知系统设计中,如异步通知失败,同步调用系统监控达到容错值等,都需要进行告警。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值