Uber API网关的架构简介


API网关是近年来微服务架构不可或缺的一部分。API网关为Uber所有的应用程序提供了一个入口点,并提供了一个接口来访问后端微服务中的数据,逻辑或功能。它还提供了一个集中的位置来执行许多高级职责,包括路由,协议转换,速率限制,减载,报头扩展和传播,数据中心亲和力实施,安全审核,用户访问阻止,移动客户端生成等。
在本文中,我们将更深入地研究自助API网关系统的技术组件。
从最抽象的角度讲,网关是通过API提供数据的另一项服务。从作为API网关的低级负载平衡器到功能非常丰富的应用程序级负载平衡器(在这些API中的请求和响应有效负载上运行),网关具有多种风格,涵盖了广泛的范围。在Uber,我们开发了功能丰富的API网关,该网关能够跨多种协议对传入和传出数据有效载荷进行复杂的操作。
 
API管理
功能丰富的应用程序通过与提供不同功能的众多支持服务进行交互来提供支持。所有这些交互都经过一个公共的应用程序网关层。API管理是指这些网关API的创建,编辑,删除和版本控制。
工程师在UI中配置其API的参数,并将功能性API发布到互联网上,以供所有Uber应用程序使用。该配置控制API的行为:路径,请求数据的类型,响应的类型,允许的最大调用,允许的应用程序,通信协议,要调用的特定微服务,允许的标头,可观察性,字段映射验证等。
发布配置后,网关基础结构会将这些配置转换为可服务于我们应用程序流量的有效和功能性API。网关基础结构还为应用程序生成客户端SDK,以使用这些API。 
与网关系统的所有交互都通过UI进行,该UI引导用户逐步完成创建端点的过程。UI简化了流程,并对API方面实施了各种验证。此外,这是配置请求超时,监视和警报的位置。
 
客户端发出的请求生命周期中的组件
为了说明网关的各个组成部分,重要的是要了解客户端发出的单个请求如何流经网关运行时。传入请求包含一个路径,该路径映射到为其提供服务的处理程序。在请求的生命周期内,它流经以下组件:协议管理器,中间件,数据验证,处理程序和后端客户端。请求生命周期中的所有组件都实现为堆栈。 
下面详细介绍的每个组件都在传入对象时对请求对象进行操作,而相同组件在响应对象的传出过程中以相反的顺序运行。 
  • 协议管理器是堆栈的第一层。它包含网关支持的每个协议的解串器和串行器。该层提供了实现可以摄取任何类型的相关协议有效负载(包括JSON,Thrift或Protobuf)的API的能力。它还可以方便地接收传入的JSON请求并以原始编码的响应进行响应。
  • 中间件层是在调用端点处理程序之前实现可组合逻辑的抽象。中间件实现了跨领域的关注,例如身份验证,授权,速率限制等。每个端点都可以选择配置一个或多个中间件。除了可选的中间件之外,该平台还包含一组强制性中间件,该中间件始终针对每个请求执行。单个中间件不需要同时实现requestMiddleware和responseMiddleware方法。如果中间件执行失败,则调用会使堆栈的其余部分短路,并且中间件的响应将返回给调用方。在某些情况下,中间件可以是无操作的,具体取决于请求上下文。
  • 端点处理程序是负责请求验证,有效负载转换以及将端点请求对象转换为客户端请求对象的层。在响应对象上进行操作时,endpointHandler会将后端服务响应转换为端点响应,以对响应对象执行任何转换,并基于模式和序列化进行响应验证。
  • 后端客户端执行对后端服务的请求。客户端可识别协议,并基于配置期间选择的协议生成。用户可以配置客户端的内部功能,例如请求和响应转换,模式验证,电路中断和重试,超时和期限管理以及错误处理。