Fra*_*llo 5 azure-worker-roles asp.net-web-api2 azure-cloud-services azure-application-insights
我使用Asp.net Web Api 2构建了一组3个API,使用Azure云服务工作者角色中的OWIN自托管.工作者角色通过自定义域公开到Internet.
每个API都有一个控制器,执行一些正常的字典操作,表调用和Azure Redis调用.2个请求只需执行一次Redis呼叫,并在大约10ms内返回.通过所有API代码时的平均调用是150ms.答案是一个大小约为10k的JSON对象.
一切正常,但我有问题.
我在周围每秒25峰连接和每天不超过2万个请求,我勉强可以得到下面的CPU 40%与3天青D2_V2(2个芯,8GB RAM)情况下运行.我遇到了麻烦,因为我每个月花费近1.5k美元用于每秒15-25次呼叫的Api.如果我删除或缩小实例,CPU上升到55-60%, Redis和Azure表调用减慢很多,API请求需要3-5秒才能恢复.
我尽我所能尝试了一切,我认为可能是一些机器人或DDos攻击,所以我安装了nuget包WebApi Throttle,每个IP每秒最多设置1个请求.没有改变.
我查看了所有代码配置,以削减未经优化的部分,但1次调用只是调用redis并返回,其他非常干净和简单C#返回150ms,有2个azure表调用+ 1个azure队列集.
该API控制器是异步,一切都是异步.
我启用了Profiling,CPU在主要的azure进程中很高,而Redis Get方法,这里没有任何其他相关内容,没有瓶颈.我启用了诊断,没有错误.
我安装了Application Insights,在这里我看到一些奇怪的东西无法判断它是否正常.
我看到这个IP:13.88.23.0使用通常在正常请求中使用的查询字符串值向API 发出数千个请求.其中很多都失败了.这个IP本身就是Azure,为什么要调用Api?其中一些请求停留了几分钟,我可以从Application insights面板看到,它始终是相同的IP.
然后我看到剩下的日志,依赖项等,没有任何相关性.
除此之外,我该怎么做才能理解这个问题? 我不能认为每天只有200万次呼叫消耗如此多的CPU资源是否正常?
我可以使用其他分析技术吗?
根据您的经验,在正常情况下,我应该为3个双核8GB RAM服务器提供多少API调用?(假设我的配置有问题)
谢谢
UPDATE
我在两个云服务中分离了API,2合1和1.我仍然在另一个属于Microsoft的IP的Application Insights调用中看到.我认为这是正常的,可能是应用程序洞察无法检测到客户端的真实IP,因为它是一个工作者角色并显示内部角色.
但是,为这么少的电话使用这么多电力的问题仍然存在.有什么想法吗?
| 归档时间: |
|
| 查看次数: |
376 次 |
| 最近记录: |