

开放API稳定性保障
source link: https://tech.kujiale.com/kai-fang-apiwen-ding-xing-bao-zhang/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

开放API稳定性保障
07 Nov 2023
阅读量:2次
酷家乐提供了一套对外的开放API能力,以支持将客户系统与酷家乐系统打通,来实现双方合作共赢。而在酷家乐内部,又分为开放API平台方(提供基础能力)和业务方(提供底层业务接口)。但业务方众多,变动频繁且不受控,一旦出现问题会直接影响客户系统且问题排查困难:
- 比如业务方接口多返回了一个字段,而作为平台方没有任何拦截措施,导致客户系统无法对这个字段进行解析,就有可能引发系统故障。
- 又比如客户系统进行压力测试,导致流量突然增大,如果没有干预可能引起整个服务崩溃进而影响其他客户的正常使用。
作为直接面对客户的开放API平台方,必须对底层的业务API进行管控。基于此,我们需要开放API业务有更高的稳定性保障能力。
- 对外的API接口文档所见及所得,接口返回字段不多也不少
- 接口异常问题第一时间发现,且通知到对应的开发人员
- 针对客户流量突增的状况能进行管控
分为事前管控,事后监控两部分
事前管控:流程管控、自动化卡点
事后监控:网关字段映射、线上流量巡检、异常流量限流
1.流程管控
API发布和变更变得没那么“简单”,它需要经过完整的内网环境-beta环境-外网prod环境审核流程,需要业务方研发、业务方测试验证确认,及API平台方审核才允许变动
同时也对API文档进行规范,包括文档格式及入参数据类型是否必填、返回参数数据类型是否一定返回、以及错误码的准确性等,都有相应的审核流程

2.自动化覆盖
当然业务方也需要对自己提供的API负责,我们组织了开放API的自动化全覆盖,并通过统一的平台进行运行结果观测
- 首先明确API接口研发负责人和测试负责人,由测试负责人负责对接口进行自动化覆盖
- 测试必须完成对外的API接口自动化,不允许只覆盖底层业务方API(模拟用户真实的调用)
- 每次发布必须通过接口自动化卡点

3.网关字段映射能力和巡检
字段映射:
客户系统对接酷家乐API完成且上线之后,由于不确定客户系统的兼容性,一个接口返回字段的增多或减少都有可能导致客户系统异常甚至崩溃,为了实现对外接口文档所见及所得,开放API网关实现了一套字段映射的功能
首先业务开发的配置接口时,需要填写接口返回参数及每个返回参数对应的内部参数,平台会存储这份结构数据

在接口调用时,按照存储的结构构建数据结构的层级和参数,根据对应的层级的参数映射字段去原jsonObject内获取对应的值,这样就能实现只有配置的参数能返回(约定的参数)
如果底层业务API多返回了一个字段,但这个字段没有被配置过,客户也是不会感知到的。如果底层业务API需要修改字段名称,也只需修改内部参数名称而不至于影响到外部参数名称
线上流量巡检:
针对接口异常或返回字段少了的情况,会通过对线上接口的巡检来补充保障
首先需要制定一个巡检规则,线上流量全采样显然性价比不高,我们对以下几种情况进行采样率设定:
- httpcode != 200,采样率 20%
- httpcode = 200 && response.c != 0,采样率 20%
- httpcode = 200 && response.c = 0,采样率 5%
为了避免某些调用量较高的API采样过多,调用量较少的API采样不到的情况,采样额外加了每个API每小时上限条数的限制
当采集到第一异常场景数据时,会直接进行警报通知对应的研发人员
当采集到第二种业务异常场景数据时,会根据业务错误码进行分析,然后进行警报
当采集到第三种正常场景数据时,会利用储存的字段返回结构,将接口返回数据与结构化数据进行一一比对(包括字段存在和字段类型),如果不一致则进行报警
另外,接口入参或出参存在乱码的情况也会进行报警

主动巡检:
前面是对线上问题发生之后的监控巡检,而针对底层API可以进行监控的主动巡检由平台侧拼接API密钥来主动调用接口,由接口返回是否200来判断底层API是否存在
4.异常流量限流
另外平台侧基于sentinel-api-gateway-adapter-common实现了API限流功能,且支持自定义限流规则配置
限流规则维度:
- API类型(开放平台支持openapi、oauth、sdk、platform四个对外的访问类型)
- 单个API
- 商家/应用维度
限流规则类型包含两类:
- 泛类型:表示该维度下,每种类型
- 明确条件类型:明确指定该维度下的,特定类型
由上面两种规则可以组合成各种配置,比如:
- 每个接口最大qps 400
- 户型搜索接口最大qps 300
- 商家应用A最大qps 400
- 商家应用A下户型搜索接口最大qps 200

当配置限流规则后,如果发生流量突增达到阈值的情况,超出流量之外的调用会被限制,以保护整个开放API服务正常运行
酷家乐目前900+开放API已接入管控且数量持续增长中。
90%以上API已完成自动化覆盖,90%以上API已开启字段映射功能,帮助研发测试在线下环境提前发现故障。
线上配置限流规则1w+条,API流量巡检稳定运行中,累计发送报警约200次,涉及48个api,研发测试对API线上问题的敏感度大大提高,一旦产生故障能快速反应将对客户的影响降到最低。
</div
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK