电商平台建设做网站,潜江资讯网 手机版免费生活资讯,wordpress 旋转预加载,纯英文网站建设什么是网关网关一词来源于计算机网络中的定义#xff0c;网关(Gateway)又称网间连接器、协议转换器。网关的准确定义是#xff1a; 两个计算机程序或系统之间的连接#xff0c;网关作为两个程序之间的门户#xff0c;允许它们通过不同计算机之间的协议通信来共享信息。顾名… 什么是网关 网关一词来源于计算机网络中的定义网关(Gateway)又称网间连接器、协议转换器。网关的准确定义是 两个计算机程序或系统之间的连接网关作为两个程序之间的门户允许它们通过不同计算机之间的协议通信来共享信息。顾名思义API网关就是API之间相互调用的关卡和屏障。API之间为什么需要网关 试想一下我们在实现一个非常庞大的业务系统分为不同的业务domain和子系统各个domain和子系统提供处理业务的API不同系统之间以API的方式进行数据交互。通常情况下我们可能会将所有实现业务功能的API集成到一起API Center给不同的Channel的Portal提供数据处理的能力。当有一天我们的系统需要与第三方发生交互我们既需要暴露给外部系统调用的公开API同时也需要调用外部的API实现自身的业务需求。此时我们将会考虑很多的问题比如服务之间访问的授权和认证安全和性能的监控缓存和日志的处理超时的Retry负载和熔断的处理查询请求的聚合等等一系列的问题。此时你需要一个可以集中处理所有可能在服务调用之间需要处理的一切事情就像是小区的物业和安保一样需要对小区所有的业主处理职责范围内的一切事情。 这是通常情况下API网关需要帮我们处理的事情随着系统业务的不断复杂化我们的系统越越庞大API的交互越来越错综复杂。此时我们可能会考虑将这个庞大的系统拆分成多个细小的domain分别提供各自domain的API。这便是时下最流行的话题微服务。当我们的系统演进到微服务的架构时API网关将是系统必不可少的关键部分。在微服务体系结构中客户端应用程序通常需要使用多个微服务的功能。客户端如果直接消费某服务那通常情况下将需要处理和协调用多个微服务endpoint。当应用程序引入新的微服务或更新现有微服务时会发生什么?试想一下如果你的应用程序有许多微服务那么处理和协调来自客户端如此多的endpoint的请求那对系统来说是一场噩梦而且由于客户端应用程序将与这些endpoint产生耦合这将会使我们的系统边的混乱不堪。 因此我们需要一个中间层或间接层(Gateway)来处理不同client对API的请求这将会使得我们的应用程序处理起来非常方便。如果没有API网关客户端应用程序必须直接向微服务发送请求这就会产生很多混乱的问题比如耦合: 如果没有API网关客户端的应用程序将与内部微服务间耦合。客户端序需要知道实现业务需求的API分散在服务中的哪些部分当我们开发和重构内部服务时将会影响到客户端应用程序并且很难维护因为客户端应用程序需要跟踪多个服务的endpoint多次请求:客户端应用程序中的一个页面可能需要多次调用多个服务来完成某个功能这可能导致客户端和服务器之间的多次往返请求增加了显著的延迟。我们知道在中间级别处理的聚合可以提高客户端应用程序的性能和用户体验。安全问题:如果没有网关所有的服务都必须公开给“外部世界”这使得攻击面比隐藏内部服务更大而这些服务不是客户端应用程序直接使用的。攻击面越小应用程序就越安全。横切关注点:每个公开发布的服务都必须处理诸如授权、SSL等问题。在许多情况下这些关注点可以在一个层中处理这样内部服务就可以简化这让我想起了面向切面的编程AOP什么是网关模式 当我们在使用多个客户端应用程序设计和构建大型或复杂的基于微服务的应用程序时可以考虑使用API网关这是为某些微服务组提供单一入口点的服务它类似于面向对象设计的Facade外观类模式但在微服务中它是系统的一部分。API网关模式的一个变体也称为“Backend for front-end”(BFF)因为你可能会根据每个客户端应用程序的不同需求创建多个API网关。因此API网关位于客户端应用程序和微服务之间它充当反向代理将请求从客户端路由到服务它还可以提供额外的横切特性如身份验证、SSL终止和缓存。下面的图显示了自定义API网关如何适合于基于微服务的体系结构。在上面的示例中API网关将作为自定义Web API或ASP.NET WebHost服务的一个容器运行 在该图中需要强调的是我们将使用一个面向多个不同客户端的自定义API网关服务。这可能是一个重要的风险因为你的API网关服务将根据客户端需求的不断增长和发展最终由于这些不同的需求它将变得臃肿不堪实际上它可能非常类似于单片应用程序或单片服务。这就是为什么我们非常推荐将API网关拆分为多个服务或多个更小的API网关。 在使用API网关模式时我们也要非常小心通常使用单个API网关聚合应用程序的所有内部微服务不是一个好的实践因为一旦这样做了它就充当一个整体聚合器或协调器并通过耦合所有微服务来违反微服务自治。因此API网关应该基于业务边界和客户端应用程序进行隔离而不是作为所有内部微服务的单一聚合器。当把API网关层分解为多个API网关时, 如果你的应用程序有多个客户端, 这可以是一个主要的枢纽来识别多个API的网关类型这样你就可以有不同的外观类来应对每个客户端的需求。这是我们称之为“Backend for front-end”的模式(BFF)其中每个API网关可以为每个客户端提供不同的API甚至可能基于客户端的特定需求实现特定的适配器代码该代码在下面调用多个内部微服务如下图所示上图展示了一个带有多个细粒度API网关的简化体系结构在这种情况下识别每个API GateWay的边界纯粹是基于BFF的模式因此只是基于每个客户端提供各自所需的API但在较大的应用程序也应该更进一步以创建基于业务边界的网关作为第二设计衡量因素。API网关模式中的主要特性 API网关可以根据产品的不同提供多种特性它可能提供更丰富或更简单的特性但是对于任何API网关来说最重要和基本的特性是以下设计方式反向代理或网关路由API网关提供反向代理将请求(通常是Http请求)重新定向或路由到内部微服务的端点。网关为客户端应用程序提供一个endpoint或URL然后在内部将请求映射到一组内部微服务。这个路由特性有助于从微服务的方式来解耦客户端而且也很方便在单一API和客户端之间实现网关的控制这样的话你可以添加新的API作为新的microservices同时仍然使用遗留单一的API直到它在未来被分成许多microservices。因为API的网关的存在客户端应用程序不会注意到所使用的API实现为内部microservices或单一的API当在演进和和重构我们的单一API到 microservices的过程中因为有了API网关路由的存在才不会带来Client请求的URI的变化。想了解更多网关路由的东西请戳这里。请求聚合作为网关模式的一部分你可以将针对多个内部微服务的多个客户端请求(通常是Http请求)聚合到单个客户端请求中。当客户端页面需要调用来自多个微服务的数据时这种模式特别方便。使用这种方法客户端将发送一个请求到API网关然后网关将负责发送多个请求来获取内部microservices然后聚合结果再发送回客户端。这种设计模式的主要优点和目标是减少客户端应用程序和后端API之间的隔阂对于微服务所在的数据中心之外的远程应用程序来说这一点尤为重要比如移动应用程序或来自客户端远程浏览器中的Javascript的SPA应用程序的请求。对于在服务器环境中执行请求的常规web应用程序(如ASP)这种模式并不重要因为延迟比远程客户机应用程序要小得多。是否能够执行此聚合取决于你使用的API网关产品然而在许多情况下在API网关的范围内创建聚合微服务将会更加的灵活所以你也可以在代码中定义聚合(即c#代码)。想了解更多请求聚合的东西请戳这里。横切关注点或网关卸载根据每个API网关产品提供的特性你可以将功能从单个微服务转移到网关通过将横切关注点合并到一层来简化每个微服务的实现。这对于可以在每个内部微服务(如以下功能)中正确实现的复杂的特殊功能来说特别方便。身份验证和授权服务发现集成响应缓存重试策略断路器和QoS。速度限制和节流负载平衡日志记录、跟踪、相关性头文件、查询字符串和声明转换IP白名单根据每个实现API网关产品可以提供更多的横切关注点但这些都是最常见的特性。例如Azure API管理提供了这些特性中的大部分以及许多对商业API非常有用的高级特性。但是对于更简单的方法像Ocelot这样的轻量级API网关是相当灵活的因为你可以将它部署到你所选择的环境和你的微服务。有关网关卸载模式的更多信息请戳这里。 本篇文章主要是介绍了API的网关模式的特性文章是来自微软官方博客并加入了自己的一点理解。译文来自https://blogs.msdn.microsoft.com/cesardelatorre/2018/05/15/designing-and-implementing-api-gateways-with-ocelot-in-a-microservices-and-container-based-architecture/参考资料API Gatewayhttp://microservices.io/patterns/apigateway.htmlhttps://docs.microsoft.com/en-us/azure/architecture/microservices/gatewayAggregation and composition patternhttp://microservices.io/patterns/data/api-composition.html原文地址: https://www.cnblogs.com/xiandnc/p/9270365.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com