调用三方的注意事项

三方包括什么

  • 狭义上的三方:外部提供的rpc、http接口。
  • 广义上的三方:sdk、存储、消息队列、配置中心等外部团队维护的组件。

为什么要格外注意对三方依赖的处理

  • 归属于外部团队甚至外部公司,相比自身更加不可控,容易出现:
    1. 排查问题效率低。需要外部协助排查,效率较低,甚至可能会造成双方互相推卸责任,更加低效。
    2. 稳定性不可预知。不清楚具体实现,可能非常脆弱。

注意事项有哪些

编码注意点

必然导致业务功能无法正常使用

  1. 仔细阅读三方接口的文档,思考下面4个问题,如有疑问立刻询问对方接口人,不能去猜测应该怎样:
    1. 自己的项目能否使用三方提供的调用方式,如http、rpc、sdk。如果无法通过上述方法接入,考虑其他接口或者自行适配。
    2. 请求和响应的参数含义是什么,怎么和自己项目中的字段映射上。
    3. 调用三方前,需要对哪些参数做校验,确保接口调用的有效性。如根据id查询xx这种场景,id必然不能为空。
    4. 三方响应后,如何处理异常。
      1. 需要处理哪些错误码和怎么处理。如确认参数异常的错误码,识别该错误码包装成三方BizException抛出,无须多次重试。
      2. 如果抛超时或者其他未识别的错误,怎么处理。如读接口包装成三方SysException抛出,写接口重试、调用回滚接口、卡住人工介入。
      3. 必填字段没有返回,或者返回预期之外的值怎么处理。如查单据类型没有返回,或者返回了未知的单据类型,包装成三方BizException抛出。

设计注意点

无法处理极端场景,给后续迭代埋坑

  1. 扩展性
    1. 抽象业务对象,而不是直接使用三方交互的DTO做业务逻辑,避免三方接口切换使用新的DTO对象,整个项目需要大改。如使用DDD设计领域对象和防腐层。
  2. 可用性
    1. 合理设置超时时间,避免三方接口经常超时。如国内接口默认1s响应,但是调用海外服务,或者国内其他供应商的写接口,可以延长到10s以上。
    2. 合理重试,避免网络偶尔抖动的影响。需要注意:
      1. 网络超时可以重试,业务异常单独分析,可能重试没有意义
      2. 下游需要保证幂等,或者能否处理成幂等。读接口天然幂等,写接口需要单独分析,可能需要识别幂等错误码。
      3. 重试次数需要限制,避免过多的重试会造成读写扩散,打挂下游。比如超过3次人工介入等。
    3. 合理设置限流、熔断阈值,避免打挂三方。如大流量场景,和三方对齐是否需要限流,设置成多少qps,是否可以熔断,错误率超过多少可以熔断。
    4. 制定降级方案,避免主流程被拖挂。梳理强弱依赖,强依赖读请求读容灾存储,写请求异步消息补偿;弱依赖缩短超时时间,如100ms两次重试,或者手动熔断。
    5. 监控告警,避免线上故障无人处理。如校验入参异常、未知响应打error,error日志触发告警;除非流量较大或安全要求,打印请求和响应日志,方便排查问题。
  3. 安全
    1. 敏感信息加密,避免泄露。如用户信息需要加密存储,对公司外部系统加密传输。
  4. 性能
    1. 批量读写场景并行化。如每批x个配置化,分批请求三方。
    2. 合理使用缓存。缓存命中率较高如读写比超过2,数据不经常变更且略微滞后影响不大时,使用本地缓存或者分布式缓存。
    3. 异步化请求。无须关注结果,不影响主流程的三方请求,用线程池或者mq异步处理。
  5. 伸缩性
    1. 原则上不请求具体的ip,避免Ip改动或者增减需要调用方调整。三方只能提供Ip直连的方式例外。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Monkey:提升 Android 应用稳定性与性能的利器

Monkey 测试工具是一种用于自动化 Android 应用程序的随机事件生成器。它可以帮助开发人员发现应用程序中的错误和漏洞,提高应用程序的稳定性和可靠性。本文将介绍 Monkey 测试工具的基本概念、使用方法以及一些常见的应用场景。 一、Monkey 测试工具的基本概念 1…

案例介绍|钡铼助力2023年全国职业院校技能大赛工业网络智能控制与维护赛项

如今,越来越多的企业开始意识到数字制造和工业物联网已经成为工业自动化中大规模生产的核心驱动力。这其中,工业网络作为基础设施,是实现工厂设备联网与数据采集,建设数字工厂的基础和前提,甚至成为关乎数字工厂能否真…

leetcode47,leetcode491,leetcode40,leetcode90,系列问题包你懂!!!Trie树对于排列问题、组合等结果集去重的应用

leetcode47. 全排列 II,leetcode491. 非递减子序列,leetcode40. 组合总和 II,leetcode90. 子集 II 题目 不过多赘述 思路 实际上这几题是相同的,都是求一个结果集合,然后集合中的元素不能重复。并且每一个元素都满…

给您的应用添加弹窗

概述 在我们日常使用应用的时候,可能会进行一些敏感的操作,比如删除联系人,这时候我们给应用添加弹窗来提示用户是否需要执行该操作,如下图所示: 弹窗是一种模态窗口,通常用来展示用户当前需要的或用户必须…

thinkphp学习02-目录结构、控制器、路由、配置文件

目录结构 www WEB部署目录(或者子目录) ├─app 应用目录 │ ├─controller 控制器目录 │ ├─model 模型目录 │ ├─ ... 更多类库目录 │ │ │ ├─common.php 公共函数文件 │ └─event.ph…

鸿蒙OS:不止手机,是物联网应用开发

鸿蒙开发是华为自主研发的面向全场景的分布式操作系统,旨在将生活场景中各类终端进行整合,实现不同终端设备间的快速连接、资源共享、匹配合适设备、提供流畅的全场景体验。 鸿蒙开发具有以下特点: 面向全场景:鸿蒙系统能够覆盖…

循环平稳信号分析方法在旋转机械设备状态监测和故障诊断中的应用

旋转机械设备是现代社会中不可或缺的重要组成部分,广泛应用于航空航天、汽车制造、电力系统等领域。然而,由于旋转机械设备的复杂性和工作环境的恶劣性,其运行过程中可能出现各种故障,导致设备性能下降甚至发生事故。因此&#xf…

【51单片机】独立按键控制LED灯

不同于上篇文章只用代码控制,这次我们要再加上独立按键一同控制LED灯 目录 独立按键控制LED亮灭:代码实现: 独立按键控制LED状态:代码实现: 独立按键实现二进制LED显示:代码实现: 独立按键控制…

超声波模块的驱动(STM32、51单片机等)

一、前言 本文旨在分享单片机对超声波模块的驱动,测量距离和显示 二、超声波的驱动 1、超声波模块 2、模块性能 (1)TCT40-16T/R1 压电陶瓷超声传感器(通用型) 3、接口定义 Vcc、 Trig(控制端&#xff09…

FreeRTOS移植详解

一、前言 本文旨在讲解FreeRTOS在STM32单片机上的移植步骤,对于FreeRTOS在其他单片机上的移植已具有一定的参考意义。相信读者在看完这篇文章后,一定会有所收获! 文末附有相关资料连接,有需要的读者可以自行下载。 二、FreeRTOS源…

OpenSource - 基于Netty的网络扩展库HServer

文章目录 概述官网Hserver的理念特点原理图代码案例HelloWorld 概述 HServer是一个基于Netty开发网络扩展库.使用插件方式来扩展我们的业务 HServer提供 web,gateway,rpc 等插件 同时用户也可以自定义插件,来完成各种各样的业务场景。 官网 https://gitee.com/HSe…

1018:奇数偶数和1028:I love 闰年!和1029:三角形判定

1018:奇数偶数 要求:输入一个整数,判断该数是奇数还是偶数。如果该数是奇数就输出“odd”,偶数就输出“even”(输出不含双引号)。 输入样例:8 输出样例:even 程序流程图&#xff1a…

支付宝扫码(Easy版)支付实现

文章目录 一 技术准备1.1 二维码技术(java)1.2 支付宝沙箱环境准备1.3 内网穿透 二 支付宝支付相关知识2.1 各种支付方式2.2 扫码付接入流程2.3 系统交互流程(时序图)2.4 加密逻辑 三 扫码支付实现3.1 添加maven依赖(Easy版)3.2 完…

揭秘六大热门认证考试

六大热门认证考试是什么❓今天为大家详细解读PMP、ACP、CDGA、软考中项、软考高项、NPDP、CISP等热门认证考试,让你不再彷徨👇 1️⃣PMP 👑PMP认证是全qiu公ren的项目管理专业认证,旨在评估项目管理人员在项目过程中所需的知识、技…

05 Ciso模拟器连接腾讯云物联网开发平台

Ciso声明:本篇文章基于使用腾讯云物联网平台连接自定义esp8266物联网设备(腾讯连连控制开关实现) - CSDN App改编 一、总体概览 功能描述: 使用腾讯连连小程序进行控制, Alarm(警铃):开的时候&#xff…

Linux 定时任务管理

这篇笔记主要记录一些常见的Linux定时任务 一、定期任务 crontab 最小粒度,1分钟 守护进程 crond 每分钟扫描一次下列文件 /var/spool/cron/* 命令生成 /etc/crontab 文本文件 /etc/cron.d/* 自定义的定时任务 任务格式:分…

【软考中级-软件设计师】day3:程序设计语言基础知识

概述 练习题 程序设计语言的基本成分 练习题 编译程序基本原理 名词解释 词法分析 词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作…

鸿蒙开发基础运用(ArkTS)-健康生活APP

健康生活应用,主要功能包括: 用户可以创建最多6个健康生活任务(早起,喝水,吃苹果,每日微笑,刷牙,早睡),并设置任务目标、是否开启提醒、提醒时间、每周任务频…

迟到的总结:回望 2023 年,期盼 2024 新机会、新挑战

🔭 嗨,您好 👋 我是 vnjohn,在互联网企业担任 Java 开发,CSDN 优质创作者 📖 推荐专栏:Spring、MySQL、Nacos、RocketMQ,后续其他专栏会持续优化更新迭代 🌲文章所在专栏…

航空公司管理系统(迷你版12306)

要求 今天分享一个之前辅导留学生的作业,作业要求如下: Project E: Airways Management System Overall description: Your team is employed by an Airways company for the implementation of a computer system responsible for a large part of th…