UCloud API&SDK 工程化实践(一):如何设计与实现 SDK 全生命周期自动化

摘要

对于公有云服务,API 是客户接入使用的主路径之一,API 的质量和持续稳定性至关重要,在使用者角度,代表着云服务的质量和稳定性。如何妥善管理API 以及基于API的 SDK, 如何在产品快速发展的同时,持续的保障 API 的稳定性、可靠性,是一个非常大的挑战。

UCloud 接入产品开发团队在 2019 年下半年,通过工程化的手段,打通了 API 管理、测试管理、网关日志、Gitlab CI 等内部系统,以 API 团队的契约为中心改造了整条工具链产品的发布链路,对 API&SDK 进行闭环校验,持续保证质量。并对基于 Github 的开源项目构建了通用的发布管道和版本策略。

当前工程化共支持了 16 个产品 300+ API SDK 的日常发布,以及 SDK侧长达半年的每日回归测试。从需要 1 人天/产品的人工开发成本,到 5 分钟完成一次新产品 SDK 代码生成,工程效率产生了质的飞跃。

本文介绍了 UCloud 在 API/SDK 工程化改造上的一些实践,以供大家交流与参考。

概览

1、为什么需要进行围绕 API/SDK 的工程体系建设

UCloud 接入产品团队负责研发工具链产品与网关,探索控制台以外的基础设施接入方式。陆续发布了包括 Terraform、Packer、CLI、移动网络探测等接入工具并全部开源。工具链产品由于便于使用,更符合现代软件开发的理念等特点,成为了客户 DevOps 团队接入的最主要手段。

怎么定义工具链产品?首先对于云厂商来说,与 Restful 等面向资源的 API(Resource-Oriented)风格不同,UCloud 开放的 OpenAPI 大多是面向行为(Action-Oriented)的。OpenAPI 除了实现 CRUD 之外,还负责发送各种各样控制平面(Control Plane)的指令,如资源的伸缩启停。

那么对于 UCloud 来说,工具链产品的价值在于,API 实现最小颗粒度的行为,工具链产品组合这些行为,进行更高层次的抽象。比如 Terraform 对于资源依赖图的抽象,CLI 对行为的级联和批量操作,Packer 对镜像的生命周期管理等等。工具链产品构建在 API/SDK 之上,是 API/SDK 的高层次封装。

图 1 :工具链产品示例

工具链产品区别于控制台的特点在于,工具链产品实践了基础设施即代码(IaC,Infrastructure as Code)这一理念,设施与行为都可以使用代码来严格地描述与版本化,易于集成。同时工具链产品在运行时的生命周期是全自动的,在实际的应用场景中,当我们定义好一个资源拓扑,或者基于工具链产品编写了一个脚本之后,我们期望它的运行过程是全自动的,不需要人工干预。

由于上述两个特点,工具链产品对外的接口必须保证是严格的,不能随意变动,这就要求 API 也必须是严格的。同时对于公有云 API/SDK 可用性的重度依赖,使得我们不得不寻求一些工程上的方法,来确保工具链产品的整个生命周期都是可用的。

2、面临的问题

• 开发容易变更难,工具链产品包括几乎所有 IaaS 产品的流量接入,日常变更十分繁琐,需要自动化变更。

• 工具链产品全线开源,作为知名的云厂商,必须保证开源社区的核心指标,即 90% 覆盖率,A 以上的代码风格评级,需要有成熟的机制来自动化验证。

• 相比友商,我们的团队规模小很多,需要尽可能复用现有设施,对系统变更最频繁的部分做自动化生成,充分发挥技术带来的效率红利。

全景图

为了解决上述问题,团队在 2919 年下半年开始进行 API/SDK 工程体系的建设,第一期的目标是使工具链产品所依赖的 SDK 实现全自动化的代码生成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值