从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?














作者:曹威(neal.cao)







从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?
一、前言
从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?
1.1 微服务网关是什么
1.1 微服务网关是什么

随着微服务架构的流行,原本庞大的单体应用被拆分成许多微服务进行独立的维护和部署,服务拆分带来的变化是API的规模成倍增长,API的管理难度也在日益增加,使用微服务网关发布和管理API逐渐成为一种趋势。一般来说,微服务网关是运行于外部请求与内部微服务之间的一个流量入口,实现对外部请求的协议转换、鉴权、流控、参数校验、监控等通用功能。

1.2 LApiGateway的开发背景
1.2 LApiGateway的开发背景

货拉拉作为一家快速发展的物流科技公司,各个业务领域逐渐开发部署了只服务于本领域的服务化网关,每个领域就像一个“堂口”,一个大哥后面带着一群小弟对外提供服务。这种架构,天然适合公司业务较小的时期,此时开发效率较高,沟通成本较低。


从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

独立网关架构


但是随着公司规模的扩大,子领域越来越多,子领域网关的数量也急速上升,由此带来的成本将极速上升,具体有以下几点:

  1. 通用功能的开发维护成本越来越高

  2. 各个网关实现差异化较大,导致系统的安全性和稳定性风险越来越高

  3. 各领域独立部署,导致服务器资源利用率较低

因此我们决定自研货拉拉微服务网关:LApiGateway,致力于给研发带来高效,稳定,极致的微服务网关体验。


从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?
二、设计与实现
从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?
2.1 开发语言选择
2.1 开发语言选择

考虑到公司内部以java为主的开发生态,我们选择了java作为主要开发语言。在此基础之上,我们选择开源项目Spring Cloud Gateway构建LApiGateway。这么做的好处有以下几点:

  1. SCG是Spring官方项目,大大降低了LApiGateway的开发风险

  2. SCG采用非阻塞式的异步编码框架,极大的减少了线程消耗

    1. 相比命令式的编码方式,Reactor流式编码更加优雅

2.2 LApiGateway架构设计
2.2 LApiGateway架构设计

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

LApiGateway由四部分组成:

  1. 服务注册中心,LApiGateway通过服务注册中心完成服务发现

  2. 配置中心,配置中心负责存储服务在网关上的路由配置

  3. LApiGateway Ops,网关管理平台,研发通过管理平台维护服务的配置

  4. LApiGateway 服务主体,负责根据不同服务的配置,对请求进行相应的操作。目前LApiGateway服务支持三种协议的调用:HTTP, JsonRpc,gRpc

2.2.1 服务发现
2.2.1 服务发现


我们使用Consul作为服务注册中心。LApiGateway能够通过Consul获取下游服务的节点信息。

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?


2.2.2 配置中心
2.2.2 配置中心

我们使用货拉拉的LConfig服务作为网关配置的存储和管理中心。

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

基于LConfig的配置变更通知机制,我们能做到配置变更秒级生效。

2.2.3 LApiGateway OPS
2.2.3 LApiGateway OPS


LApiGateway OPS即网关管理平台,研发可以通过网关管理平台控制自己服务的配置。

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

LApiGateway OPS


LApiGateway OPS为用户提供了以下能力:

  1. 受保护的独立服务配置空间

  2. 服务路由配置增删查改

  3. 服务配置变更历史记录查询和回滚

  4. 自动生成SOA接口路由配置

  5. 对接MOC平台,提供服务路由变更操作记录

LApiGateway OPS使得用户不再需要研究既复杂又冗长的配置文件,为用户提供了所见即所得的极致操作体验。

2.2.4 LApiGateway

2.2.4 LApiGateway


– 2.2.4.1  请求路由 –

路由是LApiGateway最重要的概念。每个Route是由一系列的匹配规则插件组成,负责将符合条件的请求转发到正确的后端服务上去。

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

我们可以在网关平台上配置多组Route,每个route可以配置多种匹配条件,请求在满足匹配条件时,Route上的插件将会执行。

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

如上图的例子,当请求参数满足_m=order_detail时,ParameterConverter插件将会执行。

– 2.2.4.2 网关插件 –

所谓插件,即取“即插即用”的意思,主打一个使用方便。LApiGateway的插件之间互相独立,丰富的插件体系给研发带来了很好的使用体验,同时又不会增加系统自身的复杂度。

目前我们已经为研发提供了30+种插件,包括了如下几大场景:

  • 请求&返回的数据修改

  • 协议转换

  • 验签&鉴权

  • 限流&降级

  • 流量切换

  • API聚合

  • etc…

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

LApiGateway插件示例

– 2.2.4.3 网关语言 –

虽然插件之间是互相独立的,但是现实中的需求却往往需要多个插件通力合作,或者需要在插件配置中做一些简单的条件计算。

比如用户希望在对请求完成鉴权之后,提取鉴权成功后的用户信息,塞到请求头中,带给下游服务。这样的场景对于单个鉴权插件来说是无能为力的,同时我们也不可能针对这些差异化的需求去额外开发新的鉴权插件。

因此我们为用户提供了强大的网关DSL,该DSL提供了如下功能:

  1. 复杂数据构造

  2. 请求数据访问

  3. 辅助函数调用

  4. 条件表达式计算

因此我们可以在现有的插件基础之上,配合网关语言完美实现前面提到的鉴权需求:

YAML
gateway:
  routes:
  – id: test_account_center_auth
    uri: lb://orchestrator
    predicates:
    – name: Query
      args:
        param: _m
        regexp: account_center_auth
    plugins:
    – name: AddRequestHeader
      args:
        name: userID
        value: isNull(accountcenterauth.data.user_id) ? “guest” : accountcenterauth.data.user_id
    – name: AccountCenterAuth
        

我们在AddRequestHeader插件中,通过网关语言提取了鉴权后的user_id

网关语言的出现避免了我们陷入插件开发的汪洋大海之中。


2.3 高可用设计

2.3 高可用设计

网关作为基础组件,高可用设计对公司业务的稳定性至关重要。


2.3.1 物理隔离

2.3.1 物理隔离

为了防止网关集群崩溃导致所有业务不可用的灾难性后果,我们为每个领域分配了不同的网关集群,并且在各个领域内部会更进一步区分业务属性,比如是否高核心业务,是否大流量业务,对于这些业务会更进一步提供单独的网关集群提供服务。

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

物理隔离


如上图,我们使用流量网关KONG来区分不同的集群流量。


2.3.2 服务隔离

2.3.2 服务隔离

在多服务混布的场景下,为了保证不同的服务之间不会出现相互影响的情况,我们在LApiGateway OPS上开辟了服务独属的配置空间,从而保证了每个服务配置的安全性。

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

请求隔离


通过制定请求规范,LApiGateway能通过请求头的标识识别出请求所归属的服务配置,保证了不同服务之间的请求不会互相干扰。


2.3.3 灰度迁移

2.3.3 灰度迁移

– 后端开发工程师 –

由于存量的业务流量非常庞大,如何将流量安全的迁移到LApiGateway成为一个及其重要的问题。

为了保证迁移过程中,可灰度,可降级,我们在流量网关KONG上开发了灰度迁移插件,从而保证了迁移过程的安全可靠。

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

灰度迁移



2.3.4 流量预热

2.3.4 流量预热


高峰期由于服务pod迁移,需要对新拉起的pod进行流量预热,从而避免对请求异常抖动。

我们基于节点注册Consul的时间,按照启动时间进行一个缓慢放量。

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

流量预热


2.3.5 自适应负载均衡

2.3.5 自适应负载均衡


传统的RoundRobin负载均衡算法虽然实现简单,但是当下游某些节点出现请求处理超时,或者下游节点网络抖动时,RoundRobin算法往往对这一变化一无所知,仍会傻傻的均衡转发请求,这会导致相当一部分请求处理时间变长甚至是超时。

自适应负载均衡算法则能够及时识别出这些异常节点,更“智能”的实现流量调度,从而避免异常节点的健康状态恶化,为其争取一定的自愈时间。

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

自适应负载均衡



从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?
三、未来展望

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

未来我们将在稳定性和研发体验两方面继续加强投入。


3.1 极致的稳定性

3.1 极致的稳定性


目前LApigatewa已经全面承载公司对外核心服务的流量,因此稳定性的建设也就越发重要。目前LApiGateway已经支持了公司的多泳道架构,除此之外,我们还将建设故障集群一键转移的能力。未来一旦某个集群因为不可抗力的原因,导致整个集群无法快速恢复,我们可以在数分钟内完成将故障集群的流量完全切换到正常集群。

从“堂口”到LApiGateway,货拉拉物流科技公司如何打造高效稳定的微服务网关?

故障集群切换


3.2 极致的使用体验

3.2 极致的使用体验

使用体验的优化将聚焦在以下几个方面:

  1. 插件市场,当前研发再使用相关插件时,仍需要翻阅相关文档。未来我们将在LApiGateway OPS平台提供插件市场,可以帮助研发快速检索到合适的插件,并提供一键选取并安装能力

  2. 路由推导,目前公司的测试生产环境有多套,因此研发需要在不同环境维护多个相似的配置,不同环境下的手动迁移颇为繁琐。未来我们将提供路由推导的能力,多个环境下研发只需修改一次路由,并配套提供自动化验证工具。

  3. 智能运维,目前LApiGateway的集群规模仍在快速增长,未来人工运维会成为一个严重的挑战。未来我们将建设智能运维工具,完成集群规模自动调整,服务自动接入,自动迁移等工作。



本篇文章来源于微信公众号:货拉拉技术

本文来自投稿,不代表TakinTalks稳定性技术交流平台立场,如若转载,请联系原作者。

(0)
上一篇 2023年9月26日 下午5:28
下一篇 2023年10月24日 下午6:06

相关推荐

发表评论

登录后才能评论