干货 | 以模型为中心,携程契约系统的演进

本文介绍了携程机票BU在微服务化过程中面临的契约管理难题,以及从线下管理到第三方工具的尝试,最终自主研发的契约系统MOM(Model Object Management)。MOM以模型为中心,强调云端管理、版本控制、模型共享等功能,解决契约管理的痛点。目前,MOM在携程内部逐步推广,并计划开源以帮助更多团队解决契约管理问题。
摘要由CSDN通过智能技术生成

作者简介

 

章鱼, 携程资深后端开发工程师,契约系统创始人与核心研发。

Sylar, 携程资深研发经理,专注Java技术栈相关研究。

一、前言

随着微服务化在携程的全面落地,业务被拆解得越来越细,接口数量和内外部调用方不断增多;另一方面,随着产品迭代的不断增速,对接口的修改也变得愈加频繁。

接口契约,作为各端的沟通桥梁,在微服务时代显得尤为重要。如何管理好不断变化的接口契约,是携程机票BU在微服务化过程中遇到的一大难题。本文结合一些契约管理的实践经验,介绍下携程契约管理的演进,以及携程机票BU自研发的契约系统(简称MOM - model object management,以下都以此代替)。

二、携程契约管理演变史

2.1 线下管理契约

在携程机票BU以及其它的一些团队里,早期的契约管理,主要由程序员线下进行。当发生需求变更,需要增加新的接口,或改动原有契约时,由相应的开发线下编辑契约文件(如XSD文件),再生成指定格式的契约(如Java类,Protobuf文件),提供给使用方。

在单体应用时代,或业务没有拆分很细的时候,接口契约并不会太多,调用方也相互熟悉,只要有专人负责线下契约维护,这种管理方式并不会有太大问题。但随着微服务化,接口和契约不断增多,此种管理方式的瓶颈逐渐凸显,问题主要集中在以下几点:

1)线下管理,契约容易丢失。

2)契约变更,只有编辑者才能主动感知,无法很好的周知到所有使用方。若契约变更不当,容易在上线时才发现问题。

3)当有多个需求,需要对同一份契约进行修改时,需手工解决各种冲突,这个过程极易出现问题。就好比不用Git,手工去进行代码分支管理一样。

4)契约可读性差,接入沟通成本大,各团的原始契约也没有一个统一的标准。

2.2 第三方工具管理契约

由于线下契约管理,存在太多各式各样的问题。携程内部各团队都在积极探寻,尝试借助一些第三方工具,去更好地管理契约。常见的有Swagger、Knife4j、YAPI等工具。

Swagger是一款非常受欢迎的开源框架,它通过文档与代码的绑定,能很好地对API进行文档化描述,接入起来也比较方便。Swagger一定程度解决了线下管理契约易丢失、可读性差等问题。但由于Swagger单机或集群的契约管理方式,会使得携程内部各项目(应用)之间,显得比较割裂,所以Swagger并未在携程内部大范围推广。同时,Swagger的界面比较粗糙,文档的编写需要遵守一系列的规范,上手有一定难度。

Swagger

Knife4j是一款国产开源项目,也是用于API文档的生成。与Swagger相比,它有着更加出色的界面,并且能够支持如离线文档、安全控制、在线调试等功能。但是与Swagger有相同问题,Knife4j并不是一个中心化的契约管理方案。

Knife4j

YAPI是去哪儿为推进API标准化,研发的一款API治理工具。本身也拥有丰富的功能,携程内部也有一些团队在使用,但它的设计更注重于API的多样化管理,不支持模型共享,不支持单独模型聚合方式管理,必须要有接口名称和输入输出信息。这些限制给契约的管理带来不少麻烦。

YAPI

总的来说,Swagger、Knife4j和YAPI,将契约管理方式从线下转到了线上,一定程度解决了契约易丢失ÿ

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值