通讯网关 api网关_API网关正在经历身份危机

通讯网关 api网关

这些年来,API网关正在经历一些身份危机 。

  • 它们是否是集中的共享资源,从而促进了API对外部实体的公开和治理?
  • 它们是集群入口哨兵,可以严格控制哪些用户流量进入或离开集群吗?
  • 还是他们根据自己拥有的客户端类型,使用某种API合并胶来更简洁地表达API?
  • 当然,房间里的大象和我经常听到的一个问题:“服务网格会使API网关过时吗?”

一些背景

随着技术的发展日新月异,以及整个行业通过技术和架构模式进行快速洗牌,您会被认为是“所有这些都使我旋转”。 在本文中,我希望归纳出“ API网关”的不同身份,阐明组织中的哪些组可以使用API​​网关(他们正在尝试解决的问题),并重新关注第一原理。 理想情况下,在本文结束时,您将更好地理解API基础结构在不同层次上对不同团队的作用,以及如何从各个层次中获得最大价值。

在深入探讨之前,让我们先清楚一下术语“ API”。

我对API的定义:

一个明确定义的目的明确的接口,旨在通过网络调用,该接口使软件开发人员能够以受控且舒适的方式对组织内的数据和功能进行编程访问。

这些接口抽象了实现它们的技术基础结构的细节。 对于这些设计的网络端点,我们希望获得一定程度的文档,使用指南,稳定性和向后兼容性。

相反,仅因为我们可以通过网络与另一软件进行通信,并不一定意味着远程端点就是此定义的API。 许多系统相互通信,但是通信更加随意发生,并且在耦合和其他因素之间进行权衡取舍。

我们创建API来为业务的各个部分提供周到的抽象,以实现新的业务功能以及偶然的创新。

在谈论API网关时,首先要列出的是API管理。

API管理

许多人从API管理的角度考虑API网关。 这是公平的。 但是,让我们快速看一下此网关的功能。

借助API Management ,我们正在寻求解决“何时我们希望公开现有的API供其他人使用”的问题,我们如何跟踪谁使用这些API,实施关于允许谁使用它们的策略,建立安全性流程以进行身份​​验证和授权许可使用并建立可在设计时使用的服务目录,以促进API使用并为有效治理奠定基础。

我们要解决“我们想与其他人共享,但要按我们的条件共享这些现有的,经过策划的API”的问题。

API管理也做得很好,它允许用户(潜在的API使用者)进行自助服务,签署不同的API使用计划(请考虑:给定时间范围内,指定价格点上每个终结点的每个用户的调用次数)。 我们能够执行这些类型的管理功能的基础架构是我们的API流量经过的网关 。 至此,我们可以执行诸如身份验证,速率限制,指标收集,其他策略执行等操作。 等

API网关

利用API网关的API管理软件示例:

  • Google Cloud Apigee
  • 红帽3Scale
  • Mulesoft
  • Kong

在此级别上,我们正在考虑API(如上定义)以及如何最好地管理和允许对其进行访问。 我们不是在考虑服务器,主机,端口,容器甚至服务(另一个定义不明确的词,但请坚持我!)。

API管理(以及它们相应的网关)通常被实现为“平台团队”,“集成团队”或其他API基础架构团队所拥有的受严格控制的共享基础架构。

需要注意的一件事:我们要小心,不允许任何业务逻辑进入这一层。 如前一段所述,API管理是共享的基础结构,但是由于我们的API流量经过了它,因此它倾向于重新创建“全知全能”(认为是企业服务总线)治理门,必须所有人协调以更改我们的服务。 从理论上讲,这听起来不错。 在实践中,这最终可能成为组织瓶颈。 有关更多信息,请参见这篇文章: 具有ESB,API管理和Now…Service Mesh的应用程序网络功能?

集群入口

为了构建和实现API,我们专注于代码,数据,生产力框架等内容。 但是,要想使这些事情中的任何一个产生价值,就必须对其进行测试,部署到生产中并进行监控。 当我们开始部署到云原生平台时,我们开始考虑部署,容器,服务,主机,端口等,并构建我们的应用程序以生活在这种环境中。 我们可能正在设计工作流(CI)和管道(CD),以利用云平台快速移动,进行更改,将其展示在客户面前,等等。

在这种环境下,我们可能会构建和维护多个群集来承载我们的应用程序,并且需要某种方式来访问这些群集中的应用程序和服务。 以Kubernetes为例思考。 我们可能使用Kubernetes Ingress控制器来允许访问Kubernetes集群(集群中的其他所有内容都无法从外部访问)。 这样,我们就可以通过定义明确的入口点(例如域/虚拟主机,端口,协议等),严格控制哪些流量可以进入(甚至离开)我们的集群。 等

在此级别上,我们可能希望某种“入口网关”成为允许请求和消息进入群集的流量哨兵。 在这个级别上,您的思考更多是“我的集群中有此服务,我需要集群外的人才能调用它”。 这可能是服务(公开API),现有的整体组件,gRPC服务,缓存,消息队列,数据库等。有些人选择将其称为API网关,其中有些人实际上可能会做更多比流量的入口/出口要大,但是重点是在集群操作级别存在此级别的问题。 随着我们倾向于部署更多集群(相对于一个单一的,高度多租户的集群),我们最终会有更多的入口点,并且需要这些入口点之间进行交互。

API网关

这些类型的入口实现的示例包括:

  • Envoy代理及其基础上的项目包括:
    • 数据线大使
  • 代理
    • 包括OpenShift的路由器
  • NGINX
  • 特拉菲克

此级别的集群入口控制器由平台团队操作,但是,这部分基础架构通常与更分散的自助服务工作流相关联(正如您对云原生平台所期望的那样)。 参见Weaveworks的好伙伴介绍的“ GitOps”工作流程

API网关模式

术语“ API网关”的另一种扩展是我在听到该术语时通常会想到的扩展,它与API网关模式最相似。 克里斯·理查德森(Chris Richardson)在第8章的“微服务模式”一书中很好地介绍了这种用法。我强烈建议您将此书用于此以及其他微服务模式教育。 可以在他的microservices.io网站上的API Gatway Pattern上进行快速浏览。简而言之,API-gateway模式是管理API,以使不同类别的消费者更好地使用。 此策展涉及一个API间接级别。 您可能会听到另一个代表API网关模式的术语是“后端的后端”,其中“前端”可以是文字前端(UI),移动客户端,IoT客户端甚至其他服务/应用程序开发人员。

在API网关模式中,我们显着简化了一组API的调用,以针对特定的用户,客户端或使用者组为“应用程序”模拟内聚的API。 回想一下,当我们使用微服务构建系统时,“应用程序”的概念就消失了。 API网关模式有助于恢复此概念。 这里的关键是API网关,一旦实现,它将成为客户端和应用程序的API,并负责与任何后端API和其他应用程序网络端点(不满足上述API定义的端点)进行通信。

与上一节中的Ingress控制器不同,此API网关更接近于开发人员对世界的看法,并且较少集中在暴露给集群外使用的端口或服务上。 此“ API网关”也不同于我们管理现有API的API管理世界观。 该API网关将对后端的调用混搭在一起,这些调用可能会公开API,但也可能会与未描述为API的事物进行对话,例如对旧系统的RPC调用,协议与“ REST”的外观不符,例如被黑通过HTTP,gRPC,SOAP,GraphQL,websocket和消息队列的JSON。 也可以调用这种类型的网关来进行消息级转换,复杂的路由,网络弹性/后备以及响应的聚合。

如果您熟悉REST API的Richardson Maturity模型,则将调用实现API网关模式的API网关,以集成比Level 1 – 3实现更多的Level 0请求(及其之间的所有内容)。

API网关

这些类型的网关实现仍需要解决速率限制,身份验证/授权,断路,度量收集,流量路由等问题。 这些类型的网关可以在集群的边缘用作集群入口控制器,也可以在集群内部用作应用程序网关。

API网关

此类API网关的示例包括:

  • Spring Cloud Gateway
  • 格洛
  • Netflix Zuul
  • IBM-Strongloop回送/微网关

也可以使用更多通用的编程或集成语言/框架来构建此类网关,例如:

  • 阿帕奇骆驼
  • Spring整合
  • Ballerina
  • Eclipse Vert.x
  • 节点JS

由于这种类型的API网关与应用程序和服务的开发密切相关,我们希望开发人员能够参与帮助指定API网关公开的API,了解所涉及的任何mashup逻辑以及需求快速测试和更改此API基础结构的能力。 我们还希望操作或SRE对API网关的安全性,弹性和可观察性配置有一些意见。 这种级别的基础结构还必须适应不断发展的按需自助服务开发人员工作流。 再次查看GitOps模型以获取更多信息。

启用服务网格

在云基础架构上运行服务体系结构的一部分包括难以在网络中构建正确级别的可观察性和控制。 在解决此问题的先前迭代中, 我们使用了应用程序库和希望的开发人员治理来实现此目的 。 但是,在大规模和跨多种环境的情况下,服务网格技术的出现提供了更好的解决方案 。 服务网格通过透明地实现,为平台及其组成服务带来以下功能

  • 服务到服务(即东西向交通)的弹性
  • 安全性包括最终用户身份验证,相互TLS,服务到服务RBAC / ABAC
  • 黑匣子服务的可观察性(专注于网络通信),例如请求/秒,请求延迟,请求失败,断路事件,分布式跟踪等
  • 服务到服务速率限制,配额执行等

精明的读者会认识到, API网关和服务网格在功能上似乎有所重叠 。 服务网格的目标是通过在L7透明地解决所有服务/应用程序的这些问题。 换句话说,服务网格希望融合到服务中(实际上并没有被编码为服务的代码)。 另一方面,API网关位于服务网格上方并与应用程序一起使用(L8?)。 服务网格为服务,主机,端口,协议等(东西方流量)之间的请求流带来了价值。 他们还可以提供基本的集群入口功能,以将某些此功能引入南北交通。 但是,这不应与API网关可以带来北/南通信量的功能(如在集群的北/南和应用程序或一组应用程序在北/南)中混淆。

Service Mesh和API网关在某些方面在功能上有重叠,但是是互补的,因为它们位于不同的级别并解决不同的问题。 理想的解决方案是将每个组件(API管理,API网关,服务网格)插入并播放到您的解决方案中,并在需要时在组件之间建立良好的边界(或在不需要时排除它们)。 同样重要的是找到适合分散式开发人员和运营工作流程的这些工具的实现。 即使这些不同组件的术语和标识存在混淆,我们也应该依靠基本原理,并了解这些组件在我们的体系结构中带来了价值,以及它们如何独立存在和互补并存。

API网关

我们很乐意为您服务!

你们中的有些人可能知道我非常热衷于帮助人们,尤其是在云,微服务,事件驱动的体系结构和服务网格领域。 在我的公司Solo.io中 ,我们正在帮助组织消除混乱,并以适当的级别以及成功使用它们的步伐(如果需要,更重要的是,成功地)采用网关和服务网格之类的API技术。 !)。 我们正在建设的工具,如GLOO , 东张西望 ,并SuperGloo技术类似的顶部特使代理 , GraphQL和Istio以帮助实现API网关和服务网格管理。 请直接与我们联系( @soloio_inc , http : //solo.io )或与我联系( @christianposta , blog ),以深入了解我们的愿景以及我们的技术如何为您的组织提供帮助。 在接下来的系列博客中,我们将更深入地探讨API网关模式,多个集群的困难,多服务网格的困难等等! 敬请关注!

还相关阅读:

http://blog.christianposta.com/microservices/application-network-functions-with-esbs-api-management-and-now-service-mesh/

翻译自: https://www.javacodegeeks.com/2019/01/api-gateways-going-identity-crisis.html

通讯网关 api网关

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度搜索引擎使用技巧

1.在指定的网站搜索内容 在搜索框输入:site:youku.com 蛋炒饭,则只会返回优酷网站上关于蛋炒饭的内容 2.屏蔽指定的网站 例如,搜索“内存溢出”,但是不希望看到 csdn 网站相关的内容,你可以在搜索框输入:内…

docker 容器监控_以简便的方式监控Docker容器中的ADF应用程序

docker 容器监控在这篇简短的文章中,我将展示一种简单的方法来确保在Docker容器中运行的ADF应用程序在内存利用率方面是健康的Java应用程序。 我将使用标准工具JConsole,它是计算机上JDK安装的一部分。 如果存在问题(例如,内存泄漏…

phpexcel 日期 时分秒_thinkPHP+PHPExcel实现读取文件日期的方法含时分秒

Vendor(PHPExcel.PHPExcel.IOFactory);$inputFileName Public/demo/demo.xls;$objReader new PHPExcel_Reader_Excel5();$objPHPExcel $objReader->load($inputFileName);$sheet $objPHPExcel->getSheet(0);$highestRow $sheet->getHighestRow(); // 取得总行数$…

css中的display属性值:table,table-row,table-cell

table&#xff1a;此元素会作为块级表格来显示&#xff08;类似 <table>&#xff09;&#xff0c;表格前后带有换行符。 table-row&#xff1a;此元素会作为一个表格行显示&#xff08;类似 <tr>&#xff09;。 table-cell&#xff1a;此元素会作为一个表格单元格显…

Bootstrap的学习

文章目录概念入门响应式布局响应式布局的实现&#xff08;栅格系统&#xff09;示例代码注意事项栅格系统参考视频应用 Bootstrap 的组件概念 一个前端开发的框架&#xff0c;Bootstrap&#xff0c;来自Twitter&#xff0c; 是目前很受欢迎的前端框架。Bootstrap 是基于HTML、…

jdk8 string::_JDK 12的String :: transform方法的简要但复杂的历史

jdk8 string::最近有人提议从JDK 12中删除Java预览功能Raw String Literals &#xff08; JEP 326 &#xff09;&#xff0c; 现在正式宣布将删除该预览功能 &#xff08; Java SE 12 [JSR 386] 25版将其删除 &#xff09;。 JDK String类中已添加了几种方法来支持此功能。 即使…

注册界面的实现案例视频(前端开发)

视频1&#xff1a;https://live.csdn.net/v/182184 视频2&#xff1a;https://live.csdn.net/v/182185 视频3&#xff1a;https://live.csdn.net/v/182186 视频4&#xff1a;https://live.csdn.net/v/182200

jdbc如何写csv文件_Java:将JDBC结果集作为CSV流化

jdbc如何写csv文件在上一篇文章中 &#xff0c;我展示了如何将java.sql.ResultSet转换为JSON并将其流回调用方。 这篇文章是关于以CSV格式流式传输。 流式传输使您可以一点一点地传输数据&#xff0c;而不必将所有数据都加载到服务器的内存中。 例如&#xff0c;考虑以下Resul…

使用Bootstrap开发网站首页

视频1&#xff1a;https://live.csdn.net/v/182207 视频2&#xff1a;https://live.csdn.net/v/182208 视频3&#xff1a;https://live.csdn.net/v/182209

在java中3.14156d表示_2006年9月计算机等级考试二级Java笔试真题

一、选择题(每小题2分&#xff0c;共70分)下列各题A)、B)、C)、D)四个选项中&#xff0c;只有一个选项是正确的&#xff0c;请将正确选项涂写在答题卡相应位置上&#xff0c;答在试卷上不得分。(1)下列选项中不符合良好程序设计风格的是_____。A)源程序要文档化B)数据说明的次序…

apigee 安装_APIGEE:用于API代理的CI / CD管道

apigee 安装在本文中&#xff0c;我们将看到如何为APIGEE API代理创建CI / CD管道。 我已经参考了APIGEE社区上同一主题的几篇文章。 这些给了一些关于如何为API代理设置CI / CD管道的想法。 这是我用来设置CI / CD的工具。 詹金斯 节点 蜂胶 新人 APIGEE管理API 确保已创…

超链接标签/<a>标签

保留 <a> 标签的点击功能&#xff0c;但是点击不需要跳转&#xff0c;也就是取消 href 属性的功能&#xff0c;可以这样做&#xff1a; <a href"javascript:void(0);">test2</a>href 属性不能去掉&#xff0c;否则看不到链接样式。

php model层怎么写逻辑,目前用php框架的话,大家会把逻辑写到model中吗?

目前用php框架的话&#xff0c;大家会把逻辑写到model中吗&#xff1f;还是model只做数据的添加删除 修改操作&#xff1f;如果说是简单 mvc框架 你们把逻辑写在哪里&#xff1f;controller&#xff1f;还是说自己弄了个逻辑层&#xff1f;回复内容&#xff1a;目前用php框架的…

gradle项目 构建_使用Gradle构建Monorepo项目

gradle项目 构建根据Wikipedia的说法 &#xff0c; monorepo是一种软件开发策略&#xff0c;其中许多项目存储在同一资源库中。 这种策略可以快速检测到因依赖关系的更改而导致的潜在问题和破坏&#xff0c;并且已被许多使用大型代码库的组织采用&#xff0c;例如Google&#x…

jsoup爬虫教程技巧_Jsoup V的幕后秘密:优化的技巧和窍门

jsoup爬虫教程技巧我们已经把事情做好了&#xff0c;现在是时候加快工作速度了。 我们会牢记Donald Knuth的警告&#xff1a;“大约97&#xff05;的时间我们应该忘记效率低下&#xff1a;过早的优化是万恶之源”。 根据Jonathan Hedley的介绍&#xff0c;他使用YourKit Java …

DOM(document object model),文档对象模型

DOM 将标记语言文档一次性加载进内存中&#xff0c;在内存中形成一棵 DOM 数。

php 获取请求设备,php – 如何获取设备令牌

我有一个iOS应用程序,我想集成推送通知.我见过tutorial on youtube,一切都还可以,但最近我使用的是开发证书(用于测试 – 不用于AppStore),我的服务器上有PHP脚本.在这个文件中存储了deviceToken,它有我的iPhone并且用php变量$deviceToken编写.但是现在,当我想在AppStore中使用…

java项目使用junit_在Java 8之前的项目中使用JUnit 5

java项目使用junit这篇文章演示了如何在Java 8之前的项目中使用JUnit 5&#xff0c;并解释了为什么它是一个好主意。 JUnit 5至少需要Java 8作为运行时环境&#xff0c;因此您想将整个项目更新为Java8。但是有时由于某些原因&#xff0c;您无法立即将项目更新为Java8。例如&am…

set cache php,TP5之Cache的原理及使用

在当今大流量的互联网之中&#xff0c;Cache的重要性不言而喻。ThinkPhp5作为国内主流框架&#xff0c;提供了强大的Cache功能。让我们跟随本文&#xff0c;来剖析TP5 Cache的原理及使用。为什么需要Cache(缓存)?假设现在有一个小说网,有非常多的读者,有一篇新的章节更新了,那…

IntelliJ IDEA for Mac 项目窗口详解(Project Windows)

Show Members&#xff1a;显示成员&#xff0c;打勾&#xff0c;类的成员&#xff0c;例如&#xff1a;方法、字段等会显示出来&#xff0c;如下图所示&#xff1a; Show Excluded Files&#xff1a;显示排除的文件 Show Visibility Icons&#xff1a;显示可见性图标&#xff…