API网关概述 1. 什么是API网关(API Gateway) 其实,网关跟面向服务架构(Service Oriented Architecture,SOA)和微服务架构(MicroServicesArchitecture,MSA)有很深的渊源。十多年以前,银行等金融机构完成全国业务系统大集中以后,分散的系统都变得集中,也带来了各种问题:业务发展过快如何应对,对接系统过多如何集成和管理。为了解决这些问题,业界实现了作用于渠道与业务系统之间的中间层网关,即综合前置系统,由其适配各类渠道和业务,处理各种协议接入、路由与报文转换、同步异步调用等操作。 人们基于SOA的理念,在综合前置的基础上,进一步增加了服务的元数据管理、注册、中介、编排、治理等功能,逐渐形成了企业服务总线(ESB,EnterpriseService Bus)。例如普元公司推出的PrimetonESB就是一个由本书作者之一参与开发的总线系统。 面向服务架构(SOA)是一种建设企业IT生态系统的架构指导思想。SOA的关注点是服务,服务最基本的业务功能单元由平台中立性的接口契约来定义。通过将业务系统服务化,可以将不同模块解耦,各种异构系统间可以轻松实现服务调用、消息交换和资源共享。不同于以往的孤立业务系统,SOA强调整个企业IT生态环境是一个大的整体。整个IT生态中的所有业务服务构成了企业的核心IT资源。各个系统的业务拆解为不同粒度和层次的模块和服务,服务可以组装到更大的粒度,不同来源的服务可以编排到同一个处理流程中,实现非常复杂的集成场景和更加丰富的业务功能。 SOA从更高的层次对整个企业IT生态进行统一的设计与管理,应用软件被划分为具有不同功能的服务单元,并通过标准的软件接口把这些服务联系起来,以SOA架构实现的企业应用可以更灵活快速地响应企业的业务变化,实现新旧软件资产的整合和复用,降低软件整体拥有成本。 当然基于ESB这种集中式管理的SOA方案也存在种种问题,特别是在面向互联网技术领域的爆发式发展的情况下。 API网关的定义、职能与关注点1. API网关的定义 网关的角色是作为一个API架构,用来保护、增强和控制对于API服务的访问(The role of a Gateway in anAPI architecture is to protect, enrich and control access to API services.)。 API网关是一个处于应用程序或服务(提供REST API接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样REST API接口服务就被API网关保护起来,对所有的调用者透明。因此,隐藏在API网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。 这样,网关系统就可以代理业务系统的业务服务API。此时网关接收外部其他系统的服务调用请求,也需要访问后端的实际业务服务。在接收请求的同时,可以实现安全相关的系统保护措施。在访问后端业务服务的时候,可以根据相关的请求信息做出判断,路由到特定的业务服务上,或者调用多个服务后聚合成新的数据返回给调用方。网关系统也可以把请求的数据做一些过滤和预处理,同理也可以把返回给调用者的数据做一些过滤和预处理,即根据需要对请求头/响应头、请求报文/响应报文做一些修改。如果不做这些额外的处理,则简单直接代理服务API功能,我们称之为透传。 同时,由于REST API的语言无关性,基于API网关,后端服务可以是任何异构系统,不论Java、.NET、Python,还是PHP、ROR、Node.js等,只要支持REST API,就可以被API网关管理起来。 2. API网关的职能 一般来说,API网关有四大职能。 · 请求接入:作为所有API接口服务请求的接入点,管理所有的接入请求。 · 业务聚合:作为所有后端业务服务的聚合点,所有的业务服务都可以在这里被调用。 · 中介策略:实现安全、验证、路由、过滤、流控、缓存等策略,进行一些必要的中介处理。 · 统一管理:提供配置管理工具,对所有API服务的调用生命周期和相应的中介策略进行统一管理。 3. API网关的关注点 API网关并不是一个典型的业务系统,而是一个为了让业务系统更专注于业务服务本身,给API服务提供更多附加能力的一个中间层。 在设计和实现API网关时,需要考虑两个目标: (1)开发维护简单,节约人力成本和维护成本。即应选择成熟的简单可维护的技术体系。 (2)高性能,节约设备成本,提高系统吞吐能力。要求我们需要针对API网关的特点进行一些特定的设计和权衡。 当并发量小的时候,这些都不是问题。一旦系统的API访问量非常大,这些都会成为关键的问题。 海量并发的API网关最重要的三个关注点: (1)保持大规模的inbound请求接入能力(长短连接),比如基于Netty实现。 (2)最大限度地复用outbound的HTTP连接能力,比如基于HttpClient4的异步HttpClient实现。 (3)方便灵活地实现安全、验证、过滤、聚合、限流、监控等各种策略。
|