.Net Core的API网关Ocelot的使用(二)[负载,限流,熔断,Header转换]

网关的负载均衡

当下游拥有多个节点的时候,我们可以用DownstreamHostAndPorts来配置

{
    "UpstreamPathTemplate": "/Api_A/{controller}/{action}",
    "DownstreamPathTemplate": "/api/{controller}/{action}",
    "DownstreamScheme": "https",
    "LoadBalancer": "LeastConnection",
    "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ],
    "DownstreamHostAndPorts": [
            {
                "Host": "127.0.0.1",
                "Port": 5001,
            },
            {
                "Host": "127.00.1",
                "Port": 5002,
            }
        ],
}

LoadBalancer是来决定负载的算法

  • LeastConnection:将请求发往最空闲的那个服务器
  • RoundRobin:轮流转发
  • NoLoadBalance:总是发往第一个请求或者是服务发现

限流

限流可以防止上下游服务器因为过载而崩溃,可以使用RateLimitOptions来配置限流

{
    "RateLimitOptions": {
        "ClientWhitelist": [“127.0.0.1”],
        "EnableRateLimiting": true,
        "Period": "5s",
        "PeriodTimespan": 1,
        "Limit": 10
    }
}
  • ClientWihteList:白名单,不受限流控制。
  • EnableRateLimiting:使用启用限流。
  • Period:限流控制的时间段 1s, 5m, 1h, 1d。
  • PeroidTimeSpan:超过限流限制的次数后,需要等待重置的时间(单位是秒)。
  • Limit:在限流控制时间段内最大访问数。
    对于除了请求头中ClientId=127.0.0.1的意外所有求情启用限流,5秒该api最多10次,如果达到10次需要从第10次请求闭合后等待一秒进行下一次访问。

超过限流后会返回429状态码,并在在返回头(Response Header)的Retry-After属性中返回等待重置时间。


限流的默认提示,code码,和限制标志都是可以自己配置的

 {
  "GlobalConfiguration": {
    "BaseUrl":"www.baidu.com",
    "RateLimitOptions": {
      "DisableRateLimitHeaders": false,
      "QuotaExceededMessage": "接口限流!",
      "HttpStatusCode": 200,
      "ClientIdHeader": "ClientId"
    }
  }

  • DisableRateLimitHeaders:是否显示X-Rate-Limit和Retry-After头
  • QuotaExceededMessage:提示信息
  • HttpStatusCode:状态码
  • ClientIdHeader:用来设别客户请求头,默认为ClientId。
  • BaseUrl 网关暴露的的地址。

熔断

熔断是在下游服务故障或者请求无响应的时候停止将请求转发到下游服务。

 {
    "QoSOptions": {
    "ExceptionsAllowedBeforeBreaking": 3,
    "DurationOfBreak": 20,
    "TimeoutValue": 5000
    }
}
  • ExceptionsAllowedBeforeBreaking:允许多少个异常请求。
  • DurationOfBreak:熔断的时间(秒)。
  • TimeoutValue:下游请求的处理时间超过多少则将请求设置为超时。

缓存

Ocelot可以对下游请求结果进行缓存,主要是依赖于CacheManager来实现的。

{
    "FileCacheOptions": {
        "TtlSeconds": 60,
        "Region": "key"
    }
}
  • TtlSeconds:缓存时间(秒)。
  • Region:缓存分区名
    我们可以调用Ocelot的API来移除某个区下面的缓存 。

请求头的转化

Ocelot允许在请求下游服务之前和之后转换Header.目前Ocelot只支持查找和替换.

如果们需要转发给下游的Header重添加一个key/value

{
    "UpstreamHeaderTransform": {
        "demo": "xxxxxxx"
    }
}

如果们需要在返回给客户端的的Header中添加一个key/value

{
    "DownstreamHeaderTransform": {
        "demo": "xxxxxxx"
    }
}

如果我们需要替换Heaher中某些值

{
    //请求
    "UpstreamHeaderTransform": {
        "demo": "a,b"
    },
    //响应
    "DownstreamHeaderTransform":
    {
        "demo": "a,b"
    }
}

语法是{find},{replace}, 利用b取代a

在Header转换中可以使用占位符

  • {BaseUrl} - 这个是Ocelot暴露在外的url. 例如http://localhost:5000/.
  • {DownstreamBaseUrl} - 这个是下游服务的基本url 例如http://localhost:5001/. 目前这个只在DownstreamHeaderTransform中起作用.
  • {TraceId} - 这个是Butterfly的跟踪id.目前这个也只在DownstreamHeaderTransform中起作用

如果您想将location头返回给客户端,可能需要将location更改为Ocelot的地址而不是下游服务地址。 Ocelot可以使用以下配置实现。

{
    "DownstreamHeaderTransform": {
    "Location": "{DownstreamBaseUrl},{BaseUrl}"
    },
}

给Header中添加下游地址

响应的Header中已经替换成BaseUrl了

总结

简单的配置了Ocelot的负载,限流,熔断,Header转换。具体配置还需要结合业务去搭配。下一次会给Ocelot集成Identity认证,鉴权。

原文地址:https://www.cnblogs.com/stutlh/p/12011866.html

时间: 2024-10-11 12:13:57

.Net Core的API网关Ocelot的使用(二)[负载,限流,熔断,Header转换]的相关文章

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

原文:.NET Core开源API网关 – Ocelot中文文档 Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly Tracing集成.这些功能只都只需要简单的配置即可完成,下面我们会对这些功能的配置一一进行说明. 介绍 简单的来说Ocelot是一堆的asp.net core middleware组成的一个管道.当它拿到请求之后会用一个reque

.Net微服务实践(四)[网关]:Ocelot限流熔断、缓存以及负载均衡

目录 限流 熔断 缓存 Header转化 HTTP方法转换 负载均衡 注入/重写中间件 后台管理 最后 在上篇.Net微服务实践(三)[网关]:Ocelot配置路由和请求聚合中我们介绍了Ocelot的配置,主要特性路由以及服务聚合.接下来,我们会介绍Ocelot的限流.熔断.缓存以及负载均衡. 限流 我们先来看限流的配置 Reroute节点中的配置如下: { "DownstreamPathTemplate": "/api/orders", "Downstr

API网关spring cloud gateway和负载均衡框架ribbon实战

通常我们如果有一个服务,会部署到多台服务器上,这些微服务如果都暴露给客户,是非常难以管理的,我们系统需要有一个唯一的出口,API网关是一个服务,是系统的唯一出口.API网关封装了系统内部的微服务,为客户端提供一个定制的API.客户端只需要调用网关接口,就可以调用到实际的微服务,实际的服务对客户不可见,并且容易扩展服务. API网关可以结合ribbon完成负载均衡的功能,可以自动检查微服务的状况,及时剔除或者加入某个微服务到可用服务列表.此外网关可以完成权限检查.限流.统计等功能.下面我们将一一完

API网关-Ocelot概述

这个框架的整体思路其实就是Redirect请求并且附带一个简易的负载均衡机制,完全搭建MVC Core项目下在Ocelot项目启动的时候需要配置所有的ReRoute集合,这里的每一个ReRoute可以看做一个Map类,对应着一个客户端访问的代理Url同最终Host真正服务的地址的映射关系Ocelot项目作为一个Hub接受所有来之客户端的请求,通过解析请求的Url来匹配到一个唯一的ReRoute实例,这里实例里面除了配置真正的服务地址(downStreamUrl)外还有一个loadBancer的数

Ocelot实现API网关服务

NET Core微服务之基于Ocelot实现API网关服务 https://www.cnblogs.com/edisonchou/p/api_gateway_ocelot_foundation_01.html 一.啥是API网关? API 网关一般放到微服务的最前端,并且要让API 网关变成由应用所发起的每个请求的入口.这样就可以明显的简化客户端实现和微服务应用程序之间的沟通方式.以前的话,客户端不得不去请求微服务A(假设为Customers),然后再到微服务B(假设为Orders),然后是微服

.NET Core微服务之基于Ocelot实现API网关服务(续)

一.负载均衡与请求缓存 1.1 负载均衡 为了验证负载均衡,这里我们配置了两个Consul Client节点,其中ClientService分别部署于这两个节点内(192.168.80.70与192.168.80.71). 为了更好的展示API Repsonse来自哪个节点,我们更改一下返回值: [Route("api/[controller]")] public class ValuesController : Controller { // GET api/values [Http

.net core 3.1 基于ocelot实现API网关

Ocelot是一个用.NET Core实现的开源API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断,缓存等. 接下来,会使用ocelot 结合consul ,polly ,cachemanager 实现负载均衡,服务发现,限流熔断和缓存功能.(本文只做记录,就直接贴完整代码,不分别测试了) 新建ApiGateWay项目,nuget安装Ocelot,Ocelot.Provider.Consul,Ocelot.Provider.Polly,Ocelot.Cache.Cac

.net core 微服务之Api网关(Api Gateway)

原文:.net core 微服务之Api网关(Api Gateway) 微服务网关目录 1. 微服务引子 2.使用Nginx作为api网关 3.自创api网关(重复轮子) 3.1.构建初始化 3.2.构建中间件 4.结语 引用链接 1. 微服务引子 首先恭喜你,进入微服务的开发世界.微服务属于架构演进中的一种阶段,其特点是根据业务模块水平划分服务种类,每个服务可以独立部署并互相隔离,并对外提供轻量的Api调用,服务具有高可用特性. 微服务应遵循的设计原则: 单一职责原则: 每个微服务只需要实现自

Ocelot-基于.NET Core的开源网关实现

写在前面 API网关是系统内部服务暴露在外部的一个访问入口,类似于代理服务器,就像一个公司的门卫承担着寻址.限制进入.安全检查.位置引导等工作,我们可以形象的用下图来表示: 外部设备需要访问内部系统服务时必须要通过我们的API Gateway,目的是为了隔离内部服务和外部访问来做统一的认证授权,限流熔断,请求聚合,负载均衡,日志记录,监控预警等 通用功能,就像是我们系统的防火墙一样,在任何外部请求访问系统时都必须经过防火墙的验证. 更多关于网关的信息请参考前面的一篇文章<API网关模式> Oc