本文整理自腾讯游戏负责内部容器平台的工程师徐鑫在 Apache APISIX Meetup - 深圳站上的演讲,通过阅读本文,您不仅可以了解网关是什么、网关模式对传统服务架构的改进,还可以了解腾讯 OTeam 诞生的原因,以及 Apache APISIX 是如何在腾讯内部落地的。
在正式进入分享之前,先给大家介绍一下网关 (Gateway) 的作用和价值。
网关是什么
传统架构的通用功能
在传统架构中是没有网关的,那么通用功能该如何复用?这里的通用功能指业务无关的一些特性,比如:
-
安全性:身份验证、授权、防重放、防篡改、对抗 DDos 等
-
可靠性:服务降级、熔断、限流等
这些功能在传统架构下,最常见的处理方法就是将其放入服务框架当中,通过 AOP 的方式去实现,类似下图:
图中模块释义:
-
Backend: 后端服务
-
AOP: 框架携带的 AOP 分层
-
SD: 服务中心,用于服务间发现,此组件在云原生环境下经常用 Service 替代
-
LB: 负载均衡器,放置于网络边界上,作为外部流量的入口
这种架构在早些年的设计中非常常见,由此诞生了很多大而全的服务框架,比如 Dubbo、SpringCloud 等。如果我们去认真研究它们的功能介绍,会发现这些功能点它们大多都有。
这种架构的优点在于上下游关系简单,网络传输中也少了一次转发。但它们的缺点也很明显:
-
**通用功能的迭代迫使业务服务更新:**由于采用的是代码引用,需要业务服务重新编译才能使功能生效。对一些没有实现平滑发布的团队,由于服务会中断,因此还得挑业务的空闲期发布。
-
**版本难以管理:**由于我们不可能每次发布都让所有业务服务升级最新版,长此以往,各个服务的版本将会不一致。
那么是否可以将这些通用功能下沉到一个独立的服务,它可以单独迭代且业务无关?
网关模式的出现