Я создал веб-приложение apnet с сетевым приложением Asp.Net Core (.NET Core), которое дает нам api/values controller, и в сообщении я отправляю сообщение azure, используя библиотеку Windows Azure Storage v8.0. https://www.nuget.org/packages/WindowsAzure.Storage/8.0.0Недостаток производительности в Azure Storage - всего 200 RPS
В настоящее время, когда я делаю один запрос, очередь занимает около avg. 140 мс, чтобы завершить метод AddMessageAsync(), но когда я выполняю тест нагрузки на 200 запросов в секунду, тот же метод занимает в среднем 800 мс для завершения. В соответствии с лазурной очередью хранения он должен обрабатывать 2000 запросов в секунду, но я не могу получить 200 запросов в секунду.
Я был бы признателен, если бы кто-то предоставил некоторую информацию о том, почему веб-приложение api не работает должным образом.
Пожалуйста, смотрите ниже моего кода примера
Startup.cs - ConfigureServices()
// Add QueueAccessLayer.
services.AddSingleton<IQueueAccessLayer, QueueAccessLayer>();
Emailcontroller.cs
[Route("api/[controller]")]
public class EmailController : Controller
{
private IQueueAccessLayer _queue;
public EmailController(IQueueAccessLayer queue)
{
_queue = queue;
}
// POST api/values
[HttpPost]
public async Task<IActionResult> Post([FromBody]string value)
{
var emailMessage = "Message Id - " + Guid.NewGuid();
await _queue.SendMessage(emailMessage);
return new EmptyResult();
}
}
QueueAccessLayer.cs
public class QueueAccessLayer : IQueueAccessLayer
{
private CloudQueueClient _queueClient;
private CloudStorageAccount _storageAccount;
private CloudQueue _emailQueue;
private ILogger<QueueAccessLayer> _logger;
public QueueAccessLayer(ILogger<QueueAccessLayer> logger)
{
_storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=test1;AccountKey=#####;");
_queueClient = _storageAccount.CreateCloudQueueClient();
_emailQueue = _queueClient.GetQueueReference("emailqueue");
_emailQueue.CreateIfNotExistsAsync().Wait();
_logger = logger;
}
public async Task<bool> SendMessage(string msg)
{
Stopwatch watch = new Stopwatch();
watch.Start();
CloudQueueMessage message = new CloudQueueMessage(msg);
await _emailQueue.AddMessageAsync(message);
watch.Stop();
_logger.LogInformation(msg + " - " + watch.ElapsedMilliseconds + "ms");
return true;
}
}
public interface IQueueAccessLayer
{
Task<bool> SendMessage(string msg);
}
RPS также ограничен WebApp, попробуйте [изменить уровень или масштаб из плана обслуживания приложений] (https: // docs .microsoft.com/en-us/azure/app-service/azure-web-sites-web-hosting-plans-in-depth-overview), чтобы проверить, есть ли какие-либо улучшения для RPS? –
В настоящее время мое веб-приложение работает локально в контейнере докеров. – user1754675
Я понимаю, но если я прокомментирую эту строку, подождите _queue.SendMessage (emailMessage); Я получаю около 1814 запросов в секунду с ответом 72 мс. С приведенным выше я получаю 152 rps с 600 мс avg-ответом. – user1754675