Goku Gateway 的前世今生
2021,8,14 技术分享

大家好,我是孟柱,目前是Goku的架构师。

今天很开心可以和大家分享我们在过去几年在Goku网关上做的一些事情,也希望和大家多多交流。

首先来讲一下我们为什么要做一个新的API网关。

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

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

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

最后是技术驱动:

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

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

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

前世1( 2018 ):Goku Lite V1

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

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

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

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

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

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

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

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

到了2021年,经过前面几年的网关架构和客户需求的摸索,我们已经在微服务网关上面积累了大量的实践经验,现在我们抱着更加开放的心态,希望能够将过往的产品和技术经验重新整理并回馈技术社区,因此我们在今年3月开始了新的一轮重构。

这一次重构几乎重写了以前的所有代码,我们为此自研了一套中间件开发框架EOSC(Eolinker Open Structure)。EOSC就像是乐高积木的底座,提供了标准的接口,我们可以根据这些接口开发自定义的模块,并且设置各个模块的执行流程,并最终在这个标准底座上衍生出不同的产品形态。

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

目前我们重构后的goku,已经在性能等方面超越了nginx,未来我们希望将eosc打造成一个最好的通用中间件开发框架,并且提供一个插件市场,让eosc能够真正像乐高一样扩展出不同的产品。

对于goku网关,我们目前在性能上已经有一些优势,接下来我们除了要保持性能优势之外,还会不断将我们之前在企业服务的功能和最佳实践迁移过来,打造市面上最强的开源网关,并且将产品的使用和学习成本都降低,真正成为微服务领域的技术软件设施。

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

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

这里我们也列了个主干路线图,本月我们会首先完成集群的支持,然后完善插件扩展的模型,方便后续更快地开发插件。在10月份会发布插件市场,让所有人都能自由在上面发布和下载插件,扩展出自己的Goku功能。

Goku的前世今生已经和大家基本介绍完了,接下来我们会逐步把企业级网关的功能和实践都应用在开源网关中,并且目前我们已经正式加入了Linux基金会,我们也计划在后续将Goku捐献给Linux基金会,让Goku能够帮助全球开发者更快更好的管理API流量。

我们也欢迎大家参与到我们的开源工作中,可以加入我们的QQ群或者Slack群交流。

QQ群号:725853895

Slack跳转链接