.NET微服务体系结构中为什么使用Ocelot实现API网关

为什么要使用API网关而不是直接通信?

在微服务架构中,客户端应用程序通常需要使用来自多个微服务的功能。如果直接执行该消费,则客户端需要处理多个微服务端点以进行呼叫。当应用程序发展并引入新的微服务或更新现有的微服务时会发生什么?如果您的应用程序有许多微服务,则从客户端应用程序处理如此多的端点可能是一场噩梦,并且由于客户端应用程序将耦合到这些内部端点,因此未来发展微服务可能会对客户端应用程序造成很大影响。

因此,具有中间级别或间接层级(网关)对于基于微服务的应用程序非常方便。如果您没有API网关,则客户端应用程序必须将请求直接发送到微服务,并引发问题,例如以下问题。

  • 耦合:如果没有API网关模式,客户端应用程序将耦合到内部微服务。客户端应用程序需要知道应用程序的多个区域如何在微服务中分解。在发展和重构将影响客户端应用程序的内部微服务时,由于客户端应用程序需要跟踪多个微服务端点,因此很难维护它们。

  • 往返次数过多:客户端应用程序中的单个页面/屏幕可能需要多次调用多个服务。这可能导致客户端和服务器之间出现多次网络往返,增加了严重的延迟。在中间级别处理的聚合可以改善客户端应用的性能和用户体验。

  • 安全问题:没有网关,所有微服务必须暴露于“外部世界”,使得攻击面比隐藏客户端应用程序未直接使用的内部微服务更大。攻击面越小,应用程序就越安全。

  • 跨领域问题:每个公开发布的微服务都必须处理诸如授权,SSL等问题。在许多情况下,这些问题可以在单层中处理,以便简化内部微服务。

Ocelot:轻量级和开源API网关。非常适合使用.NET Core微服务开始学习这种模式

Ocelot是一款基于开源.NET核心的API网关,特别针对需要统一进入系统的微服务架构。它轻巧,快速,可扩展,并提供许多其他功能之间的路由和身份验证。

选择Ocelot用于eShopOnContainers参考应用程序的主要原因是因为它是一个.NET Core轻量级API网关,您可以将它部署到您部署微服务/容器的相同应用程序部署环境中,例如Docker主机, Kubernetes,Service Fabric等,由于它基于.NET Core,因此它是跨平台的,允许您在Linux或Windows上进行部署。

在初始架构和模式解释部分之后,下一部分将介绍如何使用Ocelot实现API网关。

什么是API网关模式

当您使用多个客户端应用程序设计和构建大型或复杂的基于微服务的应用程序时,考虑的一个好方法可以是API网关。这是为某些微服务组提供单一入口点的服务。它类似于外观模式从对象-导向的设计,但在这种情况下,它是一种分布式系统的一部分。API网关模式的变体也被称为“前端后端”(BFF),因为您可能会根据每个客户端应用程序的不同需求创建多个API网关。

因此,API网关位于客户端应用程序和微服务之间。它充当反向代理,将来自客户端的请求路由到服务。它还可以提供额外的交叉功能,如身份验证,SSL终止和缓存。

下图显示了自定义API网关如何适用于基于微服务的体系结构。

640?wx_fmt=jpeg

使用实现为自定义Web API服务的API网关

在前面的示例中,API网关将作为以容器运行的自定义Web API或ASP.NET WebHost服务的形式实现。

突出显示在该图中非常重要,您将使用面向多个不同客户端应用程序的单个定制API网关服务。这个事实可能是一个重要的风险,因为您的API网关服务将根据客户端应用程序的许多不同要求而不断增长和发展。最终,它会因为这些不同的需求而臃肿,并且它可能非常类似于单一应用程序或单一服务。这就是为什么非常推荐将API网关分成多个服务或多个较小的API网关,例如每种形式的网关类型。

您需要注意API网关模式。通常,使用单个API网关汇总应用程序的所有内部微服务并不是一个好主意。如果确实如此,它就像一个单一的聚合器或协调器,并通过耦合所有微服务来违反微服务自治。

因此,API网关应该根据业务边界和客户端应用进行分离,而不是作为所有内部微服务的单一聚合器。

将API网关层拆分为多个API网关时,如果您的应用程序有多个客户端应用程序,那么在识别多个API网关类型时可能是主要关键点,以便您可以根据每个客户端应用程序的需要设置不同的外观。这种情况是一种名为“前端后端”(BFF)的模式,其中每个API网关都可以为每个客户端应用类型提供不同的API,甚至可以基于客户端形式因子实现特定的适配器代码,该代码在下面调用多个内部微服务,如下图所示。

640?wx_fmt=jpeg

上图显示了一个具有多个细粒度API网关的简化体系结构。在这种情况下,为每个API网关确定的边界完全基于“前端后端”(BFF)模式,因此仅基于每个客户端应用程序所需的API。但是在更大的应用程序中,您还应该进一步研究并根据业务边界创建其他API网关作为第二个设计支点。

API网关模式中的主要功能

API网关可以提供多种功能。但是,根据产品可能提供更丰富或更简单的功能,任何API网关的最重要和最基本的功能都是以下设计模式。

反向代理或网关路由。API网关提供反向代理来重定向或路由请求(第7层路由,通常是Http请求)到内部微服务的端点。网关为客户端应用程序提供单个端点或URL,然后在内部将请求映射到一组内部微服务。这种路由功能有助于将客户端应用程序与微服务分离,但通过将API网关置于整体式API和客户端应用程序之间来实现整体式API的现代化时,它也非常方便,然后您可以将新的API作为新的微服务添加,同时仍在使用传统的单片API,直到将来它被分成许多微服务。由于API网关,客户端应用程序不会注意到所使用的API是作为内部微服务还是单片API实现的,更重要的是

有关更多信息,请查看网关路由模式信息。

请求聚合。作为网关模式的一部分,您可以将针对多个内部微服务的多个客户端请求(通常是Http请求)聚合为一个客户端请求。当客户端页面/屏幕需要来自多个微服务的信息时,此模式特别方便。通过这种方法,客户端应用程序将向API网关发送一个请求,该请求将向内部微服务发送几个请求,然后汇总结果并将所有内容发送回客户端应用程序。这种设计模式的主要优点和目标是减少客户端应用程序与后端API之间的沟通,这对于微服务所在数据中心内的远程应用程序尤其重要,例如移动应用程序或来自SPA应用程序的请求客户端远程浏览器中的Javascript。

根据您使用的API网关产品,它可能能够执行此聚合。但是,在许多情况下,在API网关的范围内创建聚合微服务更加灵活,因此您可以在代码中定义聚合(即C#代码)。

有关更多信息,请查看网关聚合模式信息。

交叉担忧或网关卸载。根据每个API Gateway产品提供的功能,您可以将各个微服务的功能卸载到网关,从而通过将横切关注点合并到一个层级中来简化每个微服务的实施。这对于特殊功能来说尤其方便,因为这些功能在每个内部微服务(如以下功能)中都可以很复杂地实现。

  • 认证和授权

  • 服务发现集成

  • 响应缓存

  • 重试策略,断路器和QoS

  • 限速和节流

  • 负载均衡

  • 记录,追踪,关联

  • 标题,查询字符串和声明转换

  • IP白名单

根据每种实现方式,API网关产品可能存在更多的交叉问题,但这些是最常见的功能。例如,Azure API Management提供了大多数这些功能以及许多对商业API非常有用的高级功能。但是,对于更简单的方法,像Ocelot这样的轻量级API网关非常灵活,因为您可以将它与微服务一起部署到选定的环境(任何编排器)。

相关文章:

  • .NET Core开源API网关 – Ocelot中文文档

  • Ocelot——初识基于.Net Core的API网关

  • Ocelot API网关的实现剖析

  • 微服务网关Ocelot

  • API网关Ocelot 使用Polly 处理部分失败问题

  • 谈谈微服务中的 API 网关(API Gateway)

  • Ocelot网关

  • Ocelot统一权限验证

  • 应用监控怎么做?

  • ASP.NET Core之跨平台的实时性能监控

  • .Net Core 2.0+ InfluxDB+Grafana+App Metrics 实现跨平台的实时性能监控

  • 应用程序的8个关键性能指标以及测量方法

  • 使用Metrics监控应用程序的性能

  • 下一个计划 : .NET/.NET Core应用性能管理

  • Ocelot监控

  • Ocelot 集成Butterfly 实现分布式跟踪

  • Ocelot中使用Butterfly实践

  • Ocelot + Consul实践

原文地址:https://www.toutiao.com/a6556480905353888263


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg


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

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

相关文章

基于Jenkins Pipeline的ASP.NET Core持续集成实践

最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署,因此这里总结一下。一、关于持续集成与Jenkins Pipeline1.1 持续集成相关概念互联网软件的开发和发布,已经形成了一套标准流程&#xff0c…

编程语言之父谈语言设计,龟叔大赞TypeScript

争论哪门编程语言孰优孰劣,长期以来都是程序员乐此不疲的“娱乐活动”。之所以说是娱乐活动,因为这些争论到最后往往只是各自在发泄情绪,再则就是,脱离使用场景去讨论所谓哪门语言更好并没意义。但如果让编程语言作者坐在一起讨论…

你必须知道的 SmartSql

介绍SmartSql MyBatis Cache(Memory | Redis) R/W Splitting Dynamic Repository Diagnostics ......简洁、高效、高性能、扩展性、监控、渐进式开发!她是如何工作的?SmartSql 借鉴了 MyBatis 的思想,使用 XML 来管理 SQL ,并…

OsharpNS轻量级.net core快速开发框架简明入门教程

OsharpNS官方资源项目地址:https://github.com/i66soft/osharp-ns20演示地址:https://www.osharp.org 直接使用QQ登录可以查看效果文档地址:https://docs.osharp.org 正在完善中....发布博客:https://www.cnblogs.com/guomingfeng…

.net core 注入机制与Autofac

本来是要先出注入机制再出 管道 的,哈哈哈……就是不按计划来……这里扯扯题外话:为什么要注入(DI,dependency-injection),而不用 new 对象?可能我们都很清楚,new 对象所造成的影响就…

浅析 .Net Core中Json配置的自动更新

Pre很早在看 Jesse 的Asp.net Core快速入门的课程的时候就了解到了在Asp .net core中,如果添加的Json配置被更改了,是支持自动重载配置的,作为一名有着严重"造轮子"情节的程序员,最近在折腾一个博客系统,也想造出一个这样能自动更新以Mysql为数据源的ConfigureSource…

E. Don‘t Really Like How The Story Ends(代码未补)

Don’t Really Like How The Story Ends 题意: 有n个点,m个边,现在要从1号边开始求dfs序,问最少加多少边可以是的dfs序是从1到n? 题解: dfs序的过程中,不走到叶子节点我们是无法回溯的&…

.NET Core 迁移躺坑记续集--Win下莫名其妙的超时

继上一集.NET Core 迁移躺坑记里说到遇到的各种问题并且弄了n个解决方案之后,特别是对于问题4的解决方案对于切换了HttpClientFactory我用了你家netcore 2.1下专门解决之前HttpClient口病已久的灵丹妙药了,信心满满的上线…..然后挂了,该超时…

使用Entity Framework Core访问数据库(Oracle篇)

前言哇。。看看时间 真的很久很久没写博客了 将近一年了。最近一直在忙各种家中事务和公司的新框架 终于抽出时间来更新一波了。本篇主要讲一下关于Entity Framework Core访问oracle数据库的采坑。。强调一下,本篇文章发布之前 关于Entity Framework Core访问oracl…

Asp.Net Core Docker镜像更新系统从wheezy改为stretch

之前写过一个在Asp.Net Core里调用System.Drawing.Common绘图的DEMO,部署到Docker里运行,需要更新Asp.Net Core镜像的操作系统。https://www.cnblogs.com/sunnytrudeau/p/9384620.html当时用的阿里云的源RUN echo "deb http://mirrors.aliyun.com/d…

Monster Hunter(2020南京M)

Monster Hunter(2020南京M) 题意: 给你一颗树,树上每个节点都是一个hpi 血量的怪物。打败每个怪物所需要的能量值为hpi 所 有 存 活 的 直 接 子 节 点 的 hpj 。每次必须要消灭父节点后才能消灭子节点。此外你还有m个魔咒,每个魔咒可以不…

网络数据采集(AngleSharp)-使用AngleSharp做html解析

有这么一本Python的书: <<Python 网络数据采集>>我准备用.NET Core及第三方库实现里面所有的例子. 这是第一部分, 主要使用的是AngleSharp: https://anglesharp.github.io/(文章的章节书与该书是对应的)发送Http请求在python里面这样发送http请求, 它使用的是pytho…

ASP.NET Core在Azure Kubernetes Service中的部署和管理

目标部署&#xff1a;掌握将aspnetcore程序成功发布到Azure Kubernetes Service&#xff08;AKS&#xff09;上管理&#xff1a;掌握将AKS上的aspnetcore程序扩容、更新版本准备工作注册 Azure 账户官网免费帐户Azure 免费帐户仅适用于新用户&#xff0c;并且仅限每个客户一个免…

深入研究 Mini ASP.NET Core,看看 ASP.NET Core 内部到底是如何运行的

几年前&#xff0c;Artech 老师写过一个 Mini MVC&#xff0c;用简单的代码告诉读者 ASP.NET MVC 内部到底是如何运行的。当时我研究完以后&#xff0c;受益匪浅&#xff0c;内心充满了对 Artech 老师的感激&#xff0c;然后用我自己理解的 MVC 知识&#xff0c;写了一篇 深入研…

一文读懂Asp.net core 依赖注入(Dependency injection)

一、什么是依赖注入首先在Asp.net core中是支持依赖注入软件设计模式&#xff0c;或者说依赖注入是asp.net core的核心&#xff1b;依赖注入&#xff08;DI&#xff09;和控制反转&#xff08;IOC&#xff09;基本是一个意思&#xff0c;因为说起来谁都离不开谁&#xff1b;或者…

P4619 [SDOI2018]旧试题

P4619 [SDOI2018]旧试题 题意&#xff1a; 求个式子&#xff1a; (∑i1A∑j1B∑k1Cd(i∗j∗k))mod(1097)(\sum_{i1}^{A}\sum_{j1}^{B}\sum_{k1}^{C}d(i*j*k))mod(10^97)(i1∑A​j1∑B​k1∑C​d(i∗j∗k))mod(1097) 题解&#xff1a; 原创博文1k纪念 很明显&#xff0c;莫比…

C#中使用Bogus创建模拟数据

原文&#xff1a;CREATING SAMPLE DATA FOR C#[1] 作者&#xff1a;Bruno Sonnino 译文&#xff1a;C#中使用Bogus创建模拟数据 译者&#xff1a; Lamond Lu背景在我每次写技术类博文的时候&#xff0c;经常做的一件事就是创建模拟数据。在每篇博文中&#xff0c;为了解释某些概…

CF1253E Antenna Coverage

CF1253E Antenna Coverage 题意&#xff1a; 现在有n个点&#xff0c;每个点的坐标为xi&#xff0c;以及一个范围值si&#xff0c;可以覆盖左右范围[xi-si,xisi] 每次操作&#xff0c;可以花费代价1让第i个天线的si增加1&#xff0c;每个天线都可以进行多次操作。现在请问你最…

使用BeetleX的TcpBenchmark工具进行百万设备模拟测试

其实TCP测试的工具有很多&#xff0c;那BeetleX工具所提供的特点又是什么呢&#xff1f;如果你需数十万的请求或模拟上百万的设备连接&#xff0c;那这个工具相信可以满足你的需要&#xff01;工具是基于BeetleX的基础功能扩展&#xff0c;支持多IP绑定可以轻松实现上百万的cli…

.net core Entity Framework 与 EF Core

重点讲 Entity Framework Core &#xff01;&#xff08;一&#xff09;Entity Framework它是适用于.NET 的对象关系映射程序 (ORM)&#xff0c;现在的EF6已经是久经沙场&#xff0c;并经历重重磨难&#xff0c;获得一致认可的数据访问技术&#xff08;原来加 Title 也挺有意思…