分享 | 9月4日 Goku 网关 – TARS 线上社区Meetup回顾
2021,9,16 资讯

9 月4 日,Eolinker Goku应Linux基金会旗下TARS基金会的邀请, 联合Arm、阅文集团、支流科技数位大咖在线上进行分享,Meetup活动在当天顺利举办!

而本次我们特别为大家准备了Meetup中关于Eolinker-Goku网关部分的分享内容,并分别制作了视频版及图文版本,让我们一起来回顾下直播中的精彩内容吧!

Eolinker Goku服务API网关架构设计思路与发展计划

视频链接:https://www.bilibili.com/video/BV1aq4y1N7RU/

分享者:黄孟柱-Eolinker运维开发工程师

内容详情:本次分享主要介绍了Goku网关在过去几年的变化,并对架构演变过程进行了详细的讲解;对新架构的能力与发展方向做出了详细的介绍。


图文版   Eolinker Goku微服务API网关架构设计思路与发展计划


大家好,我是Goku的架构师黄孟柱。很高兴今天可以和大家分享Eolinker在过去几年,针对Goku网关上做的一些思考和工作。

可能会有不少人会思考:已经有了nginx之类的强大的流量管理工具,为什么还需要网关

由于Nginx拥有强大的功能、良好的性能以及不错的扩展性,因此在很长的一段时间,Nginx里作为事实上的流量代理标准被大量使用。

但是随着业务复杂度的上升以及微服务架构的流行, nginx有些时候会不从心, 主要体现在几个方面:

  1. 在微服务服务架构中,服务发现是一个标配, 而nginx对服务发现的支持不是那么的友好,因为相应的技术资料较少,可能需要自行开发和编译,导致不能快速上手使用。
  2. 在大流量的处理中, 需要对流量入口做动态扩容时,由于nginx不支持动态配置,那么在扩容中也存在一些困难
  3. 有时候我们需要对流量做更细粒度的路由,例如针对header、cookie甚至是body参数等进行路由
  4. 在开放内部接口时,我们需要对流量做统一的处理,例如 鉴权、限流、参数校验、默认参数等

所以, 我们需要一个满足微服务架构的产品来解决上述问题,而目前市面上的通用方案就是API网关

那为什么我们需要做一个新的API网关呢?

Eolinker自建API网关产品的想法从2017年就有了,当时Eolinker有以下的考虑:

首先是愿景驱动。Eolinker 是一家致力于发展API经济的产品技术型公司,目前已经为数十万开发者提供了强大的API管理和测试工具,而API网关是API流量管理和微服务架构的重要组成部分,我们希望能够填补这块的技术空白,并且结合现有产品为用户提供更大的价值。

其次是业务驱动。Eolinker首先是网关的使用者,其次才是开发者。而Eolinker 的产品本身有使用API网关的需求,比如我们的SaaS产品和API交易平台,市面上的API网关在数据处理方面做得不好,比如针对多个服务数据的整合、编排等。无法满足我们业务的需求。因此干脆就考虑自己来做。

最后是技术驱动。当时Eolinker技术团队调研过市面上的大部分网关,大多基于第三方产品开发,拥有较多的依赖和技术包袱,不便于后续深度开发和扩展,我们希望能够做一个性能优异、功能强大、使用简单的网关产品,只能从头开始设计开发。

以上三点最终推动了我们从网关的使用者变成一个开发者,并将Goku网关从18年逐步迭代到现在。

Goku的整个迭代过程是比较曲折的,如果按年可以大致分为以下几个阶段:

2018年9月份Eolinker开发了最早期的Goku开源版本,实现了基本的网关转发以及插件扩展等功能,但是该版本也存在以下的问题:

  1. 控制平面和数据平面耦合程度比较高
  2. 配置的同步国语依赖数据库,如果数据库数据异常,可能导致网关节点运行不正常
  3. 当涉及到异地架构的时候,可能会由于网络环境较差导致数据同步失败

2019年本人正式加入Eolinker,而在此之前我一直负责酷狗音乐的底层架构:在当时开发和迭代了酷狗音乐的一系列底层服务,并推动了酷狗的微服务化转变。

而我到Eolinker接到的第一个任务就是要提升Goku的性能和稳定性,我们对架构进行了分析发现了刚才提到的一些问题。

因此我们在19年3月开始对整个goku进行了重构,此时网关的架构发生了以下改变:

  1. 将数据库和节点进行解耦,控制台直接推送配置信息到节点
  2. 配置可以回滚,并且当推送失败的时候不会影响网关的正常运行,控制台也会自动重新推送配置

此时网关的整体稳定性有了较大提升。

在2020年初,Eolinker网关团队继续进行网关的重构,将网关彻底拆分成 控制台、环境、集群、节点 等4个层面,这样的架构可以满足相当一部分商业客户的复杂的API运维需求,同时网关的功能也可以更加深入,此时的商业版网关已经在大部分功能方面与Kong的企业版持平,并且提供了部分更深入的多集群管理功能。

到了2021年,经过前面几年的网关架构和客户需求的摸索,Eolinker已经在微服务网关上面积累了大量的实践经验,我们希望能够将过往的产品和技术经验重新整理并回馈技术社区,因此在今年3月份网关团队开始了新的一轮重构,为重新开源做准备。

这一次重构几乎重写了以前的所有代码,团队为此还自研了一套中间件开发框架EOSC(Eolinker Open Structure)。

EOSC就像是乐高积木的底座,提供了标准的接口,我们可以根据这些接口开发自定义的模块,并且设置各个模块的执行流程,并最终在这个标准底座上衍生出不同的产品形态。

而Goku其实就是我们开发了一系列的路由、鉴权、服务等模块,并且组合得到的“网关”产品。未来如果有需要,我们可以基于EOSC衍生出service mesh等其他产品形态。

从测试的结果来看,重构后的goku已经在性能等方面超越了nginx和市面上的一些网关产品,接下来goku除了要保持性能优势之外,还会不断将此前在企业服务(商业版本)的功能和最佳实践迁移过来,将其打造成市面上最强的开源网关,并且将产品的使用和学习成本都降低,真正成为微服务领域的技术软件设施。

Eolinker希望将eosc打造成一个最好的通用中间件开发框架,并且提供一个插件市场,让eosc能够真正像乐高一样扩展出不同的产品。

目前Goku已经提供了网关产品的部分基本功能,例如动态路由、服务发现、负载均衡、鉴权、健康检查等,而且也可以通过自定义插件来不断强化Goku。

接下来Goku团队会全面强化开源产品,而由于是重构了整个产品,因此这个过程需要花一点时间,大家如果有兴趣一起参与进来,相信速度会更快。

这里我们为大家展示一下Goku的主干路线图,本月(9月)Goku会首先完成集群的支持,然后完善插件扩展的模型,方便后续更快地开发插件。

而在10月份,Goku会立刻发布插件市场部分,让所有人都能自由在上面发布和下载插件,扩展出自己的Goku功能。

Goku的发展历程已经和大家基本介绍完了,接下来Eolinker会逐步把企业级网关的功能和实践都应用在开源网关中。

Eolinker已经在8月份正式加入了Linux基金会,并计划在后续将Goku捐献给Linux基金会旗下的TARS基金会,以此让Goku能够帮助全球开发者更快更好的管理API流量。

Goku团队欢迎大家参与到网关的开源工作来,如果您有兴趣了解或参与,可以加入Goku的QQ群725853895或者Slack群交流,期待着您的参加,谢谢大家!


什么是GoKu网关?

Goku API Gateway (中文名:悟空 API 网关)是一个基于 Golang开发的微服务网关,能够实现高性能 HTTP API 转发、服务编排、多租户管理、API 访问权限控制等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行 API 服务治理、提高 API 服务的稳定性和安全性。

GoKu Github地址:

https://github.com/eolinker/goku

💡关于 Eolinker

📞联系我们

🏠部分客户

💎投资机构