问题描述

1)    APIM 到Event Hub 写入日志是否有数量限制,比如每秒最大写入数量;

2)    是否可以在同一个APIM配置多个Event Hub,如果可以该APIM写入日志的峰值是否可以是N倍,即和Event Hub数量的倍数;

3)    写入Event Hub 达到峰值时,对APIM的影响有哪些,比如SNAT端口消耗,带宽,后端转发,内存等,对APIM整体影响多大?

4)    如果从APIM写入Event Hub的Message峰值远远大于Event Hub可接受的峰值时,是否会对APIM造成堵塞,APIM是否有限制写入Event hub的限制?

5)    APIM写入Event hub的逻辑/原理;

问题解答

问题一:APIM 到Event Hub 写入日志是否有数量限制,比如每秒最大写入数量

Event Hub 通过 Throughput Units 配置可以接收的消息数,一个吞吐量单元的入口限制为每秒1000个事件。APIM本身作为一个客户端并不会主动限制发送消息的数量,但是实际使用中会受到内存,处理器,网络带宽的影响。[ Ingress: Up to 1 MB per second or 1000 events per second (whichever comes first). https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-scalability#throughput-units ]

问题二:是否可以在同一个APIM配置多个Event Hub,如果可以该APIM写入日志的峰值是否可以是N倍,即和Event Hub数量的倍数

APIM输出日志到Event Hub需要事先通过REST API配置Logger:https://docs.microsoft.com/en-us/rest/api/apimanagement/2020-12-01/logger/create-or-update#loggertype,文档中并未明确指明仅能创建单个logger。我们理解的是该API可以多次调用,并指定不同的连接字符串(connectionString)以创建多个logger指向不同的EventHub。

配置方法详见 --【Azure API 管理】在APIM 中添加 log-to-eventhub 策略,把 Request Body 信息全部记录在Event Hub中 : https://www.cnblogs.com/lulight/p/15630965.html

注:可以通过调整Event Hub的 Throughput Units 来配置Event Hub 可以处理的消息数量。通常情况下,单个EventHub的处理能力已足以满足绝大多数的应用场景。如果通过创建的多个Event Hub并没别处于不同的命名空间下,那么理论上可以通过叠加提升 Event Hub 侧的处理能力上限。更多时候,需要进行压测检查具体的业务场景下性能瓶颈是否存在,并有针对性的调整客户端(APIM)与服务端(EventHub)使两者处理能力匹配。当在测试中需要通过Trace来查看Log-to-eventhub的执行情况,可以参考博文: https://www.cnblogs.com/lulight/p/15746073.html

问题三:写入Event Hub 达到峰值时,对APIM的影响有哪些,比如SNAT端口消耗,带宽,后端转发,内存等,对APIM整体影响多大?

官方文档中描述了APIM在理想状况下的处理能力(Requset per Second)

(Source: https://azure.microsoft.com/en-us/pricing/details/api-management/ )

可以确认的是APIM本身使用独立的公网IP地址,在与EventHub的连接过程中触发SNAT端口耗尽的可能行极小(https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-ip-addresses#ip-addresses-of-api-management-service)。需要注意的是APIM的处理能力会收到多种因素的影响,例如Policy的复杂程度,客户端与APIM以及APIM与后端服务之间的网络连接,并发请求数,请求payload大小等。

PS: 通过AMQP方式连接,使用的端口为5671,5672端口,所以它不会导致APIM 出口IP的SNAT消耗。https://docs.azure.cn/zh-cn/service-bus-messaging/service-bus-amqp-protocol-guide?toc=https%3A%2F%2Fdocs.azure.cn%2Fzh-cn%2Fevent-hubs%2Ftoc.json&bc=https%3A%2F%2Fdocs.azure.cn%2Fzh-cn%2Fbread%2Ftoc.json#amqp-outbound-port-requirements

问题四:如果从APIM写入Event Hub的Message峰值远远大于Event Hub可接受的峰值时,是否会对APIM造成堵塞,APIM是否有限制写入Event hub的限制?

官方文档并未给出具体说明。但根据日志收集的设计理解,logger的写入不会阻塞APIM请求处理的。

问题五:请介绍下APIM写入Event hub的逻辑/原理

官方文档未提供关于APIM内部的代码实现的具体细节。但API Management使用的是C#代码,所以可以参考C#的SDK向Event Hub发送消息。

通过代码及SDK向Event Hub发送消息,可以参考文档:https://docs.microsoft.com/en-us/dotnet/api/overview/azure/Messaging.EventHubs-readme#publish-events-to-an-event-hub

var connectionString = "<< CONNECTION STRING FOR THE EVENT HUBS NAMESPACE >>";
var eventHubName = "<< NAME OF THE EVENT HUB >>"; await using (var producer = new EventHubProducerClient(connectionString, eventHubName))
{
using EventDataBatch eventBatch = await producer.CreateBatchAsync();
eventBatch.TryAdd(new EventData(new BinaryData("First")));
eventBatch.TryAdd(new EventData(new BinaryData("Second"))); await producer.SendAsync(eventBatch);
}

【Azure API 管理】APIM添加Log-to-eventhub的策略后,一些相关APIM与Event Hub的问题的更多相关文章

  1. 【Azure API 管理】在APIM 中添加 log-to-eventhub 策略,把 Request Body 信息全部记录在Event Hub中

    问题描述 根据文档 https://docs.azure.cn/zh-cn/api-management/api-management-howto-log-event-hubs, 可以将Azure A ...

  2. 【Azure API 管理】APIM集成内网虚拟网络后,启用自定义路由管理外出流量经过防火墙(Firewall),遇见APIs加载不出来问题

    问题描述 使用 Azure 虚拟网络,Azure APIM 可以管理无法通过 Internet 访问的 API,达到以保护企业内部的后端API的目的.在虚拟网络中,启用网络安全组(NSG:Networ ...

  3. 【Azure API 管理】为调用APIM的请求启用Trace -- 调试APIM Policy的利器

    问题描述 在APIM中,通过门户上的 Test 功能,可以非常容易的查看请求的Trace信息,帮助调试 API 对各种Policy,在Inbound,Backend, Outbound部分的耗时问题, ...

  4. 【Azure API 管理】解决API Management添加AAD Group时遇见的 Failed to query Azure Active Directory graph due to error 错误

    问题描述 为APIM添加AAD Group时候,等待很长很长的时间,结果添加失败.错误消息为: Write Groups ValidationError :Failed to query Azure ...

  5. 【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败

    问题描述 使用微软API管理服务(Azure API Management),简称APIM. 因为公司策略要求只能内部网络访问,所以启用了VNET集成.集成方式见: (在内部模式下使用 Azure A ...

  6. 【Azure API 管理】从微信小程序访问APIM出现200的空响应的问题中发现CORS的属性[terminate-unmatched-request]功能

    问题描述 使用微信小程序调用APIM(API Management)中的接口,发现POST和PUT请求被拦截,返回的状态码为200,但是无消息内容. 在小程序中的调用JS代码如: 通过浏览器测试得到的 ...

  7. 【Azure API 管理】在APIM中使用客户端证书验证API的请求,但是一直提示错误"No client certificate received."

    API 管理 (APIM) 是一种为现有后端服务创建一致且现代化的 API 网关的方法. 问题描述 在设置了APIM客户端证书,用户保护后端API,让请求更安全. 但是,最近发现使用客户端证书的API ...

  8. 【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token

    问题描述 在APIM中配置对传入的Token进行预验证,确保传入后端被保护的API的Authorization信息正确有效,可以使用validate-jwt策略.validate-jwt 策略强制要求 ...

  9. 【Azure API 管理】APIM如何实现对部分固定IP进行访问次数限制呢?如60秒10次请求

    问题描述 使用Azure API Management, 想对一些固定的IP地址进行访问次数的限制,如被限制的IP地址一分钟可以访问10次,而不被限制的IP地址则可以无限访问? ChatGPT 解答 ...

  10. 【Azure API 管理】APIM CORS策略设置后,跨域请求成功和失败的Header对比实验

    在文章"从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能"中分析了CORS返回空200的问题后,进一 ...

随机推荐

  1. linux 53端口占用的原因

    解析 Linux 下 53 端口占用的现象 在 Linux 系统中,端口 53 往往是与域名解析服务(DNS)相关的.本文将详细介绍一个与端口 53 相关的情景,以及如何使用命令行工具来解析和理解这一 ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (187)-- 算法导论14.1 4题

    四.用go语言,写出一个递归过程 OS-KEY-RANK(T,k),以一棵顺序统计树T和一个关键字k作为输入,要求返回 k 在由 T 表示的动态集合中的秩.假设 T 的所有关键字都不相同. 文心一言, ...

  3. ngnix在linux安装并设置反向代理

    一.nginx安装 1.安装Nginx依赖的环境 安装Nginx依赖的gcc的编译环境: yum install gcc-c++ Nginx的http模块需要使用pcre来解析正则表达式,需要安装pc ...

  4. Gin 框架之用户密码加密

    目录 一.引入 二.密码加密位置 三.如何加密 四.bcrypt 库加密 4.1 介绍 4.2 优点: 4.3 使用 五.小黄书密码加密实践 一.引入 Gin是一个用Go语言编写的Web框架,而用户密 ...

  5. 【1】VScode 中文界面方法-------超简单教程

    相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...

  6. 【6】VScode 无法在终端输入问题,提示:无法在只读编辑器中编辑

    相关文章: [1]VScode中文界面方法-------超简单教程 [2]VScode搭建python和tensorflow环境 [3]VSCode 主题设置推荐,自定义配色方案,修改注释高亮颜色 [ ...

  7. 4.5 C++ Boost 文件目录操作库

    Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量.可移植.高效的C应用程序.Boost库可以作为标准C库的后备,通常被称为准标准 ...

  8. C# 中的函数与方法

    在C#中,函数和方法都是一段可重用的代码块,用于实现特定的功能.函数是C#中的基本代码块之一,用于完成特定的任务和返回一个值.函数可以具有零个或多个参数,并且可以使用关键字来指定函数的访问级别和返回类 ...

  9. Json Schema高性能.net实现库 LateApexEarlySpeed.Json.Schema - 直接从code生成json schema validator

    LateApexEarlySpeed.Json.Schema - Json schema validator generation from code 除了用户手动传入标准的json schema来生 ...

  10. WebAssembly核心编程[1]:wasm模块实例化的N种方式

    当我们在一个Web应用中使用WebAssembly,最终的目的要么是执行wasm模块的入口程序(通过start指令指定的函数),要么是调用其导出的函数,这一切的前提需要创建一个通过WebAssembl ...