外部系统交互设计原则探讨

一 规避系统间依赖

任何外部系统都是不可靠的
假设你要做的是A系统,某个数据需要到B系统去查。考虑到:

  1. 自己系统是有qps指标要求的
  2. 其它系统都是不可靠的

那么,是不是必须一定要到B系统呢?能不能做一份数据冗余呢?将B系统中数据同步到自己系统,这样,不管B系统怎么样,自己系统都不会有问题了。

二 尽量是作为依赖提供方

作为上游,而不是下游。宁可影响到别人,而不要被别人所影响
如果实在无法避免系统间依赖,那也尽量是做为上游的服务提供方,而非做下游的服务调用方。上游接口错了,会污染到下游,宁可做污染的人,也不要被别人所污染。

三 能不做的尽量不做

  1. 非自己业务范畴一概不做。
  2. 老数据,老产品能不做尽量不做。

四 时刻为外部异常做好准备

多系统间系统调用是无法保证数据一致性的。无论是外系统调用你还是你调用外系统,如果外系统调用你,如果你失败了,那么他的数据无法保证一致;同理,如果是你调用外系统,那么他的系统失败了,你的数据就有问题了。

  1. 如果是外部系统调用
    在数据入口处就做好记录,做一个状态机,当你执行成功后将状态更改为成功。同时,外部系统也应该做一个数据反查或者数据推送接口,查询数据是否成功,或者由我们这边推送状态。
  2. 如果是调用外部接口
    如果是本系统调用外部接口,特别是外部系统变更,比如涉及到插入或者修改(查询不算),那么是不是需要要求外部系统成功后做一个推送?或者自己这边做一个查询,来轮询接口的调用情况。

相关推荐