一线架构师总结:五种开源微服务API网关的终极大P
微服务架构是当下比较流行的一种架构风格,它是一种以业务功能组织的服务集合,可以持续交付、快速部署、更好的可扩展性和容错能力,而且还使组织更容易去尝试新技术栈。
微服务具有几个关键特征:
高度可维护和可测试性与其他服务松散耦合且可独立部署能够由一个小团队开发现在很多公司企业想将自己的单体应用架构迁移到微服务架构,在这个问题上,Martin Fowler提出了3个前提,而Phil Calcado对其进行了扩展如下:
快速配置计算资源基本监控快速部署易于配置存储易于访问网关认证、授权标准化的 RPC今天我们主要讲讲易于访问的网关,也就是 API 网关。
为什么需要 API 网关
假设我们要使用微服务架构构建一个电商平台,以下可能是一些潜在的服务:
购物车服务订单服务商品服务评论服务库存服务客户端应该怎么访问这些服务呢?
原来单体应用的情况我们都知道,都在一个服务器上部署,直接访问IP+端口+服务前缀即可,现在微服务架构下,每个服务都可以独立部署,并且是由不同的开发团队开发的,难道我们要这样访问吗?
理论上每个服务都有端点可以访问,但是客户端就需要记录所有服务的端点。发起5次请求,现在还是5个服务,如果之后扩展多了呢?
随着服务增多,对客户端来说就是一个灾难,随之带来的就是安全性问题、扩展性问题等。
所以这种客户端直接与每个服务交互是不可取的,通常,更好的方式是使用 API 网关
API 网关是客户端访问服务的统一入口,API 网关封装了后端服务,还提供了一些更高级的功能
例如:身份验证、监控、负载均衡、缓存、多协议支持、限流、熔断等等,API 网关还可以针对不同的客户端定制不同粒度的 API
上面例子中修改架构后如下:
API 网关的优缺点
API 网关的好处是显而易见的,封装了应用程序的内部结构,为不同客户端提供不同粒度的 API
同时网关自身也提供了一些高级功能,也减少了客户端与应用程序之间的往返次数,使客户端代码更优雅。
同时使用网关也存在一些缺点,增加了一个新的组件,增加了整个应用架构的复杂度
一个通俗的道理,你做的越多你犯错的风险也越高,网关不可用很可能导致整个应用架构崩溃
当然现在有各种各样的方案,能防止网关崩溃,它也可能存在瓶颈风险。
使用网关有利有弊,我个人而言,利肯定是大于弊的,我们尽可能的将弊端降到最低。
API 网关一些实现
使用一个组件时,尤其是这种比较流行的架构,组件肯定存在开源的,我们不必自己去从零开始去实现一个网关,自己开发一个网关的工作量是相当可观的。
现在比较流行的开源 API 网关如下所示:
Kong
Kong是一个在 Nginx 中运行的Lua应用程序,并且可以通过lua-nginx模块实现
Kong不是用这个模块编译Nginx,而是与 OpenResty 一起发布,OpenResty已经包含了 lua-nginx-module, OpenResty 不是 Nginx 的分支,而是一组扩展其功能的模块。
它的核心是实现数据库抽象,路由和插件管理,插件可以存在于单独的代码库中,并且可以在几行代码中注入到请求生命周期的任何位置。
Traefik
Traefik 是一个现代 HTTP 反向代理和负载均衡器,可以轻松部署微服务
它可以与您现有的组件(Docker、Swarm,Kubernetes,Marathon,Consul,Etcd,…)集成,并自动动态配置。
Ambassador
Ambassador 是一个开源的微服务 API 网关,建立在 Envoy 代理之上,为用户的多个团队快速发布,监控和更新提供支持。
它支持处理 Kubernetes ingress controller 和负载均衡等功能,可以与 Istio 无缝集成。
Tyk
Tyk是一个开源的、轻量级的、快速可伸缩的 API 网关,支持配额和速度限制,支持认证和数据分析,支持多用户多组织,提供全 RESTful API。基于 go 编写。
Zuul
Zuul 是一种提供动态路由、监视、弹性、安全性等功能的边缘服务。Zuul 是 Netflix 出品的一个基于 JVM 路由和服务端的负载均衡器。
API 网关实现对比
总结
由上述对比表格中可以看出:
从开源社区活跃度来看,无疑是Kong和Traefik较好从成熟度来看,较好的是Kong、Tyk、Traefik从性能角度来看,Kong要比其他几个领先一些从架构优势的扩展性来看,Kong、Tyk有丰富的插件,Ambassador也有插件但不多,而Zuul是完全需要自研,但Zuul由于与Spring Cloud深度集成,使用度也很高,近年来Istio服务网格的流行,Ambassador因为能够和Istio无缝集成也是相当大的优势。欢迎工作一到五年的Java工程师朋友们加入Java程序员开发: 721575865
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
6种开源api网关和3种商业网关
api网关分流量网关和业务网关
流量网关 :是控制流量进入集群的网关。对于一个服务集群,会有很多非法的请求或者无效的请求,这时候要将请求拒之门外,降低集群的流量压力。 可定义全局性的、跟具体的后端业务应用和服务完全无关的策略网关。流量网关通常只专注于全局的Api管理策略,比如全局流量监控、日志记录、全局限流、黑白名单 控制、接入请求到业务系统的负载均衡等,有点类似防火墙。Kong 就是典型的流量网关。
业务网关: 一般部署在流量网关之后、业务系统之前,比流量网关更靠近业务系统。业务网关更靠近我们的业务,也就是与服务器应用层打交道,那么有很多应用层需要考虑的事情就可以依托业务网关,比如服务发现、服务熔断、身份认证、限流限速、统计、性能分析,线程模型、协议适配、熔断限流,服务编排 ,就可以在独立的网关层面来解决。
通常API网关指的是业务网关。有时候我们也会模糊流量网关和业务网关,让一个网关承担所有的工作,所以这两者之间并没有严格的界线 。
开源网关
有无好的控制台对于技术选型很重要
1.无控制台
Zuul
Spring cloud gateway
2.有控制台
apache ShenYu(原Soul)
apisix
kong
Gravitee
商业网关
商业网关
结论:
中小型项目首选开源Spring cloud gateway,或商业网关。
大型项目:选择开源有控制台的网关,然后扩展改造。
相关问答
apisix哪家公司?支流科技是Apache顶级项目APISIX背后的商业公司。支流科技成立于2019年,是一家提供API处理和分析的开源基础软件公司,目前拥有三个核心产品,分别是是...
阿里云 - 上云就上阿里云 - 触屏版230万用户正享用阿里云提供的云服务器、云数据库、云存储、CDN、大数据等服务,7x24售后支持,故障100倍赔偿,快速备案,5天无理由退款。
sdk和 api网关 区别?sdkSDK是一系列程序接口,文档,开发工具的集合,是的,集合,sdk即单单不是一个开发工具,也不是一个程序。一个完整的SDK应该包括以下内容:(1)接口文件和库...一...
spoesd框架是干什么的?spoesd框架是一种用于构建分布式服务的开源框架,旨在解决微服务的需求。它提供了API网关、服务发现、负载均衡、熔断器和配置中心等功能,使得服务之间可以更加...
...filter中调用一个http接口 - OSCHINA - 中文 开源 技术交流社区filter中要查询一个配置,我用http方式调用http://127.0.0.1:{网关端口}/{服务名称}/接口来查询,调用2-3次之后整个网关就不能提供服务了。简单来说就是我...
Java后端微服务开发,为什么要单独把 api 模块分离出来?现在的软件开发模式和传统的有很多差别,传统的开发模式耦合度较高,随着技术的发展越来越多的开发模式被应用,比如微服务架构模式。其实很多开发语言都有自己的...
api网关 对什么管控?API网关来实现微服务治理管控中的服务限流,熔断和降级方面的内容。在前面谈微服务架构的时候也谈到过类似通过Hystrix,Sentinel来是服务限流熔断。包括也不断...
api网关 如何避免成为热点?你好,系统设置里面有开关功能,建议打开找到关闭就可以了。你好,系统设置里面有开关功能,建议打开找到关闭就可以了。
怎么通俗地理解这句话,流量 网关 负责南北向流量调度及安全防...微服务网关(如SpringCloudGateway)是指与业务紧耦合的、提供单个业务域级别的策略,如服务治理、身份认证,权限控制、日志输出、数据加密、熔断限流等等。...
kong是什么呢?Kong是一个开源的API网关,可以帮助开发人员管理和监控API。它提供了许多功能,如流量控制、身份验证、请求转发和负载均衡等,可以帮助开发人员更好地管理和保护...