项目背景
2019 年底,因为公司在业务研发的过程中,遇到了一些业务痛点,比如:公司的开发技术栈是 Java 相关的,而运维工程师擅长的则是 Shell 和 Python 脚本,无法直接对接;公司本身正处于快速增长期,开发工程师人力不足,无法支援日常的运维工作及运维平台的开发;在现有的运维平台中,使用了多种开源工具,而且没有整合,较难管理。因此我发起了自动化运维平台的项目,希望通过该运维平台实现快速上手的开发模型,可以实现运维工程师自己开发业务,并进行快速的迭代服务。
为什么选择 Apache APISIX
在进行网关选型时,我们进行了实际的测试。相对于其他网关,APISIX 基本上可以达到 NGINX 90% 的功能,并且支持了多种负载均衡策略以及支持多语言插件的机制,同时支持了软 WAF,可以覆盖我们95% 的安全业务场景。作为云原生 API 网关,APISIX 也提供了强大的日志功能,支持自定义日志格式,因此可以直接让 access log 对接 ELK。由于 APISIX 也支持自定义插件的开发,可以根据我们的需求灵活扩展。得益于 APISIX 的基础功能和强大的插件体系,可以有效降低开发成本。
自动化运维平台架构
自动化运维平台整体架构图如下:
-
存储层:核心是 CMDB,主要功能是记录和管理组织业务和 IT 资源的属性,以及其它们之间的关系。不但负责所有业务变更的起始状态查询,而且所有的业务资源的变更都要反馈记录在其中,实现业务标准规范的管控。存储层也包含一些权限管理的数据、业务工单的流转数据以及监控告警的时序数据;
-
公共基础服务层:提供原子业务的 API,也可以认为是基础中台,复用了大量的开源工具;
-
业务编排层:需要根据实际业务进行设计,工程师的工作就是把原子业务 API 按需求进行报文适配、流程组合、数据读写,并打包成为接口供前端调用;
-
网关层:APISIX 所在的层,是后台服务的业务边界,负责负载均衡、服务注册与发现、用户鉴权、基础网络报文数据转码、内外交互日志的统一记录、部分安全管控等等。与业务无关并且通用的服务统一放置到本层;
-
展示层:从用户角度出发,设计便利的交互界面。此处使用了一个开源的前端全响应式 admin 网页模板,即使开发者(运维)不熟悉 JavaScript ,也可以自己实现基本的表单和报表。