论文部分内容阅读
随着微服务架构的兴起和微服务框架的发展,目前很多公司的绝大部分业务都已经实现了服务化,且这些业务都接入了支持统一协议的框架。为了保证系统的安全性,这些内部服务往往不会直接对外提供服务。通常的解决方案是为每一个应用,在App、浏览器和内部服务之间开发一个业务专用网关,将外部请求转发到内部服务,同时在网关实现鉴权、限流等功能。在业务众多的情况下,公司内部容易存在多个发挥相同作用的网关应用。这些网关应用的维护与开发导致了工作低效、内容冗余等问题。因此,本文设计了一个通用的API网关系统对所有API进行统一的配置管理,来替代公司内部的多个业务网关。API网关系统考虑各种业务场景,支持用户按需接入系统提供的公共组件,如安全认证、流量管控等;该系统支持用户使用可视化界面配置API信息,提供全托管的API网关服务;此外,该系统通过协议转换的方式将外部HTTP请求转发到后端RPC服务,扩宽服务应用场景。API网关系统由网关核心模块和API管理模块组成,本文中重点描述了网关核心模块。API网关核心模块统一提供鉴权、限流、熔断等非业务功能,减小其他用户开发难度;该模块设计了灵活的扩展机制,提供用户按需接入组件能力,并且支持用户接入自定义组件完成特定业务需求;并且集中管理API资源,无需业务单独申请域名、机器等资源,提升资源利用率。网关核心模块采用Jetty9和Servlet3组合的框架结构,旨在进行轻量化,模块化的开发;使用全异步化的方式处理请求,并设计快慢线程池和独立线程池,隔离API请求之间的影响,提供高性能的网关服务;网关核心模块项目划分集群部署,避免不同业务相互影响,提高后端服务稳定性。本文描述了一个通过配置方式对外提供接口的API网关系统中网关核心模块的设计与实现。该系统经过多次迭代,目前已经开发完成2.0版本,并在实际中投入使用。它起到了减少新业务网关开发工作量的作用,也为旧业务提供了更好的网关解决方案。