Я пытаюсь масштабировать веб-сайты на Widows Azure. До сих пор я тестировал Wordpress, Ghost (блог) и простой HTML-сайт и все равно: если я масштабирую их (добавляю экземпляры), они не будут быстрее. Я уверен, что должен сделать что-то неправильно... Это то, что я сделал:
- Я создал новый общий веб-сайт с простым шаблоном HTML Bootstrap. http://demobootstrapsite.azurewebsites.net/
- Затем я установил ab.exe из Apache Project на хостинг-сервере (4 ядра, 12 ГБ оперативной памяти, 100 Мбит).
Я провел тест два раза. Первый раз с одним общим экземпляром и во второй раз с двумя общими экземплярами с помощью этой команды:
ab.exe -n 10000 -c 100 http://demobootstrapsite.azurewebsites.net/
Это означает, что ab.exe собирается создать 10000 запросов со 100 параллельными потоками.
Я ожидал, что время ответа теста с двумя общими экземплярами будет значительно ниже, чем время ответа только с одним общим экземпляром. Но среднее время на запрос даже немного выросло с 1452,519 мс с одним общим экземпляром до 1460,631 мс с двумя общими экземплярами. Позже я даже запустил сайт на 8 общих экземплярах без какого-либо эффекта. Моя первая мысль заключалась в том, что, возможно, общими случаями являются проблемы. Поэтому я разместил сайт на стандартной виртуальной машине и снова проверил тест. Но проблемы остаются прежними. Кроме того, добавление большего количества экземпляров не сделало сайт более быстрым (даже немного медленнее).
Позже Я снял видео со Скоттом Гензельманом и Стефаном Шакову, в котором они объяснили функции Azure Scaling. Стефан говорит, что Azure имеет своего рода "липкую балансировку нагрузки", которая будет перенаправлять клиента всегда на тот же экземпляр/виртуальную машину, чтобы избежать проблем совместимости с statefull-приложениями. Поэтому я проверил журналы WebServer, и я нашел файл журнала для каждого экземпляра с примерно один и тот же размер. Обычно это означает, что каждый экземпляр использовался во время теста.
PS: Во время тестового прогона я проверил время отклика веб-сайта с моего локального компьютера (из другой сети, кроме сервера), и время ответа было около 1,5 секунд.
Вот результаты теста:
######################################
1 instance result
######################################
PS C:\abtest> .\ab.exe -n 10000 -c 100 http://demobootstrapsite.azurewebsites.net/
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking demobootstrapsite.azurewebsites.net (be patient)
Finished 10000 requests
Server Software: Microsoft-IIS/8.0
Server Hostname: demobootstrapsite.azurewebsites.net
Server Port: 80
Document Path: /
Document Length: 16396 bytes
Concurrency Level: 100
Time taken for tests: 145.252 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 168800000 bytes
HTML transferred: 163960000 bytes
Requests per second: 68.85 [#/sec] (mean)
Time per request: 1452.519 [ms] (mean)
Time per request: 14.525 [ms] (mean, across all concurrent requests)
Transfer rate: 1134.88 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 14 8.1 16 78
Processing: 47 1430 93.9 1435 1622
Waiting: 16 705 399.3 702 1544
Total: 62 1445 94.1 1451 1638
Percentage of the requests served within a certain time (ms)
50% 1451
66% 1466
75% 1482
80% 1498
90% 1513
95% 1529
98% 1544
99% 1560
100% 1638 (longest request)
######################################
2 instances result
######################################
PS C:\abtest> .\ab.exe -n 10000 -c 100 http://demobootstrapsite.azurewebsites.net/
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking demobootstrapsite.azurewebsites.net (be patient)
Finished 10000 requests
Server Software: Microsoft-IIS/8.0
Server Hostname: demobootstrapsite.azurewebsites.net
Server Port: 80
Document Path: /
Document Length: 16396 bytes
Concurrency Level: 100
Time taken for tests: 146.063 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 168800046 bytes
HTML transferred: 163960000 bytes
Requests per second: 68.46 [#/sec] (mean)
Time per request: 1460.631 [ms] (mean)
Time per request: 14.606 [ms] (mean, across all concurrent requests)
Transfer rate: 1128.58 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 14 8.1 16 78
Processing: 31 1439 92.8 1451 1607
Waiting: 16 712 402.5 702 1529
Total: 47 1453 92.9 1466 1622
Percentage of the requests served within a certain time (ms)
50% 1466
66% 1482
75% 1482
80% 1498
90% 1513
95% 1529
98% 1544
99% 1560
100% 1622 (longest request)