外部系统交互设计原则探讨
一 规避系统间依赖
任何外部系统都是不可靠的
假设你要做的是A系统,某个数据需要到B系统去查。考虑到:
- 自己系统是有qps指标要求的
- 其它系统都是不可靠的
那么,是不是必须一定
要到B系统呢?能不能做一份数据冗余呢?将B系统中数据同步到自己系统,这样,不管B系统怎么样,自己系统都不会有问题了。
二 尽量是作为依赖提供方
作为上游,而不是下游。宁可影响到别人,而不要被别人所影响
如果实在无法避免系统间依赖,那也尽量是做为上游的服务提供方,而非做下游的服务调用方。上游接口错了,会污染到下游,宁可做污染的人,也不要被别人所污染。
三 能不做的尽量不做
- 非自己业务范畴一概不做。
- 老数据,老产品能不做尽量不做。
四 时刻为外部异常做好准备
多系统间系统调用是无法保证数据一致性的。无论是外系统调用你还是你调用外系统,如果外系统调用你,如果你失败了,那么他的数据无法保证一致;同理,如果是你调用外系统,那么他的系统失败了,你的数据就有问题了。
- 如果是外部系统调用
在数据入口处就做好记录,做一个状态机,当你执行成功后将状态更改为成功。同时,外部系统也应该做一个数据反查或者数据推送接口,查询数据是否成功,或者由我们这边推送状态。 - 如果是调用外部接口
如果是本系统调用外部接口,特别是外部系统变更,比如涉及到插入或者修改(查询不算),那么是不是需要要求外部系统成功后做一个推送?或者自己这边做一个查询,来轮询接口的调用情况。
大杂烩
所学甚杂
推荐阅读
人工智能/大数据就业前景及优劣势分析
总述 职位少,要求高,人工智能落地困难,决定了就业可能会是一个大问题 全国范围内的人工智能的职位是183 而Java是10000+ (因lagou并不展示总数,因此该数据从请求分析而来) 因此岗位数量与Java大概是60倍的差距...
方老司赞 1阅读 5.6k
Dubbo架构设计与源码解析(三)责任链模式
责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传...
京东云开发者赞 3阅读 727
vue脚手架多页自动化生成实践
在前端开发过程中,常常面对多种业务场景。到目前为止,前端对于不同场景的处理通常会采用不同的渲染方案来组合处理,常见的渲染方案包括:CSR(Client Side Rendering)、SSR(Server Side Rendering)、SSG(Static ...
维李设论赞 1阅读 705
深入解析开务数据库分布式 SQL 引擎架构的五大服务组件
与传统关系型数据库相比,分布式数据库系统具有多集群、多节点、高并发等特性,这就需要分布式数据库的 SQL 引擎能够在满足用户常规的 SQL 请求以外,提供多集群、多节点协同计算的能力,从而提高查询效率。本文...
KaiwuDB阅读 846
单测在商家前端业务中的实践
商家系统是提供给得物商家在得物平台上可以稳定运营的服务抓手,前端代码也伴随着系统的发展而不断壮大。这样将导致文档却更新不及时,最后想再通过这些文档回溯业务逻辑也非常困难。
得物技术阅读 820
手写模拟Spring底层原理-Bean的创建与获取
大家好,相信大家对Spring的底层原理都有一定的了解,这里我们会针对Spring底层原理,在海量的Spring源代码中进行抽丝剥茧手动实现一个Spring简易版本,来促进我们对Spring架构有个更深的理解,对Spring的常用功...
京东云开发者赞 1阅读 386
BadgerDB 原理及分布式数据库的中应用与优化
Badger[1] 是基于论文:WiscKey: Separating Keys from Values inSSD-conscious Storage[2] 的思想利用 Go 语言进行设计实现的。
KaiwuDB阅读 744
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。