本文整理自腾讯游戏负责内部容器平台的工程师徐鑫在 Apache APISIX Meetup - 深圳站上的演讲,通过阅读本文,您不仅可以了解网关是什么、网关模式对传统服务架构的改进,还可以了解腾讯 OTeam 诞生的原因,以及 Apache APISIX 是如何在腾讯内部落地的。欢迎感兴趣的同学访问 bilibili 观看视频。
我们有必要先了解一下 网关 (Gateway) 的作用和价值。
PART ONE
网关是什么
传统架构的通用功能
在传统的架构中,没有网关,那么通用功能该怎么复用起来呢?这里的通用功能指业务无关的一些特性,比如:
这些功能在传统架构下,最常见的处理方法就是将其放入服务框架当中,通过 AOP 的方式去实现,类似下图:
模块:
这种架构在早些年的设计中非常常见,由此诞生了很多大而全的服务框架,比如 Dubbo, SpringCloud 等。如果我们去认真去研究它们的功能介绍,我们会发现这些功能点它们大多都有。
这种架构的优点在于上下游关系简单,网络传输中也少了一次转发。但是她们的缺点也很明显:
那么我们是否可以将这些通用功能下沉到一个独立的服务,它可以单独迭代且业务无关?
网关模式的出现
从上图中,我们可以看到传统架构的大部分内容都没有变化,只是在后端服务与 LB(负载均衡器) 之间多出了一个角色:网关。
(这里需要澄清的是,本文讨论的网关特指 ApiGateway ,即针对后台服务以 API 提供服务的场景。)
在上面的这个图中,有时 LB 同时也起到网关的作用,比如 k8s 的 Ingress 组件。
有了网关这个组件后,我们就可以将传统架构的通用功能下沉到网关,这样一来我们获得了很多的好处:
但是网关模式也有自己的缺点:
如何平衡好网关模式的好处和缺点,不仅十分考验业务团队的实力,更是与网关的选型息息相关。接下来,我们要请出本文要介绍的两个重点对象:腾讯 OTeam 和 Apache APISIX。
PART TWO
概念介绍
OTeam
很多人对腾讯内部的赛马文化恐怕早有耳闻。在腾讯内部,老板们为了创造更有竞争力的产品,通常会让不同的队伍去同一个赛道竞争。
在其他几家互联网大厂都相继在中台发力时,腾讯也开始整合公司内的重复轮子,沉淀技术中台。腾讯将相同性质的几个技术产品都放入同一个 Oteam,将维护人员都整合起来,一起发力,让这些产品逐渐合并成一个大而全的产品,这就是 Oteam。
有的 Oteam 下面有多达十数种产品,而有的只有一种。比如 Apache APISIX 所在的 Oteam 就单单只有 Apache APISIX 这一个产品,这个 Oteam 成立的初衷是:维护腾讯内部的 Apache APISIX 定制化特性。
Apache APISIX
感兴趣的同学可以前往 Apache APISIX 的 Github。我们在这里只简单介绍几个点:
PART THREE
OTeam 的运营策略
大家是不是很好奇腾讯的 OTeam 是怎么运作,又如何和 Github 的社区形成双赢的关系的?
OTeam 的运作参考下图:
上图可以看到 OTeam 的特性迭代是一个完整的闭环:
这个流程其实和 Github 多数开源项目的贡献过程是没区别的,关键点在于:
最早期的时候,OTeam 会每 12 小时,自动合入社区代码到内部仓库中,以保证我们与社区能够共同前进,但这种做法带来了几个问题:
出于以上原因,现在 OTeam 转为定期 Review 后合入所需特性的代码的策略。
PART FOUR
OTeam 发展情况
截止 2021 年 5 月,Apache APISIX 所在的 OTeam 在腾讯内部已为超过十个团队落地了 Apache APISIX,其中最大的业务日请求量已超过十亿,同时 OTeam 也为 Apache APISIX 开发了超过十个内部特性,其中包括内部的服务发现、RPC 协议转换、打通监控平台等。
与此同时,OTeam 也将开发的一些通用的特性贡献到了社区,为社区带来了不少 Contributor。目前 OTeam 团队中,有两位成员同时也是 ApacheAPISIX 社区的 PMC,OTeam 为社区贡献了超过 50 个 PR。同时,我们相信 OTeam 今后还会与 Apache APISIX 社区开展更多的合作。
PART FIVE
内部特性介绍
OTeam 的主要职责是维护 Apache APISIX 的一些针对腾讯内部的特性,那么这些特性都是哪些,又解决了什么样的痛点呢?
内部的痛点
先来看看,有哪些痛点是腾讯内部独有的:
问题的解决
带着这些问题,让我们来看一个架构拓扑图,它来自一个腾讯内部某个落地 case 的简化:
从上图可以看出,刚才提出的几个问题都在 OTeam 都得到了解决:
我们希望这些例子能起到抛砖引玉的作用,鼓励大家去发掘更多 Apache APISIX 的使用场景,更好的把 Apache APISIX 这个好用的工具用起来。比如在腾讯云团队,就有同学利用网关实现了一些腾讯云平台强制要求的 API 规范,将这逻辑下沉到了网关。
PART SIX
最后的话
转眼在腾讯内帮助各个团队维护 Apache APISIX 也一年多了,在这个过程中,OTeam 既帮助业务团队解决了他们的痛点,也不断完善了 Apache APISIX 在腾讯内部的特性,同时也间接推动了社区的发展,真的是一个双赢的事情。
如果读者所在公司如果还没有落地网关的话,可以了解下 Apahce APISIX。已经落地了网关的读者,也希望本文能够给你们带来一点在网关落地上的灵感和帮助。
Apache APISIX GitHub:https://github.com/apache/apisix
Apache APISIX 官网:https://apisix.apache.org/
Apache APISIX 文档:https://apisix.apache.org/zh/docs/apisix/getting-started
文章转载自:InfoQ
欢迎关注「腾源会」公众号,期待你的「在看」哦~👇