api网关和esb区别_具有ESB,API管理和Now .. Service Mesh的应用程序网络功能。

api网关和esb区别

我最近谈论了微服务模式的演变,以及来自Lyft的Envoy之类的服务代理如何帮助将弹性,服务发现,路由,指标收集等责任推到应用程序下一层。 否则,我们冒着希望并祈祷各种应用程序将正确实现这些关键功能或依靠特定于语言的库来实现这一目标的风险。 有趣的是,这种服务网格的想法与企业空间中的客户所知道的其他概念有关,并且我对此关系有很多疑问。 具体来说,服务网格与ESB,消息代理和API管理之类的事物有何关系? 这些概念肯定存在重叠,因此让我们深入研究吧。 欢迎在Twitter上关注@christianposta,以获取有关此主题的更多信息!

四个假设

1)服务通过网络进行通信

首先要说的是:我们正在谈论通过异步,分组交换网络相互通信和交互的服务。 这意味着它们在自己的进程和自己的“时间边界”(因此在这里是异步性)中运行,并通过网络发送数据包进行通信。 不幸的是, 不能保证异步网络的交互 :我们可能会以失败的交互,停滞/潜在的交互等为最终结果,而这些场景彼此之间是无法区分的。

2)如果仔细观察,这些相互作用是不平凡的

第二点是:这些服务如何相互交互并非易事; 我们必须处理失败/部分成功,重试,重复检测,序列化/反序列化,语义/格式转换,多语言协议,路由到正确的服务以处理我们的消息,处理消息泛滥,服务编排,安全性等问题含义等。很多事情可能并且确实会出错。

3)了解网络有很多价值

第三:了解应用程序之间如何通信,消息如何交换以及潜在地控制此流量的方法具有很大的价值。 这一点与我们对3/4层网络的看法非常相似; 了解哪些TCP段和IP数据包正在穿越我们的网络,控制有关如何路由它们,允许什么的规则等,这很有价值。

4)最终是应用程序的责任

最后:正如我们从头到尾的论点所知道的那样,是应用程序本身负责其声称的业务逻辑的安全性和正确的语义实现–不管我们从底层基础结构(重试,事务,重复检测等)获得什么可靠性。我们的应用程序仍必须防范用户的愚蠢行为(两次下订单)–有助于实现这一目标的任何事情都是实施/优化细节。 不幸的是,这没有办法。

应用网络功能

我认为,无论您喜欢哪种服务体系结构(微服务,SOA,对象请求代理,客户端/服务器等),这些观点都是有效的–但是,在过去,我们模糊了关于优化属于何处的界限。 在我看来,有水平的应用程序网络功能是公平的游戏,可以优化我们的应用程序(并放入基础架构中,就像我们在较低级别的堆栈中所做的一样),还有其他一些与我们的业务更紧密相关不应轻易“优化”的逻辑

网络

让我们快速退后一步,了解我们的应用程序下面的网络是什么样的(非常琐碎和高级:)。 当我们从一项服务向另一项服务发送“消息”时,我们将其传递到操作系统的网络堆栈,然后该网络堆栈将弄清楚如何将其放入网络。 网络根据级别来处理传输单元 (帧,数据报,数据包)等。这些传输单元通常由一个结构组成,该结构包括一个“标头”和一个“有效载荷”,而“标头”包含有关该标头的足够元数据。我们可以做一些基本的事情,例如路由,确认跟踪/去重复等。

这些传输单元是通过网络中的不同点发送的,这些点决定是否允许该单元通过,是否将其路由到其他网络或将其传递给预期的接收者。 这些传输单元可以在路径上的任何位置被丢弃,复制,重新排序或延迟。 我们的操作系统的网络堆栈中存在TCP等更高级别的“可靠性”功能,可以跟踪重复,确认,超时,排序,丢失单元等情况,并可以重试故障,重新排序数据包等。

这些功能类型是由基础结构提供的,并且没有与业务逻辑混合使用-并且可以很好地扩展(Internet规模!)。我刚刚遇到了Phil Calcado的精彩博客,也对此做了很好的解释 。

应用

在应用程序级别,我们做类似的事情。 我们将与合作者服务的对话分成“消息”(请求,事件等)的传输单元 。 当我们通过网络拨打电话时,我们必须能够对应用程序消息执行超时,重试,确认,施加反压等操作。 这些是普遍的应用程序级问题,并且在我们构建服务风格的体系结构时总是会出现。 我们需要以某种方式解决它们。 我们需要一种实现应用程序网络功能的方法。

例如:过去,我们尝试使用消息传递代理解决这些问题。 我们有一套集中的,面向消息传递的中间件(甚至可能具有多协议支持,因此我们可以转换消息有效负载并“集成”客户端),这些中间件负责在客户端之间传递消息。 在我看到的许多示例中,该模式基本上是在消息传递系统上执行请求/答复(RPC)。

这默认地帮助解决了围绕应用程序网络功能的一些问题:诸如负载平衡,服务发现,背压,重试等之类的事情都委托给了消息传递代理。 由于所有流量都打算通过这些代理流动,因此我们有一个中心点可以从中观察和控制网络流量。 但是,正如@tef_ebooks在Twitter上指出的那样,这种方法相当繁琐 。 它也往往是体系结构中的一个大瓶颈,并且在交通控制,路由,策略执行等方面并没有我们想象的那么容易。

因此,我们也尝试这样做。 我们认为“好吧,让我们只添加路由,转换,策略控制”到我们已经拥有的集中式消息总线中。 实际上,这是自然发展的过程–我们可以使用消息传递主干来提供集中化/控制和应用程序网络功能,例如服务发现,负载平衡,重试等–但是,我们还将在更多事情上分层,例如协议中介,消息转换,消息路由,业务流程等。我们认为,如果我们可以将这些看似水平的东西推入基础架构,我们的应用程序可能会更轻/更薄/更敏捷等。这些担忧确实是ESB真正发展起来的,可以帮助解决这些问题。

正如我的同事Wolfram Richter指出的那样:“关于ESB概念,IBM 2005年关于SOA体系结构的白皮书( http://signallake.com/innovation/soaNov05.pdf第2.3.1章 )将ESB定义如下:”

The enterprise service bus (ESB) is a silent partner 
in the SOA logical architecture. Its presence in the 
architecture is transparent to the services of your 
SOA application. However, the presence of an ESB is 
fundamental to simplifying the task of invoking 
services – making the use of services wherever they 
are needed, independent of the details of locating 
those services and transporting service requests 
across the network to invoke those services wherever 
they reside within your enterprise.

似乎是合法的! 甚至似乎是我们正在尝试的新兴技术中要做的一些事情。 你知道吗? 我们是!!! 过去的问题不仅已经神奇地消失了 ,而且背景和环境也发生了变化。 希望我们能够从过去的未兑现承诺中学习。

例如,在大型供应商所设想的SOA时代(通过委员会等编写了无休止的规范,对EAI进行了品牌重塑等),我们发现三件事促成了“ ESB”的未兑现承诺:

  • 组织结构(让我们再建一个筒仓!)
  • 技术很复杂(SOAP / WS-*,JBI,Canonical XML,专有格式等)
  • 需要业务逻辑来实现路由,转换,中介,编排等操作

最后一点是什么过分的事情。 我们希望敏捷,但是我们将重要的业务逻辑从我们的服务中分散到另一个团队拥有的集成层中。 现在,当我们想对我们的服务进行更改(敏捷)时,我们就可以了。 我们必须停止并与ESB团队进行重大同步(脆弱)。 随着这个团队和这个体系结构成为许多应用程序的中心,我们可以了解ESB团队是如何被请求(敏捷)所淹没,但却无法跟上(脆弱)的。 因此,尽管用意良好,但我们发现将核心应用程序网络功能与与业务逻辑相关性更高的功能混合在一起并不是一个好主意。 我们最终会出现膨胀和瓶颈。

随之而来的是REST革命和基于API的思维方式。 这一运动在某种程度上是对SOAP / ESB / SOA复杂性的抵制,再加上一种新的思考方式(通过API)将我们的数据内翻以激发新的业务模型并扩展现有模型。 我们还为我们的体系结构引入了新的基础架构:API管理网关。 该网关为我们提供了集中式控制方式,以通过安全ACL,访问配额和API使用计划,指标收集,计费,文档编制等来控制外部对我们业务API的访问。但是,就像我们在前面的示例中看到的消息代理一样,当我们进行某种集中式治理时,我们冒着想要用它完成太多事情的风险。 例如,当API调用通过我们的网关进行时,为什么不添加路由,转换和编排之类的内容呢? 问题在于,我们开始着手构建将基础架构级别的网络问题与业务逻辑相结合的ESB。 这是一个死胡同。

但是,即使在REST /非SOAP时代,我们仍然必须解决服务之间的上述问题(不仅仅是所谓的“南北”流量,我们还需要解决“东西向”流量)互动)。 更具挑战性的是,我们需要找出一种使用商品基础架构环境(又名云)的方法,这种环境会加剧这些问题。 传统的消息代理,ESB等不太适合此模型。 相反,我们最终在业务逻辑中编写了应用程序网络功能。 …我们开始看到诸如Netflix OSS堆栈 , Twitter Finagle甚至我们自己的Fuse Fabric之类的东西可以解决这些问题。 这些通常是旨在解决上述某些问题的库或框架,但是它们是特定于语言的,并与我们的业务逻辑(或我们遍布整个基础架构的业务逻辑)混合在一起。 该模型也存在问题。 这种方法需要在每种语言/框架/运行时上进行大量投资。 我们基本上必须跨语言/框架重复工作,并期望所有不同的实现都能高效,正确且一致地工作。

通过这些试验和磨难,我们可以将应用程序网络功能以最低的开销和高度分散的功能推入基础架构,并具有控制/配置/监视应用程序级请求的能力,从而解决了一些较早的问题。 我们一直称其为“服务网格”。 一个很好的例子是基于Envoy Proxy的istio.io项目。 这使我们在架构上将应用程序网络功能的关注点与侧重于区分业务逻辑的关注点分开:

正如Phil Calcado解释的那样 ,这与我们对TCP / IP网络层所做的非常相似。 网络功能被推出到操作系统中,并且不直接属于应用程序。

那么这与…有什么关系?

通过服务网格,我们将应用程序网络功能与应用程序代码,业务逻辑明确分离,并将其向下推入一层(进入基础结构),这与我们对网络堆栈,TCP等所做的操作类似)。

有问题的网络功能包括:

  • 简单的基于元数据的路由
  • 自适应/客户端负载平衡
  • 服务发现
  • 断路
  • 超时/重试/预算
  • 限速
  • 指标/记录/跟踪
  • 故障注入
  • A / B测试/流量调整/请求屏蔽

明确不包含的内容(更适合您的业务逻辑/应用程序/服务,而不是某些集中式基础结构):

  • 信息转换
  • 消息路由(基于内容的路由)
  • 服务编排

那么,服务网格与…有何不同?

ESB

  • 某些网络功能重叠
  • 分散的控制点
  • 特定于应用程序的策略
  • 不尝试处理业务逻辑问题(映射,转换,基于内容的路由等)

消息经纪人

  • 服务发现,负载平衡,重试,背压方面的重叠(从30,000英尺高度开始)
  • 分散的控制点
  • 特定于应用程序的策略
  • 对消息不承担任何责任

API管理

  • 在策略控制,速率限制,ACL,配额安全性的某些方面存在重叠
  • 不处理API的业务方面(定价,文档,用户到计划的映射等)
  • 相似之处在于它不执行业务逻辑

关于API管理,似乎确实有些重叠,但是我想将这些东西视为高度互补。 API管理提供有关API的高级语义(例如文档,用户注册/访问,生命周期管理,针对开发人员的API计划,用于计费和退款的计量等)。 调用API时,低级应用程序网络(如断路器,超时,重试等)至关重要,但它们非常适合服务网格层。 重叠点,例如ACL,速率限制,配额和策略实施等,可以由API管理层定义,但实际上由服务网格层实施。 这样,我们可以拥有完整的端到端策略和访问控制,并可以增强对北/南流量和东/西流量的弹性。 正如@ZackButcher (来自Istio团队) 在Twitter上指出的那样: “随着您的规模越来越大,从生产和管理服务的角度来看,东西向的流量开始越来越像南北向。”

汇集全部

点击查看完整图片

我们需要对我们的系统架构采用API优先的方法。 我们还必须解决诸如弹性之类的问题。 我们还发现我们面临整合挑战。 并且在许多方面,基于异步事件传递和事件处理作为API和微服务交互的底板的体系结构可以帮助提高可用性,弹性和降低脆弱性。 过去,解决这些问题一直是充满挑战的产品,因为竞争产品和解决方案重叠并混淆了关注点-当我们迁移到云架构时,很明显,我们需要梳理这些关注点并将它们放在我们架构的适当位置,否则我们将会屈从于一些相同的经验教训。

从上图中,我们可以看到以下几点:

  • 北向/南向交通的API管理
  • 服务网格(控制+数据平面),用于服务之间的应用程序网络功能
  • 用于东西方流量的Service Mesh强制API管理策略
  • 集成(业务流程,转换,反腐败层)作为应用程序的一部分
  • 事件驱动的消息背板可实现真正的异步/事件驱动的交互

如果我们不听前面提出的四个假设,那么我们将努力解决这些问题:

  • 第一点:服务通过网络进行交互–我们使用服务网格数据平面/服务代理
  • 第二点:交互是不平凡的–在服务本身中实现业务集成
  • 第三点:控制和可观察性–使用API​​管理+服务网格控制平面
  • 第四点:您的特定业务逻辑; 使用服务网格/消息传递/等进行优化

您真的可以分离出业务逻辑吗?

我想是的。 但是,会有模糊的线条。 在服务网格中,我们是说我们的应用程序应了解应用程序网络功能,但不应在应用程序代码中实现。 关于使应用程序更智能,应用程序网络功能/服务网格层到底在做什么,有很多话要说。 我想我们会在这种情况下看到库/框架。 例如,如果Istio服务网格引发断路器,重试某些请求或由于特定原因而失败,那么对于应用程序而言,可以更好地了解这些情况或上下文将是很好的。 我们需要一种方法来捕获此错误并将其传达回服务。 另一个示例是在服务之间传播跟踪上下文(类似于OpenTracing的分布式跟踪),并透明地完成此操作。 我们可能会看到这些专用于应用程序/语言的精简库,这些库可以使应用程序/服务更智能,并允许他们采用特定于错误的资源。

我们从这里去哪里

今天,该体系结构的各个部分处于不同的成熟度级别。 即使如此,对我们的服务体系结构采取有原则的方法也是关键。 将业务逻辑与应用程序网络分开。 使用服务网格来实现应用程序网络,使用API​​管理层来处理以更高阶的API为中心的问题,特定于业务的集成驻留在服务层中,并且我们可以通过事件驱动的背板构建数据密集型/可用系统。 我认为,随着我们的前进,我们将继续在特定的技术实现中看到这些原则的发展。 在红帽(我工作的地方),我们看到这样的技术3比例 , Istio.io上Kubernetes , Apache的骆驼和消息传递技术,如ActiveMQ的阿蒂米斯 / Apache的Qpid调度路由器 (包括非红帽的技术,如Apache的卡夫卡恕我直言)强积木建立遵循这些原则的服务架构。

翻译自: https://www.javacodegeeks.com/2017/08/application-network-functions-esbs-api-management-now-service-mesh.html

api网关和esb区别

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

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

相关文章

是否可以改变 宏的值_给女人的建议:当父母不同意你的男朋友,可以尝试六个方法...

女生在面对感情婚姻的时候都应该深思熟虑,很多时候考虑问题应该全面一点,在现实生活中,一部分女生在和男朋友谈恋爱的时候,却没有得到父母的同意,甚至父母非常反对,在这个时候女生应该尝试六个方法&#xf…

mysql 存储过程求和_MySQL - 存储过程和函数

MySQL - 存储过程和函数创建和调用存储过程-- 创建stu_group()存储过程,封装 分组查询总成绩,并按照总成绩升序排序的功能-- 注意: DELIMITER 必须写在一行的最前面, 前面不能有空格####DELIMITER $CREATE PROCEDURE stu_group()BEGINSELECT gender,SUM(…

php云服务器买什么系统吗,php云服务器买什么系统

php云服务器买什么系统 内容精选换一换新购买的云硬盘怎么使用云硬盘是网盘吗云硬盘可以单独使用吗云硬盘购买后不使用会收费吗如何停止云硬盘收费如何查看云硬盘详细信息云硬盘的可用区可以变更吗云硬盘是否支持共享盘转非共享盘,普通IO转超高IO云硬盘已退订、误删…

apache.camel_在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...

apache.camel从历史上看, Apache ActiveMQ消息代理最初是在大型消息以MB为单位而不是GB的情况下创建的,就像您今天所做的那样。 下一代代理Apache ActiveMQ Artemis(或仅是Artemis)则不是这种情况,后者对大型消息的支…

double小数点后最多几位_用了这么多英语学习APP后,我还是最喜欢这4款

适合系统:安卓、iOS(后台回复「236」获取)学霸君曾经在知乎看到过一个问题:英语近几年会被淘汰吗?现在学英语还有什么用?底下点赞数最多的一个评论:不是英语即将淘汰,而是英语水平差到还需要艰难学英语的人…

软件项目报价明细表_BIM必学软件之REVIT

BIM与Revit是什么关系呢?Revit在众多BIM软件中扮演什么角色,有什么意义?今天我们就来说说REVIT。BIM是建筑从项目立项、规划、概算、设计、预算、建造、结算、审计、物业等全生命周期中的智能动态控制系统,俗称建筑智能机器人系统。 BIM的关…

tdd java_适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)

tdd java使用类似于BDD的语法,Java 8和Mockito-AssertJ二重奏为Idea调整JUnit测试类模板。 本文涵盖的主题似乎很简单。 但是,根据我的培训师经验,我知道(不幸的)这不是常见的做法。 因此,我决定写这篇简短…

Linux 进程状态介绍

文章目录进程状态说明进程状态图进程状态说明 进程主状态:D:不可中断的睡眠状态 uninterruptible sleeping(usually IO)R:正在运行,或在队列中的 running or runnable (on run queue)S:处于休眠状态 interruptible sle…

petalinux 配置_澧县高压管道工厂化配置专业销售

澧县高压管道工厂化配置专业销售 公司生产设备齐全,热处理工艺精湛,检测设备,年生产能力上万吨,具备化学分析、全相检验、物理实验、无损探伤等检测能力。能生产各种标准的不锈钢、合金钢、碳钢弯头、无缝弯管、无缝三通、高压异径…

php mysql刷新表格_php读入mysql数据并以表格形式显示(表单实现无刷新提交)

在网上参考了些例子,于是我这个sample实现了如标题上的功能。话不多说,上代码:lishi.html搜索form#form1 {height: 93%;}p {width: 99%;height: 84%;}iframe#id_iframe {width: 99%;height: 100%;border: 0 red solid;}input{display:block;}…

abstract类_【Java】类的结构 - Nemo

类与对象类中主要包括五种结构,下面进行对这五种结构进行详细的介绍。1. 面向对象与面向过程面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象:强调具备了功能的对象,以类/对象为最小单位…

二元函数可微与可导的关系_多元函数中可微与可导的直观区别是什么?

在多元的情况下,可微可导的关系要比在一元情况下复杂,但是只是要复杂一些,如果我们从一元开始去理解,你会发现并不困难。这篇文章主要阐述以下三个概念:偏微分偏导数全微分全导数这里暂时不讲,看名字好像和…

uniapp app蓝牙打印_给编程器加装蓝牙串口模块,用手机APP操作打印信息进控制台...

公众号回复【编程器】可下载蓝牙串口APP专用蓝牙串口模块购买:https://item.taobao.com/item.htm?id619731291566编程器加装蓝牙模块后,可以方便的使用手机查看打印信息,进入控制台执行各种串口命令。本款蓝牙串口APP具有保存打印信息、分享…

adb 最大连接_手机触屏失效的抢救办法,以及如何利用adb实现PC与手机交互

手机进水或者摔坏屏幕导致触屏失效的时候,一般情况下,要么选择换屏,要么选择把手机扔掉。但其实如果有一根OTG线,手机中的资料还可以安全备份出来,或者还可以再利用起来,发挥一下余热做点别的事。像上图一样…

proxy跨域不生效_前端开发:深入使用proxy代理解决跨域问题

在前端领域里面,跨域指的是浏览器允许向服务器发送跨域请求,进而克服Ajax只能同源使用的局限性限制。同源策略是一种约定,而且是浏览器中最基本也是最核心的安全功能,若缺少了该策略,浏览器非常容易被***;同…

mysql在计算机管理中的路径怎么修改_称重软件中的数据修改怎么知晓?

称重软件称重软件应客户需求,数据允许修改,但不允许删除只能作废。如果数据已修改,该如何知晓该数据是修改过的呢,这就用到了标记。用户修改数据时为保证数据的可追溯性,同样在数据安全方面也有相应的要求,…

popupwindow 不抢夺焦点_央视专访“上个厕所就要3000块”的亲历者, 被“坑”的不愉快经历...

资讯 聚焦 活动 宣传 推广 品牌 热文 找小编合作加个人微信2871001801百度百科:宁河于雍正九年(1731年)从宝坻县分出,据《河北省县名考原》称:“蓟运河纵贯县境,时多水患,故县以宁河名”!当然还有另外别的解释!民国三年(1914年)属直隶省津海道,民国十七年(1928年…

小程序搜索框_微信小程序搜索及优化相关知识科普

生活中我们常常会用到微信小程序,但很多人不知道该如何搜索、找到小程序;而有些已经做了自己的小程序的商家,也不懂怎么提升自己的微信小程序搜索效果。所以下面就跟大家科普下这两个问题。1.怎么搜索微信小程序打开微信,点击右上…

su联合推拉插件_[实习小记一一SU建模]

鉴于本菜鸡在实习阶段一直在SU建模,那就讲讲我在SU建模的心路历程吧。本菜鸡之前还是SU小白时(俗称白斩鸡,并且现在也很白),只会死命地用推拉。来到公司初探SU,第一个高层建筑便花费我半个月的时间(我突然想起有一篇日记特别好笑我是个SU人&a…

纹理和基元_通过粘性仙人掌基元进行延迟加载和缓存

纹理和基元您显然知道什么是延迟加载 ,对吗? 而且您无疑知道缓存 。 据我所知,Java中没有一种优雅的方法来实现它们中的任何一个。 这是我在Cactoos原语的帮助下为自己找到的。 Matteo Garrone的《 Reality》(2012年)…