工作几年了,API 网关还不懂?
点击上方蓝色“方志朋”,选择“设为星标”回复“666”获取独家整理的学习资料!
译者:蚊子squirrel
来源:www.jianshu.com/p/9fab0982c6bb
翻译一篇API网关的文章,介绍了其三种角色:API管理、集群ingress网关、API网关模式,最后还讲了与service mesh的关系,通过此文可以更全面的理解API网关的作用。
原文:https://medium.com/solo-io/api-gateways-are-going-through-an-identity-crisis-d1d833a313d7
这些年来,API网关正在经历一些身份危机。
它们是否是集中的、共享的资源,从而促进了API对外部实体的暴露与治理?
它们是集群入口(ingress)哨兵,从而可以严格控制哪些用户流量进入或离开集群吗?
或者它们根据自己拥有的客户端类型,使用某种API结合胶水来更简洁地表达API?
当然,房间里的大象和我经常听到的一个问题:“服务网格会使API网关过时吗?
房间里的大象:英语习语,指的是一些虽然显而易见,但却由于可能造成尴尬、争执、触及敏感或禁忌等原因被人刻意忽视的事情。
一些背景
随着技术发展日新月异,整个行业通过技术和架构模式进行快速洗牌,如果你说“所有这些都使我头大”,也可以理解。
在本文中,我希望总结出“ API网关”的不同身份,阐明公司中的哪些群体可以使用API网关(他们正在尝试解决的问题),并重新关注这些首要原则。
理想情况下,在本文结束时,您将更好地了解API基础架构在不同层级、对不同团队的作用,同时明白如何从每个层级获得最大价值。
在深入探讨之前,让我们先明确API一词的含义。另外,关注公众号Java技术栈,在后台回复:面试,可以获取我整理的分布式面试题和答案。
我对API的定义:
一个明确定义和目的型接口,通过网络调用,使软件开发人员能够以受控且方便的方式,对组织内的数据和功能进行编程访问。
这些接口抽象了实现它们的技术架构细节。对于这些设计的网络端点,我们希望获得一定程度的文档、使用指南、稳定性和向后兼容性。
相反,仅仅因为我们可以通过网络与另一软件进行通信,并不一定意味着远程端点就是符合此定义的API。许多系统相互通信,但是通信发生更加随意,并在与耦合和其他因素之间进行权衡。
我们创建API来为业务的各个部分提供周全的抽象,以实现新的业务功能以及偶然的创新。
在谈论API网关时,首先要提到的是API管理。
API管理
许多人从API管理的角度考虑API网关。这是公平的。但是,让我们快速看一下此类网关的功能。
通过API Management,我们试图解决“何时公开现有的API供他人使用”的问题,如何跟踪谁使用这些API,实施关于允许谁使用它们的政策,建立安全流程来进行身份验证和授权许可,同时创建一个服务目录(该目录可在设计时使用以促进API使用,并为有效治理奠定基础)。
我们想解决“我们拥有要与他人共享,但要按我们的条款共享这些现有的、经过精心设计的API ”的问题。
API管理也做得很好,它允许用户(潜在的API使用者)进行自助服务,签署不同的API使用计划(请考虑:在给定时间范围内,在指定价格点上,每个端点每个用户的调用次数)。有能力完成这些管理功能的基础架构就是网关(API流量所经过的)。在网关层,我们可以执行身份验证,速率限制,指标收集,其它策略执行等操作。
API Management Gateway
基于API网关的API管理软件示例:
Google Cloud Apigee
Red Hat 3Scale
Mulesoft
Kong
在这个级别上,我们考虑的是API(如上定义)是如何最好地管理和允许对其进行访问。我们不是在考虑服务器,主机、端口、容器甚至服务(另一个定义不明确的词)。
API管理(以及它们相应的网关)通常被作为由“平台团队”、“集成团队”或其它API基础架构团队所拥有的、严格控制的共享基础架构。
需要注意的一件事:我们要小心,别让任何业务逻辑进入这一层。如前一段所述,API管理是共享的基础结构,但是由于我们的API流量经过了它,因此它倾向于重新创建“大包大揽的全能型”(认为是企业服务总线)网关,这会导致我们必须与之协调来更改我们的服务。
从理论上讲,这听起来不错。实际上,这最终可能成为组织的瓶颈。有关更多信息,请参见这篇文章:
http://blog.christianposta.com/microservices/application-network-functions-with-esbs-api-management-and-now-service-mesh/
集群入口
为了构建和实现API,我们将重点放在代码、数据、生产力框架等方面。但是,要想使这些事情中的任何一个产生价值,就必须对其进行测试,部署到生产中并进行监控。当我们开始部署到云原生平台时,我们开始考虑部署、容器、服务、主机、端口等,并构建可在此环境中运行的应用程序。我们可能正在设计工作流(CI)和管道(CD),以利用云平台快速迁移、更改、将其展示在客户面前等等。
在这种环境中,我们可能会构建和维护多个集群来承载我们的应用程序,并且需要某种方式来访问这些群集中的应用程序和服务。以Kubernetes为例思考。我们可能会通过Kubernetes Ingress来访问Kubernetes集群(集群中的其它所有内容都无法从外部访问)。
这样,我们就可以通过定义明确的入口点(例如域/虚拟主机、端口、协议等),严格控制哪些流量可以进入(甚至离开)我们的集群。
在这个级别上,我们可能希望某种“ingress网关”成为允许请求和消息进入群集的流量哨兵。在这个级别上,您的思考更多是“我的集群中有此服务,我需要集群外的人能够调用它”。
这可能是服务(公开API)、现有的整体组件、gRPC服务,缓存、消息队列、数据库等。有些人选择将其称为API网关,而且实际上可能会做比流量的入口/出口更多的事情,但重点是这个层级的问题是属于集群操作级别的。
Cluster Ingress Gateway
这些类型的ingress实现的示例包括:
Envoy Proxy 及其基础上的项目包括:
Datawire Ambassador
Solo.io Gloo
Heptio Contour
基于其他反向代理/负载均衡器构建的其它组件:
HAProxy
OpenShift’s Router (based on HAProxy)
NGINX
Traefik
Kong
此层级的集群入口控制器由平台团队操作,但是,这部分基础架构通常与更加去中心化的、自助服务工作流相关联(正如您对云原生平台所期望的那样)。
参见:https://www.weave.works/blog/gitops-operations-by-pull-request
API网关模式
关于“ API网关”一词的另一种扩展是我在听到该术语时通常想到的,它是与API网关模式最相似的。Chris Richardson在其“微服务模式”一书第8章很好地介绍了这种用法。
我强烈建议您将此书用于此模式和其他微服务模式学习资料。可在他的microservices.io网站API Gatway Pattern可以进行快速浏览。简而言之,API网关模式是针对不同类别的消费者来优化API的使用。
这个优化涉及一个API间接访问。您可能会听到另一个代表API网关模式的术语是“前端的后端”,其中“前端”可以是字符终端(UI)、移动客户端、IoT客户端甚至其它服务/应用程序开发人员。
在API网关模式中,我们明显简化了一组API的调用,以模拟针对特定用户、客户端或使用者的“应用程序”内聚API。回想一下,当我们使用微服务构建系统时,“应用程序”的概念就消失了。API网关模式有助于恢复此概念。这里的关键是API网关,一旦实现,它将成为客户端和应用程序的API,并负责与任何后端API和其他应用程序网络端点(不满足上述API定义的端点)进行通信。
与上一节中的Ingress控制器不同,此API网关更接近开发人员的视角,而较少关注哪些端口或服务暴露以供集群外使用的方面。此“ API网关”也不同于我们管理现有API的API管理视角。
此API网关将对后端的调用聚合在一起,这可能会公开API,但也可能是与API描述较少的东西,例如对旧系统的RPC调用,使用不符合“ REST”的协议的调用(如通过HTTP但不使用JSON),gRPC,SOAP,GraphQL、websockets和消息队列。这种类型的网关也可用来进行消息级转换、复杂的路由、网络弹性/回退以及响应的聚合。
如果您熟悉REST API的Richardson Maturity模型,就会发现相比Level 1–3,实现了API网关模式的API网关来集成了更多的Level 0请求(及其之间的所有内容)。
https://martinfowler.com/articles/richardsonMaturityModel.html
这些类型的网关实现仍需要解决速率限制、身份验证/授权、断路、度量收集、流量路由等问题。这些类型的网关可以在集群边缘用作集群入口控制器,也可以在集群内部用作应用程序网关。
API Gateway Pattern
此类API网关的示例包括:
Spring Cloud Gateway
Solo.io Gloo
Netflix Zuul
IBM-Strongloop Loopback/Microgateway
也可以使用更通用的编程或集成语言/框架(例如:
Apache Camel
Spring Integration
Ballerina.io
Eclipse Vert.x
NodeJS
由于这种类型的API网关与应用和服务的开发紧密相关,因此我们希望开发人员能够参与帮助指定API网关公开的API,了解所涉及的任何聚合逻辑以及快速测试和更改此API基础架构的能力。
我们还希望运维人员或SRE对API网关的安全性、弹性和可观察性配置有一些意见。这种层级的基础架构还必须适应不断发展的、按需的、自助服务开发人员工作流。可以通过查看GitOps模型获取更多这方面信息。
进入服务网格(Service Mesh)
在云基础架构上运行服务架构的一部分难点是,如何在网络中构建正确级别的可观察性和控制。在解决此问题的先前迭代中,我们使用了应用程序库和希望的开发人员治理来实现此目的。
但是,在大规模和多种开发语言环境下,服务网格技术的出现提供了更好的解决方案。服务网格通过透明地实现为平台及其组成服务带来以下功能:
服务到服务(即东西向流量)的弹性
安全性包括最终用户身份验证、相互TLS、服务到服务RBAC / ABAC
黑盒服务的可观察性(专注于网络通信),例如请求/秒、请求延迟、请求失败、熔断事件、分布式跟踪等
服务到服务速率限制,配额执行等
精明的读者会认识到,API网关和服务网格在功能上似乎有所重叠。服务网格的目的是通过在L7透明地解决所有服务/应用程序的这些问题。换句话说,服务网格希望融合到服务中(实际上它的代码并没有嵌入到服务中)。
另一方面,API网关位于服务网格以及应用程序之上(L8?)。服务网格为服务、主机、端口、协议等(东西向流量)之间的请求流带来了价值。它们还可以提供基本的集群入口功能,以将某些此功能引入南北向。但是,这不应与API网关可以带来北/南流量的功能相混淆。(一个在集群的南北向和一个是在一组应用程序的南北向)
Service Mesh和API网关在某些方面在功能上重叠,但是在它们在不同层面互补,分别负责解决不同的问题。理想的解决方案是将每个组件(API管理、API网关、服务网格)合适的安置到您的解决方案中,并根据需要在各组件间建立良好的边界(或在不需要时排除它们)。
同样重要的是找到适合去中心化开发人员和运营工作流程的这些工具实现。即使这些不同组件的术语和标识存在混淆,我们也应该依靠基本原理,并了解这些组件在我们的体系结构中带来的价值,从而来确定它们如何独立存在和互补并存。
热门内容:
19张图带你梳理SpringCloud体系中的重要技术点!
使用雪花id或uuid作为Mysql主键,被老板怼了一顿!
再见了,收费的Navicat。
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
工作几年了,API 网关还不懂?相关推荐
- API网关—系统的门面要如何做呢?
文章出自:阿里巴巴十亿级并发系统设计(2021版)-第27节:API网关:系统的门面要如何做呢? 链接:https://pan.baidu.com/s/1lbqQhDWjdZe1CBU-6U4jhA ...
- API网关Kong(三):功能梳理和插件使用-基本使用过程
作者: 李佶澳 转载请保留:原文地址 发布时间:2018-10-10 14:37:53 +0800 说明 Kong的Admin API Kong定义的资源之间的关联关系 使用过程了解 先了解下 ...
- 10Wqps 超高并发 API网关 架构演进之路
说在前面 在尼恩的(50+)读者社群中,经常遇到一个 API网关 架构方面的问题: (1) 尼恩老师,最近公司我们在规划业务出口网关(目的,整合规范外部调用,如短信平台 mqtt 等) 我在做整理技术 ...
- API 网关在微服务中的应用
目录 一.什么是 API 网关? 二.微服务架构对 API 网关的需求 三.API 网关在微服务架构中的工作 四.API网关的实现--问题和解决方案 可扩展性和性能 反应式编程模型 服务调用 服务发现 ...
- 高并发系统设计二十五(API网关)
到目前为止,你的垂直电商系统在经过微服务化拆分之后,已经运行了一段时间了,系统的扩展性得到了很大的提升,也能够比较平稳地度过高峰期的流量了. 不过最近你发现,随着自己的电商网站知名度越来越高,系统迎来 ...
- 构建微服务:使用 API 网关
当您选择将应用程序构建为一组微服务时,您需要决定应用程序的客户端将如何与微服务交互.对于单体应用程序,只有一组(通常是复制的.负载平衡的)端点.然而,在微服务架构中,每个微服务都暴露了一组通常是细粒度 ...
- API网关跟ESB的联系与区别
1 相关名词剖析 随着互联网的快速发展,企业的IT建设也是飞速发展的,但是在建设企业信息化时没有统筹考虑,建设往往不成体系.重复开发.烟囱式的建设,造成了资源的冗余和浪费,为了针对这些问题逐渐诞生了S ...
- 使用Zuul和Spring Boot创建API网关
介绍 使用微服务时,通常具有对系统的统一访问点(也称为API Gateway ). 消费者仅与API网关交谈,而不与服务直接交谈. 这掩盖了您的系统由多个较小的服务组成的事实. API网关还可帮助解决 ...
- API信息全掌控,方便你的日志管理——阿里云推出API网关打通日志服务
摘要: 近日,阿里云API网关对接了日志服务,可以输出用户在API网关产生的API调用日志,目前支持将 API 接入 API 网关的用户查看日志明细.概况.报表分析.在线查询等. 访问日志(Accce ...
最新文章
- mysql表数据以本地文件方式导入Hive
- angularjs移除不必要的$watch
- Linux 利用yum源安装nginx
- python输入多个数据存入列表_python怎么把input的值储存到一个列表
- pyemd实现EMD
- ‘cross-env‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- 外部类、内部类、局部内部类、匿名类(Java)
- java使用jeids实现redis2.6的HyperLogLog数据结构的操作
- 康奈尔大学计算机科学人工智能,美国康奈尔大学工程学院申请之计算机科学
- windows开启远程桌面命令
- android win10 驱动安装失败,解决在win10系统下小米手机驱动安装失败的具体步骤...
- 微信支付开发:当前URL未注册
- 桌面美化 | win10高仿mac桌面
- html语言定义诗歌教学实例,幼儿园中班语言多媒体教学活动案例:诗歌——家...
- 触摸屏是怎么控制PLC的?
- STC 数码管显示及74HC573在其中的应用
- css改变透明背景png图片的图标颜色
- JS格式化JSON,JSON着色
- 将计算机设置成交换机主机名,交换机配置基本使用命令解析
- 鹏业安装云算量免费使用,只需这几步