软件架构总是在不断地演进迭代,20世纪90年代C/S架构非常流行,业务系统架构也都是单体架构的方式,系统之间数据交互非常少,随着企业的业务系统越来越多,这就会导致数据的孤岛问题,此时数据的互联互通的要求非常迫切,基于HTTP和XML的远程传输协议格式被很多广泛采用,SOA概念在2000年被IBM首次提出,确实解决了企业的很多异构系统的集成问题。
时间来到互联网时代,很多公司为了适应业务系统的灵活多变的业务需求,基于HTTP和JSON的架构风格逐渐成为企业开发的实践。SOA架构的集中式部署问题暴露,基于微服务分布式架构盛行起来,API网关作为微服务架构的核心组件,承担着所有流量的统一入口。上游业务系统不用关心安全和流控,只需要关注业务实现即可。
API网关是企业整体架构的关键的角色,他主要是增强、保障、控制对于后端微服务的调用,对所有的上游业务调用是透明的,API网关需要保证服务调用安全、高效、准确。API网关主要分为两类,一类是微服务网关,更贴近业务,一类是企业级应用网关,主要关注服务调用的流控和安全防护。
微服务网关主要是部署在内网,作为微服务内部API的通讯。
企业级应用网关一般部署在DMZ区域或者在藏在负载均衡后面。
微服务网关主要功能:服务导流、服务自动发现和路由、服务编排、业务规则定制化开发、服务熔断、服务灰度发布。
企业级应用网关主要功能:全局性流控、统一安全认证、性能支持、负载均衡、IP黑白名单、安全防护。
微服务网关的性能只需要满足服务的并发要求。
企业级应用网关的性能需要在关注全局的流量和并发支持。
微服务网关:主要集中于微服务内部的网关调用场景。
企业级应用网关:主要是南北流量的入口,微信小程序、云端应用调用、移动APP调用、iPad平台、第三方合作伙伴,都是从外网调用内网的服务
微服务网关是微服务架构的一个基本组件,大部分互联网企业使用Zuul的开源产品,下图的架构使用的是性能和稳定性更好的Kong作为微服务的API网关。
架构如下图:
企业级应用网关主要是外部流量的统一入口,一般都是集中式部署,也会根据客户的要求按照地域、业务领域进行划分,组成企业级应用网关集群。
架构如下图:
企业级应用网关并发一般都是非常大,并要求产品具有独立性,不需要依赖于第三方使用,性能良好,很多偏互联网行业都选择Kong的开源产品,Kong社区活跃,GitHub上2万多star,CNCF中的API网关里面的其他产品也都非常不错,国内的产品有OpenResty、Orange以及最新推出的APISIX产品,性能都非常出色,不过稳定性有待验证。
微服务网关有很多产品,他们一般都和业务需求相关,并和注册服务发现产品无缝集成。业界用的最多的是Zuul以及Spring Cloud Gateway产品,由于是纯Java开发的产品,性能没有Kong产品好,所以很多互联网公司都进行了二次改造,比如:游戏、电商、彩票等,他们为了满足高并发和大流量的的需求,也会改造Kong来满足微服务网关的功能。
未来微服务网关和企业级应用网关有融合的趋势,一体化的解决方案也带来了诸多好处。
软件行业没有银弹,任何架构都很难包治百病,不过保障API网关的高可用性和可扩展性需要基础设施层面增加更多的技术投入和技术保障,这样才能让技术人员更好的专注于实现自动化测试和构建、持续集成和交付的一体化流程。