google-cloud-run - Cloud Run 出站 API 调用受到限制?
问题描述
我有一个实例,在某些请求中需要多次调用外部 API,有时最多调用 2,000 多次。
在本地运行我的应用程序时,每次对外部 api 的调用每次都以低于 200 毫秒的速度返回,并且所有 2,000 次调用的整个过程需要大约 15 秒。
我注意到在云上运行时,我的 API 调用分为三类:appx 1/4 与本地相同,耗时约 200 毫秒。大约 1/2 正好需要 12007 毫秒,有些正好需要 63000 毫秒,对于这些相同的 API 调用,整个过程需要 20 多分钟。
我尝试过批处理,使用 async/eachLimit 设置为 10、20、50 .. 但同样的事情发生了。
我本地的端点、数据和调用与云上运行的相同。云运行也通过具有静态 IP 的 NAT 运行(可能是拦截/节流?)。
有没有人遇到过这个?将我的 docker 映像添加到同一 VPC/NAT 网关中的 VM 与我的本地效果相同(所有调用 < 200 毫秒,完成时间 < 15 秒)。
有没有人在跑步中遇到过这种情况以及如何解决?
片段运行(注意我玩过限制(下面片段中的 50):
const productsWithAvailabilities = await mapLimit(products, 50, async product => {
console.time(product.ProductID)
const availabilityOther = await productClient.execute(
'GetAvailabilityA',
{
productid: product.ProductID,
viewid: 'WEB',
connectid: this.pricingToken,
},
false,
)
let AvailabilityOther
try {
AvailabilityOther = availabilityOther?.GetAvailabilityAResult?.diffgram?.Warehouses?.ProductAvailability?.map(
a => ({
...a,
QtyAvail: parseFloat(a.QtyAvail),
QtyOnHand: parseFloat(a.QtyOnHand),
QtyOnOrder: parseFloat(a.QtyOnOrder),
QtyInTransit: parseFloat(a.QtyInTransit),
Available: parseFloat(a.QtyAvail),
}),
)
} catch (e) {
console.log({ product, e })
}
console.timeEnd(product.ProductID)
return {
...product,
AvailabilityOther,
Availability: AvailabilityOther?.find(a => a.LocationID === LOCATIONS.MEL),
QtyAvailableOther: AvailabilityOther?.filter(a => a.LocationID !== LOCATIONS.MEL)
.map(a => a.QtyAvail)
.reduce((result, current) => result + current, 0),
}
})
console.timeEnd('availabilities')
return productsWithAvailabilities as MoProProduct[]
}
ProductClient.execute 正在使用节点“soap”库发出 SOAP 发布请求。
VPC 连接器吞吐量为 200 - 1000(默认设置),并且我有一个连接到 NAT 的外部 IP/路由器。
解决方案
推荐阅读
- list - 如何编写 PageView 在背景也滚动的同时滚动普通列表?
- haskell - ask 函数如何知道 Reader monad 中返回的环境?
- python - Beautifulsoup:如何将网页中的文本获取到数据框中?
- arm - Windows 上跨平台编译的问题
- react-native - Android Google Play 订阅在购买后被取消
- spring - ID 为“junit-vintage”的 TestEngine 未能发现测试 - JUnitException:无法解析 junit 的版本:junit:4.13.2
- reactjs - 找不到模块:无法解析“C:\Users\user\Desktop\react-challenge\sample\src”中的“./App”
- angular - 带有延迟加载模块的角嵌套路由器插座
- okhttp - okhttp 在 ktor 应用程序上的线程或协程上运行
- php - 如何将 for 循环的值包含到 Php 中的数组中?