Russian Qt Forum
Ноябрь 23, 2024, 20:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 4 5 [6]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Вебсервер: логика маршрутизации  (Прочитано 38730 раз)
alexis031182
Гость
« Ответ #75 : Май 19, 2012, 13:16 »

В общем, практически та же скорость:
Код:
ab -n1000 -c1000 http://78.81.31.38:8080/html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 78.81.31.38 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        aweb
Server Hostname:        78.81.31.38
Server Port:            8080

Document Path:          /html
Document Length:        214 bytes

Concurrency Level:      1000
Time taken for tests:   0.388 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      385000 bytes
HTML transferred:       214000 bytes
Requests per second:    2575.47 [#/sec] (mean)
Time per request:       388.278 [ms] (mean)
Time per request:       0.388 [ms] (mean, across all concurrent requests)
Transfer rate:          968.32 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    7   4.6      8      16
Processing:    79  219  60.8    225     325
Waiting:       79  218  61.0    224     324
Total:         95  226  58.1    229     335

Percentage of the requests served within a certain time (ms)
  50%    229
  66%    248
  75%    271
  80%    283
  90%    305
  95%    317
  98%    323
  99%    325
 100%    335 (longest request)
Значит роутер зараза виноват был
Записан
fuCtor
Гость
« Ответ #76 : Май 20, 2012, 08:07 »

А теперь если запустить пару экземпляров и спрятать за балансировщиком, можно получить 6K RPS  и даже больше.
Записан
alexis031182
Гость
« Ответ #77 : Май 20, 2012, 11:01 »

Это да, но главное, что пока удаётся выжать максимум со stand alone. Вполне вероятно, что ещё многое можно было бы оптимизировать, но пока, пожалуй, приостановлюсь с этой задачей, иначе дальше не скоро продвинусь Улыбающийся

Здесь буду публиковать документацию по коду.
« Последнее редактирование: Май 20, 2012, 12:05 от alexis031182 » Записан
alexis031182
Гость
« Ответ #78 : Май 23, 2012, 14:39 »

Передумал "приостанавливаться". Довёл скорость до 3500 RPS на 1000 одновременных запросов, однако это, похоже, уже высшая точка. Ну может быть ещё пол-тысячи запросов удастся через какой-нибудь изврат натянуть, но не факт. В любом случае, ситуация кардинально не поменяется, и хотя даже такая скорость вполне приличная, всё же её будет недостаточно в боевых условиях.

Вертикально масштабировать свой десктоп мне уже некуда. Он уже итак изрядно отмасштабирован, поэтому остаётся только уповать на горизонталь.

По моему скромному разумению, здесь могут быть два пути: разделяемая память (и т.п.) или сокеты. В случае первого варианта имеем высокую производительность при обмене информацией между процессами вебсервера, но тогда ограничены одной машиной. Вариант с сокетами относительно медленный в "общении" instances вебсерверов между собой, но получается более предпочтительным. Например в этом случае можно было бы использовать два и более связанных между собой VPS. Если в определённый момент возникнет ситуация, когда уже поступивших и продолжающих поступать на обработку запросов становится слишком много, то часть из них может быть автоматом спроксирована на параллельный узел. Протокол общения между хостами будет тот же HTTP, и каждый из вебсерверов сможет быть мастером (multi-master).

Вроде всё идеально, но вероятно какие-то подводные камни при таком подходе существуют. О каких технических нюансах имеет смысл задуматься, и... вообще будет ли оправдано такое решение соответствующим увеличением производительности системы?

З.Ы. Пожалуйста, не приводите снова в пример связку с nginx и т.п. Я в курсе про это (несколько форумных страниц запечатлелись в памяти надолго Улыбающийся ), и сделать сие можно хоть сейчас (благо и писать-то ничего не надо боле), и именно потому оно не интересно. Правда-матка в том, что велосипедостроение в купе с академическим интересом не предполагают использование уже наличествующих вариантов.
Записан
V1KT0P
Гость
« Ответ #79 : Май 23, 2012, 15:50 »

Передумал "приостанавливаться". Довёл скорость до 3500 RPS на 1000 одновременных запросов, однако это, похоже, уже высшая точка. Ну может быть ещё пол-тысячи запросов удастся через какой-нибудь изврат натянуть, но не факт. В любом случае, ситуация кардинально не поменяется, и хотя даже такая скорость вполне приличная, всё же её будет недостаточно в боевых условиях.
Ты же QTcpSocket используешь? Они не такие быстрые как хотелось, я уже пробовал. В итоге взял библиотеку asio и не пожалел.
Записан
alexis031182
Гость
« Ответ #80 : Май 23, 2012, 16:04 »

Ты же QTcpSocket используешь? Они не такие быстрые как хотелось, я уже пробовал. В итоге взял библиотеку asio и не пожалел.
Не в бровь, а в глаз. Были сомнения, что что-то не то. Спасибо за совет.
Записан
alexis031182
Гость
« Ответ #81 : Май 28, 2012, 12:29 »

Перевёл сервер на epoll. Результат порадовал:
Код:
ab -n1000 -c1000 http://78.81.31.38:8080/html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 78.81.31.38 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        aweb
Server Hostname:        78.81.31.38
Server Port:            8080

Document Path:          /html
Document Length:        214 bytes

Concurrency Level:      1000
Time taken for tests:   0.162 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      385000 bytes
HTML transferred:       214000 bytes
Requests per second:    6174.40 [#/sec] (mean)
Time per request:       161.959 [ms] (mean)
Time per request:       0.162 [ms] (mean, across all concurrent requests)
Transfer rate:          2321.43 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       15   22   4.4     22      30
Processing:    15  103  16.2    106     118
Waiting:       13   40  19.9     39      75
Total:         44  125  13.3    129     135

Percentage of the requests served within a certain time (ms)
  50%    129
  66%    130
  75%    131
  80%    131
  90%    132
  95%    132
  98%    132
  99%    133
 100%    135 (longest request)
Записан
alexis031182
Гость
« Ответ #82 : Май 28, 2012, 12:41 »

Что-то я не понял с этим тестером апачевским. Это как вообще?
Код:
ab -n2000 -c2000 http://78.81.31.38:8080/html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 78.81.31.38 (be patient)
Completed 200 requests
Completed 400 requests
Completed 600 requests
Completed 800 requests
Completed 1000 requests
Completed 1200 requests
Completed 1400 requests
Completed 1600 requests
Completed 1800 requests
Completed 2000 requests
Finished 2000 requests


Server Software:        aweb
Server Hostname:        78.81.31.38
Server Port:            8080

Document Path:          /html
Document Length:        214 bytes

Concurrency Level:      2000
Time taken for tests:   0.328 seconds
Complete requests:      2000
Failed requests:        0
Write errors:           0
Total transferred:      770000 bytes
HTML transferred:       428000 bytes
Requests per second:    6089.69 [#/sec] (mean)
Time per request:       328.424 [ms] (mean)
Time per request:       0.164 [ms] (mean, across all concurrent requests)
Transfer rate:          2289.58 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       26   31   3.5     31      38
Processing:    25  234  35.7    241     265
Waiting:       24  103  45.0    106     178
Total:         63  265  33.2    272     290

Percentage of the requests served within a certain time (ms)
  50%    272
  66%    278
  75%    281
  80%    283
  90%    287
  95%    289
  98%    290
  99%    290
 100%    290 (longest request)
Запросов в два раза больше, вроде и среднее время на запрос увеличилось, а скорость таже - 6000 RPS
Записан
fuCtor
Гость
« Ответ #83 : Май 30, 2012, 06:03 »

Цитировать
Concurrency Level:      1000
Time taken for tests:   0.162 seconds

Concurrency Level:      2000
Time taken for tests:   0.328 seconds

А RPS и не должно было вырости, т.к. с увеличением конкурентности количество обрабатываемых в единицу времени запросов не увеличилось. И как видно из приведенных цифр, время выполнения выросло в 2 раза ровно. Отсюда можно предположить вывод, что при текущем железе и ПО максимальная производительность в районе 6000 запросов.
Записан
fuCtor
Гость
« Ответ #84 : Май 30, 2012, 06:05 »

Что-то я не понял с этим тестером апачевским. Это как вообще?
Запросов в два раза больше, вроде и среднее время на запрос увеличилось, а скорость таже - 6000 RPS

Нужно смотреть на:
Time per request:       0.164 [ms] (mean, across all concurrent requests)

он показывает сколько времени на один запрос тратится, в обоих случаях одинаков.
Записан
alexis031182
Гость
« Ответ #85 : Май 30, 2012, 07:36 »

Понял, спасибо. Самое интересное, что если увеличить общее количество запросов при тех же 1000 конкурентных, то среднее время на запрос меньше:
Код:
ab -n10000 -c1000 http://78.81.31.38:8080/html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 78.81.31.38 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests

Server Software:        aweb
Server Hostname:        78.81.31.38
Server Port:            8080

Document Path:          /html
Document Length:        214 bytes

Concurrency Level:      1000
Time taken for tests:   1.225 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      3850000 bytes
HTML transferred:       2140000 bytes
Requests per second:    8161.70 [#/sec] (mean)
Time per request:       122.524 [ms] (mean)
Time per request:       0.123 [ms] (mean, across all concurrent requests)
Transfer rate:          3068.61 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    3   4.7      1      25
Processing:    28  103  35.6    100     370
Waiting:       10   88  35.3     82     369
Total:         28  105  35.6    104     370

Percentage of the requests served within a certain time (ms)
  50%    104
  66%    117
  75%    125
  80%    135
  90%    152
  95%    167
  98%    189
  99%    207
 100%    370 (longest request)
Записан
alexis031182
Гость
« Ответ #86 : Июнь 22, 2012, 18:36 »

Еще немного, ещё чуть-чуть. Последний бой - он трудный самый.
Код:
ab -n1000 -c1000 http://78.81.31.38:8080/html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 78.81.31.38 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:       
Server Hostname:        78.81.31.38
Server Port:            8080

Document Path:          /html
Document Length:        303 bytes

Concurrency Level:      1000
Time taken for tests:   0.101 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Non-2xx responses:      1000
Total transferred:      331000 bytes
HTML transferred:       303000 bytes
Requests per second:    9926.74 [#/sec] (mean)
Time per request:       100.738 [ms] (mean)
Time per request:       0.101 [ms] (mean, across all concurrent requests)
Transfer rate:          3208.74 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   10   7.6      8      22
Processing:     6   34  12.5     34      51
Waiting:        5   33  12.3     33      50
Total:         13   44  12.3     50      67

Percentage of the requests served within a certain time (ms)
  50%     50
  66%     54
  75%     56
  80%     56
  90%     57
  95%     58
  98%     59
  99%     59
 100%     67 (longest request)
Записан
Страниц: 1 ... 4 5 [6]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.146 секунд. Запросов: 21.