问题描述

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. c#通过表达式树优雅的实现分组取TopN笔记

    需要引入nuget包来实现ef.functions调用row_number Thinktecture.EntityFrameworkCore.SqlServer 调用方式: //顺排 context. ...

  2. flask session 伪造

    flask session 伪造 一.session的作用 由于http协议是一个无状态的协议,也就是说同一个用户第一次请求和第二次请求是完全没有关系的,但是现在的网站基本上有登录使用的功能,这就要求 ...

  3. [置顶] k8s,docker,微服务,监控

    综合 第一篇:k8s服务A内部调用服务B的方式 第二篇:go-zero grpc 第一篇:grpc,protobuf安装 第二篇:grpc签发证书 第三篇:golang-grpc 第四篇:python ...

  4. 【windows Server 2019系列】 构建IIS服务器

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github‍:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying Web服务器也称为WWW(World Wide W ...

  5. c++基础之字符串、向量和数组

    上一次整理完了<c++ primer>的第二章的内容.这次整理本书的第3章内容. 这里还是声明一下,我整理的主要是自己不知道的或者需要注意的内容,以我本人的主观意志为准,并不具备普适性. ...

  6. 手撕Vue-监听数据变化

    经过上一篇的介绍,已经实现了将模板编译成具体数据,接下来要介绍的是如何监听数据的变化,本章主要完成这个需求即可. 在我们文章的开始,我写了一个 Vue 双向数据绑定原理的文章当中封装了一个 Obser ...

  7. numpy数组拼接方法介绍(concatenate)---一次性完成多个数组的拼接

    1.数组拼接方法一 思路:首先将数组转成列表,然后利用列表的拼接函数append().extend()等进行拼接处理,最后将列表转成数组. 示例1: >>> import numpy ...

  8. 8.6 STARTUPINFO

    STARTUPINFO 结构体,可以用来指定新进程的主窗口外观风格.背景颜色.标题等信息,也可以用来实现反调试技术.通常情况下,我们可以将STARTUPINFO结构体中的dwFlags成员设置为STA ...

  9. PHP的无限极分类

    PHP的无限极分类 一.使用数据表 添加from字段 id name parent_id from 1 中国 0 0 2 广东 1 0,1 3 深圳 2 0,1,2 4 龙华 3 0,1,2,3 5 ...

  10. 4.2使用IDA Pro分析实战--《恶意代码分析实战》

    使用 IDA Pro 分析 Lab05-01.dll 1.DllMain的地址是什么? 2.使用Imports窗口并浏览到的gethostbyname,导入函数定位到什么地址? 3.有多少函数调用了g ...