可重复基础设施

更新时间:

在云上,主要有以下两种方式用于集成云服务,实现可重复基础设施。

通过OpenAPI和原生工具集成云服务

云计算的客户,从访问云资源的方式上,通常分为两大类,通过控制台可视化界面操作的普通群体、通过OpenAPI和其原生工具集成的开发者群体。前者更适合简单上云和管理云资源的客户,而后者则更适合需要自动化管理和复杂业务集成的开发者们。

控制台提供了图形化的界面,让用户可以通过简单的操作完成对云资源的管控。例如,运维人员通过控制台创建、配置和监控云服务器、数据库、存储等资源,查看和处理系统告警和日志,业务人员可以通过控制台访问应用程序和查看业务数据等等。总之,这类用户一般不需要编写代码,通过相对简单的操作即可与云资源交互。

然而,API被人读、被机器读并最终被机器执行。 API是抽象的,但也需要具象的方式才能被人类更高效的集成使用。

image.png

OpenAPI用户在不同阶段需要关注的原则和建议主要包括OpenAPI规范、API的质量和稳定性、API的使用效率、API的性能和效率、API版本和变更、API的安全性和可靠性、错误信息和日志记录等,以便于更好地评估、使用和维护API,提升使用效率。

OpenAPI的探索与评估

  1. 探索匹配业务需求的OpenAPI:云服务商原则上应该提供和控制台能力完全对等的OpenAPI原子能力,而每个OpenAPI都具备详细的文档,包括API的功能描述、业务参数、错误码等信息。开发者通过平台提供的API探索工具或查阅文档来选定符合需求的OpenAPI。

  1. 评估自身业务场景与能力支撑:哪部分业务自动化?开发资源投入成本?业务技术架构是否符合标准?开发者在实际业务场景中权衡取舍,通过OpenAPI找到云业务自动化、效率、投入成本与产出之间的最优解。

OpenAPI的调试与集成

  1. 调试OpenAPI:测试OpenAPI的请求以验证其是否满足业务需求,以确保API功能符合预期、响应稳定、设计规范,更是为了准备更深一步的集成与稳定上线。在OpenAPI调试过程中,通常需要学习参数结构、参数组合、Endpoint规范、报错原因诊断等等。通过云厂商官方提供的API调试工具可以最大化开箱即用的体验。

  1. 选择合适的原生开发工具:云厂商面向不同的阶段、场景、能力的开发者提供了诸多一方工具,选择合适的开发工具可以极大的提升OpenAPI的使用效率。例如,SDK降低了开发者需要编写复杂的代码来实现调用API的成本,而无需了解底层的实现细节;CLI用于通过命令行界面管理和操作云资源;Terraform用于管理复杂的基础设施环境,跨多个云服务提供商、多个地域、多个账号等。

  1. 遵循OpenAPI供应商的要求:根据流控配额等相关的服务端限制,合理管控API调用量,避免超额调用导致的额外费用或服务中断,或根据业务流量估算,提前规划配额提升或限流容灾方案。

OpenAPI的运维与治理

  1. 关注API变更与版本迭代升级:持续关注API的变更与新发布便于及时根据API的变化而做出业务响应。同时在必要时快速调整代码提升服务可用率,降低可能出现有损变更带来的业务稳定性负面影响。

  1. 跟踪调用日志与错误信息:

    • 所有OpenAPI的请求都是可被审计的,API网关可以记录、存储和查询API的请求和响应信息。这些信息包括请求和返回参数、请求时间、状态码、响应时间等,可以用于监控API的性能和安全性。

    • 通过API的调用记录,可以帮助开发者了解API的使用情况,为API的优化和改进提供参考。此外,这部分审计信息还可以用于追踪API的访问记录,帮助企业合规管理,保证API的安全性,协助企业进行应急响应和安全排查。关注API的请求日志是保证API安全和优化API使用的重要手段之一。

通过资源化方式集成云服务

通过OpenAPI的方式集成云服务往往会遇到以下挑战:

  • API数量多:随着阿里云服务不断更新和扩展,API的数量也越来越多。这是一件好事情,说明阿里云的服务能力在不断增强。但对于开发者来说,需要花费更多的时间和精力来学习和理解各种API的用法和功能,同时也需要更多的测试和调试,以确保集成的正确性和稳定性。

  • 集成复杂:阿里云服务的不断增加和更新,也意味着集成的复杂性也在不断增加。开发者需要考虑如何将多个API集成在一起,如何处理各种数据格式和协议的转换,以及如何处理异常情况等。这些都需要耗费更多的时间和精力。

  • 维护困难:随着API的增加和集成的复杂性增加,维护也变得更加困难。开发者需要时刻保持对阿里云服务的了解和掌握,以及对集成的系统进行监控和维护。同时,如果阿里云服务发生变化,开发者也需要及时更新和调整集成系统,以确保系统的稳定性和可用性。这些都需要很高的技术能力和精力投入。

在云上,推荐使用资源化的方式集成云服务,降低集成成本。具体的实现手段主要有以下两种:

云控制API

云控制 API(Cloud Control API)提供阿里云面向资源的企业级集成一站式解决方案. 降低企业和生态伙伴提高集成效率, 降低维护成本。高阶开发者需要一套标准化API来避免对多种云服务的OpenAPI业务差异化的理解成本,并能够在后续运维过程中保持持续集成状态。

云控制 API是一款免费的OpenAPI开发者工具套件。让开发者能够使用一致的CreateResource、UpdateResource、 ListResources、DeleteResource 和一个开发者工具包来管理和集成阿里云上百款产品。通过云控制API,开发者可以通过CRUDL的标准化API和1个SDK即可集成上百款阿里云服务。 这也意味着当增加新产品或新特性的时候,可以用近乎0的学习成本和开发成本即可快速持续集成云上业务。

Terraform

Terraform是一款流行的基础设施即代码工具,可以编写可复用的代码模块,简化重复性工作。支持多云平台,可在多个云服务商的云平台上部署基础设施。通过Terraform语言描述的代码可读性高,易于维护。并在代码化过程中支持模拟环境,可以在本地或者CI/CD环境中测试基础设施代码。而且Terraform社区活跃,拥有大量的第三方模块和插件。

image.png

但企业同时也要关注其带来的一些诸如配置复杂、学习成本高、大规模部署速度慢等一些限制条件。 在进行技术路径选择的时候需要权衡学习成本和部署速度等因素。 在组织内推广这些方式时,往往会受到一些阻力。基于大量客户实践,推荐从以下几个方面入手:

转变思维方式

如果团队成员已经习惯了手动管理基础设施,他们更倾向于直接实施所有变更。例如,他们可能会通过SSH连接到服务器并执行一些命令。然而,迁移到基础设施即代码则需要改变思维方式,因为现在更改是通过间接方式进行的:首先编辑代码并提交,然后让某些自动化过程来部署更改。此新增加的“间接方式”可能会受到团队成员的抵触。对于简单的任务而言,这种方式可能比直接实施部署更为缓慢,尤其是在团队成员仍在学习新的自动化工具的初期,差距更加明显。

升级开发模式

面向过程到面向对象的开发模式升级;与庞大的OpenAPI细粒度集成体验不同,资源化的设计理念初衷是降低开发者理解OpenAPI之间关系的成本。组织不论是自己封装资源对象,还是通过云服务商提供的一套描述性的、面向对象的统一的界面/产品都是可以的。

提升开发效率

将业务抽象成基础设施代码,意味着运维团队需要花费大部分时间来编写大量代码,如业务模块、测试模块等。尽管有些运维工程师喜欢编码且乐于接受改变,但其他工程师可能会发现这是一个艰难的任务。许多运维工程师和系统管理员已经习惯了手动进行更改,偶尔会写一些简短的脚本,但接近全职地进行软件开发工作,可能需要学习新的技能或需要直接雇用新人。

降低学习成本

组织如果通过自己基于云服务提供方的OpenAPI提升集成效率/降低学习成本,是一个费时费力且收益不高的方式。可以采用云服务商直接提供的资源化集成能力(如:云控制API、CADT、ROS等);也可以采用开源社区的热度较高的产品(如:Terrafrom、Ansible等)来直接减少这一环。

与此同时,对于内部常见的集成问题,通过知识记录、分享、培训等多种形式也可以有效提升学习效率和效果。