【Azure API 管理】APIM添加Log-to-eventhub的策略后,一些相关APIM与Event Hub的问题
问题描述
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的问题的更多相关文章
- 【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 ...
- 【Azure API 管理】APIM集成内网虚拟网络后,启用自定义路由管理外出流量经过防火墙(Firewall),遇见APIs加载不出来问题
问题描述 使用 Azure 虚拟网络,Azure APIM 可以管理无法通过 Internet 访问的 API,达到以保护企业内部的后端API的目的.在虚拟网络中,启用网络安全组(NSG:Networ ...
- 【Azure API 管理】为调用APIM的请求启用Trace -- 调试APIM Policy的利器
问题描述 在APIM中,通过门户上的 Test 功能,可以非常容易的查看请求的Trace信息,帮助调试 API 对各种Policy,在Inbound,Backend, Outbound部分的耗时问题, ...
- 【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 ...
- 【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败
问题描述 使用微软API管理服务(Azure API Management),简称APIM. 因为公司策略要求只能内部网络访问,所以启用了VNET集成.集成方式见: (在内部模式下使用 Azure A ...
- 【Azure API 管理】从微信小程序访问APIM出现200的空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
问题描述 使用微信小程序调用APIM(API Management)中的接口,发现POST和PUT请求被拦截,返回的状态码为200,但是无消息内容. 在小程序中的调用JS代码如: 通过浏览器测试得到的 ...
- 【Azure API 管理】在APIM中使用客户端证书验证API的请求,但是一直提示错误"No client certificate received."
API 管理 (APIM) 是一种为现有后端服务创建一致且现代化的 API 网关的方法. 问题描述 在设置了APIM客户端证书,用户保护后端API,让请求更安全. 但是,最近发现使用客户端证书的API ...
- 【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
问题描述 在APIM中配置对传入的Token进行预验证,确保传入后端被保护的API的Authorization信息正确有效,可以使用validate-jwt策略.validate-jwt 策略强制要求 ...
- 【Azure API 管理】APIM如何实现对部分固定IP进行访问次数限制呢?如60秒10次请求
问题描述 使用Azure API Management, 想对一些固定的IP地址进行访问次数的限制,如被限制的IP地址一分钟可以访问10次,而不被限制的IP地址则可以无限访问? ChatGPT 解答 ...
- 【Azure API 管理】APIM CORS策略设置后,跨域请求成功和失败的Header对比实验
在文章"从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能"中分析了CORS返回空200的问题后,进一 ...
随机推荐
- 各开发语言DNS缓存配置建议
作者:翟贺龙 一.背景 在计算机领域,涉及性能优化动作时首先应被考虑的原则之一便是使用缓存,合理的数据缓存机制能够带来以下收益: 1.缩短数据获取路径,热点数据就近缓存以便后续快速读取,从而明显提升处 ...
- vscode搜索框不见了如何显示
- docker上部署启动RabbitMQ
在docker上部署启动RabbitMQ及使用 一.docker上部署启动RabbitMQ 1.查询rabbitmq镜像 docker search rabbitmq:management 2.拉取r ...
- Why gRPC ?
gRPC(gRPC Remote Procedure Call)是由 Google 开发的开源 RPC 框架,它基于 HTTP/2 标准,使用 Protocol Buffers 作为接口定义语言(ID ...
- C# 使用RabbitMQ消息队列
参考文章 https://www.cnblogs.com/kiba/p/11703073.html和https://www.cnblogs.com/longlongogo/p/6489574.html ...
- 剪粘板增强小工具(可多次Ctrl+V)
前言 windows的剪贴板中存储是的最新一次的复制结果,比如先复制A,再复制B,C,在按下粘贴键时粘贴的是最后一次的结果C,在工作时有时候会遇到需要多次复制粘贴的情景,我就在思考有没有一款工具可以保 ...
- python快速入门【三】-----For 循环、While 循环
python入门合集: python快速入门[一]-----基础语法 python快速入门[二]----常见的数据结构 python快速入门[三]-----For 循环.While 循环 python ...
- Windows批处理文件初始化数据库
前提是MySQL服务必须启动,Windows添加了MySQL的环境变量. 批处理文件: @ECHO OFF SET dbhost=127.0.0.1 SET dbuser=root SET dbpas ...
- 如何在Visual Studio新C++项目中调用之前配置过的库?
本文介绍在Visual Studio软件中调用C++各种配置.编译完毕的第三方库的方法. 在撰写C++代码时,如果需要用到他人撰写的第三方库(例如地理数据处理库GDAL.矩阵运算库Armadi ...
- 性价比超频我都要 两大内存绝技带来20%性能提升!技嘉雪雕Z790 AORUS LITE AX-W主板评测
一.前言:主打性价比.两大内存绝技加持的技嘉Z790主板 要说现在最主流的装机方案,那必然是13代酷睿+700系主板.我们此前曾测试过技嘉的Z790钛雕主板,独有的顶级表现让人印象深刻,不过近6K的价 ...