新浪微博API网关定制化开发之路
新浪微博API网关定制化开发之路
新浪微博的HTTP API网关最初基于Nginx构建,所有路由规则都存储在Nginx配置文件中。然而,这种方式存在诸多问题,例如升级步骤复杂、灵活性不足,以及在添加、删除、修改或跟踪服务时效率低下。为了解决这些问题,我们经过研究选择了Apache APISIX——一种基于云的微服务API网关。它以动态、高效、稳定的特性,满足了业务快速响应的需求。
传统Nginx网关的局限性
在新浪微博中,运营工程师如果想要创建一个API服务,需要经历以下流程:
- 将服务写入Nginx配置文件。
- 提交到Git代码库。
- 等待其他运营工程师审核并确认。
- 部署上线后,重新加载Nginx配置。
整个流程冗长且低效,难以满足DevOps低代码化运维的趋势。因此,我们希望通过一个管理后台门户,使得操作工程师可以在UI界面中轻松管理HTTP API路由和其他配置。

为什么选择Apache APISIX?
经过深入分析,我们选择了Apache APISIX作为新的API网关,主要基于以下优势:
- 技术栈统一:基于Nginx,升级前后技术栈保持一致,安全性和稳定性得到保障。
- 统一控制界面:内置统一管理多个代理服务的控制台。
- 动态API调用:支持实时修改资源,避免传统Nginx配置+重载的繁琐操作。
- 丰富的路由选择:满足新浪微博复杂的路由需求。
- 可扩展性强:支持Consul KV等扩展功能。
- 性能优异:表现稳定可靠。

定制化开发的必要性
尽管Apache APISIX具备诸多优势,但在实际使用中仍存在一些不足,无法直接满足新浪微博的需求:
- 多策略支持:Apache APISIX不支持SaaS多策略,无法满足各业务线独立管理规则的需求。
- 快速回滚:需要支持路由规则的快速回滚功能。
- 金丝雀发布:需要支持指定网关实例的模拟测试和金丝雀发布。
- 服务注册与发现:需要支持Consul KV服务注册和发现机制。
因此,我们基于Apache APISIX 1.5版本及其兼容的Dashboard,进行了定制化开发。
定制化开发的实现
1. 零代码管理与UI操作
定制开发的核心目标是实现完全零代码的管理方式。所有HTTP API服务的创建、编辑、更新、上下线等操作,均需通过Dashboard完成。为确保安全性,我们禁止直接调用APISIX Admin API,所有操作必须经过UI界面的审核。
2. 角色与权限管理
在企业层面,我们引入了SaaS ID的概念,用于标识不同的产品线或业务线。通过角色分配,不同用户可以管理各自的服务,具体角色包括:
- 管理员:负责服务的添加、删除、更新和检查。
- 只读用户:用于查看服务配置、工作流和调试。
3. 路由规则的审核与回滚
在定制版本中,路由规则的创建或修改需要经过审核流程后才能发布。对于重要的API路由,如果发布后出现问题,可以快速回滚到上一版本,且回滚粒度精确到单个路由。
金丝雀发布的实现
我们实现了与社区理解不同的金丝雀发布功能。相比全面部署,金丝雀发布可以将路由规则的变更限制在特定网关实例上,从而降低风险并实现快速试错。
发布与停用流程
金丝雀发布的API路径为:
/admin/services/gray/{SAAS_ID}/routes
- POST:创建金丝雀发布规则。
- DELETE:停止金丝雀发布。
- GET:查看金丝雀发布状态。
在发布过程中,数据合法性会被校验,并通过事件广播至所有工作进程。停用时,系统会尝试从ETCD中还原原始配置,确保服务正常运行。
批量导入与脚本支持
为降低服务迁移阻力,我们提供了批量导入功能。操作工程师可以通过Bash脚本调用管理后端的API,快速导入服务配置。导入后续操作仍需在H5界面中完成。

Consul KV服务发现模块
大多数微博服务使用Consul KV作为服务注册与发现机制。为此,我们开发了consult_kv.lua模块,并在管理后台提供了直观的UI界面,方便运营工程师查看和管理注册节点。
该模块已被合并到APISIX主分支,并包含在2.4版本中。其流程模型基于订阅发布模式,支持同时连接多个Consul集群。
定制化开发的挑战与社区贡献
1. 迁移成本
迁移过程中,需要将Nginx的上游和路由规则逐一导入网关系统。这是一个繁琐的过程,同时需要解决Nginx复杂变量的兼容问题。
2. 升级成本
高度定制化导致后续升级成本较高。例如,从1.x版本升级到2.0版本需要额外的开发和测试工作。
3. 社区贡献
尽管定制开发主要基于内部需求,但我们也在考虑将通用功能贡献给社区。例如,Consul KV服务发现模块经过内部打磨后,已提交至开源分支。
总结
通过定制化开发,新浪微博成功将Apache APISIX应用于复杂的业务场景中。尽管面临迁移和升级的挑战,但我们相信,通过不断优化和与社区的合作,可以进一步提升系统的稳定性和可扩展性,为更多企业提供参考。
原文链接: https://apisix.apache.org/blog/2021/07/06/the-road-to-customization-of-sina-weibo-api-gateway-based-on-apache-apisix/
最新文章
- 增强API安全性:使用OPA和Kong Gateway进行细粒度访问控制
- 如何免费调用有道翻译API实现多语言翻译
- 公司logo获取服务:如何让企业自动化生成Logo变得轻松简单?
- 了解和使用REST API
- 为什么API开发对现代应用至关重要?
- 如何利用Apache APISIX实现高效的API认证与鉴权:全面解析主流认证方式
- 医疗保健领域中api解决方案的优势与劣势
- 如何获取腾讯AI开放平台 API Key 密钥(分步指南)
- 如何使用Flask-RESTX构建和文档化RESTful API
- API类型:详解与图示 – Kodezi博客
- 百度文心一言API使用指南:非技术人员入门教程
- 如何获取腾讯AI开放平台 API Key 密钥(分步指南)