
Alexey
28.03.2017
21:08:59
на го. да. естественно. тоже самый простой код.
и там и сям код простой. без углубления в неведомые глубины

Max
28.03.2017
21:09:19
ну и с чего он должен на нескольких ядрах работать?

Alexey
28.03.2017
21:09:32
я про это не говорил, что он должен.

Google

Max
28.03.2017
21:09:37
ок

Alexey
28.03.2017
21:09:50
и он от этого, кстати, не сильно и проигрывает
по Jmeter получилось практически одно и то же

Александр
28.03.2017
21:10:02
я гонял го как веб сервер он у меня нормально по процам раскидывал нагрузку
там конечно не как на эрланг/эликсир, написал не думая и всё размазалось равномерно,
но всё же го тоже несложно мажет нагрузку

Alexey
28.03.2017
21:10:20
даже, фактически, получается, что Го на одно и то же RPS отожрал 1/4 ядер, а ковбой все 4
слева эликсир. справа Го
кстати, тоже вот интересно было. справа видно, что RPS временами проседает. полочки такие
так вот. Гошечка грузит ядро в 100%, потом, через какое-то время переключается на другое ядро

Александр
28.03.2017
21:11:51
а задача статику отдавать?

Alexey
28.03.2017
21:11:51
и вот в те моменты, когда мы видим полочку снижения RPS. каждый раз это было 1е ядро
да

Александр
28.03.2017
21:12:24
https://github.com/valyala/fasthttp
вот эта штука у го адские результаты по статике показывает

Google

Alexey
28.03.2017
21:12:26
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1?)
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":4000", nil)
//fmt.Println("hello")
}
как тут код вставлять. я хз. можно тут поглядеть
https://github.com/UA3MQJ/go-small-http/blob/master/http.go
но блин на эликсире по определению получилось сложнее. приложение, все дела

Rafael
28.03.2017
21:13:27

Alexey
28.03.2017
21:13:58
но по коду роутера получилось примерно тоже не много кода
defmodule Http_test2.Router do
use Plug.Router
use Plug.Debugger
plug Plug.Parsers, parsers: [:erlencoded, :multipart]
plug :match
plug :dispatch
get "/" do
send_resp(conn, 200, "Hi there, I love !")
end
get "/:key" do
send_resp(conn, 200, "Hi there, I love " <> key <> "!")
end
end
тестил не в винде
ви будете ржать. но это вообще OrangePI
просто, я очень боялся за то, что тест упрется в сеть
поэтому в качестве подопытного взял Orange в надежде, что я его быстрее по производительности завалю. чем по сети

Александр
28.03.2017
21:15:11
а Plug.Debugger то нафига?
и парсеры зачем?


Alexey
28.03.2017
21:15:38
копипаста. в консоль ничего не валю
я думаю, тут еще половину выкинуть можно
делал все в лоб, в общем. эдакий эксперимент о том, что можно получить, минимально прикладывая головной мозг
в итоге го
sea@sea:~$ wrk -t100 -c500 -d10s http://192.168.1.16:4000/
Running 10s test @ http://192.168.1.16:4000/
100 threads and 500 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 93.81ms 18.63ms 328.78ms 84.98%
Req/Sec 53.13 11.12 101.00 77.60%
52819 requests in 10.10s, 6.80MB read
Requests/sec: 5232.01
Transfer/sec: 689.77KB
ковбой
sea@sea:~$ wrk -t100 -c500 -d10s http://192.168.1.16:4000/
Running 10s test @ http://192.168.1.16:4000/
100 threads and 500 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 93.24ms 96.80ms 1.26s 94.47%
Req/Sec 62.95 23.33 292.00 79.87%
61646 requests in 10.10s, 9.53MB read
Requests/sec: 6106.38
Transfer/sec: 0.94MB
а причина была смешная. этот тест был - ноут тестировал, Orange PI - сервер. и такой резалт

anton
28.03.2017
21:20:15

Александр
28.03.2017
21:20:18
ковбой больше данных отдавал чем го
по тестам
это нечестно

Google

Alexey
28.03.2017
21:20:40
а тот случай, когда Го оказался в 2 раза быстрее. было на Win7 на i7, внутри wirtual box, с выданными 2мя ядрами. и тест и сервер - были на одной этой виртуальной машине. попросил смешно. смешно и получил
он больше отдать успел за 10 секунд
есть тест от AB
они отдали одинаково. только эликсир отдал быстрее
а. и да. го отдал данных меньше, потому что он часть коннектов просрал
так что всетаки да. еликсир отдал больше

Александр
28.03.2017
21:23:13
количество запросов к объяму данных в разных отношениях относятся
ограничь по количеству запросов и выложи данные
я думаю что заголовки не учёл


Alexey
28.03.2017
21:23:53
go
sea@sea-tpro:~$ ab -kc 100 -t 20 http://192.168.1.16:4000/
This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.1.16 (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests
Server Software:
Server Hostname: 192.168.1.16
Server Port: 4000
Document Path: /
Document Length: 18 bytes
Concurrency Level: 100
Time taken for tests: 10.196 seconds
Complete requests: 50000
Failed requests: 0
Keep-Alive requests: 50000
Total transferred: 7950000 bytes
HTML transferred: 900000 bytes
Requests per second: 4903.76 [#/sec] (mean)
Time per request: 20.393 [ms] (mean)
Time per request: 0.204 [ms] (mean, across all concurrent requests)
Transfer rate: 761.42 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.4 0 15
Processing: 2 20 7.7 20 72
Waiting: 2 20 7.7 20 72
Total: 2 20 7.8 20 80
Percentage of the requests served within a certain time (ms)
50% 20
66% 23
75% 25
80% 27
90% 30
95% 32
98% 37
99% 44
100% 80 (longest request)
elx
sea@sea-tpro:~$ ab -kc 100 -t 20 http://192.168.1.16:4000/
This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.1.16 (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests
Server Software:
Server Hostname: 192.168.1.16
Server Port: 4000
Document Path: /
Document Length: 18 bytes
Concurrency Level: 100
Time taken for tests: 8.075 seconds
Complete requests: 50000
Failed requests: 0
Keep-Alive requests: 49545
Total transferred: 9289080 bytes
HTML transferred: 900000 bytes
Requests per second: 6192.28 [#/sec] (mean)
Time per request: 16.149 [ms] (mean)
Time per request: 0.161 [ms] (mean, across all concurrent requests)
Transfer rate: 1123.45 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.8 0 23
Processing: 2 16 6.5 15 82
Waiting: 2 16 6.5 15 82
Total: 2 16 6.8 15 84
Percentage of the requests served within a certain time (ms)
50% 15
66% 18
75% 20
80% 21
90% 24
95% 27
98% 33
99% 39
100% 84 (longest request)


Александр
28.03.2017
21:25:13
надо
ab -n

Alexey
28.03.2017
21:25:39
дай pls полностью строчку. я попробую. на выходных

Александр
28.03.2017
21:26:04
ab -n 100 http://192.168.1.16:4000/
он выполнит 100 запросов
и там будет видно сколько данных передал
без вычислений дополнительных

Alexey
28.03.2017
21:26:37
да и тут видно. что 18 байт в обоих случаях

Александр
28.03.2017
21:27:26
в HTTP протоколе есть данные, а есть заголовки
заголовков больше чем 18 байт обычно передаётся

Google

Alexey
28.03.2017
21:27:56
а он тут, получается, что заголовки не отображает?

Александр
28.03.2017
21:28:40
хз

Alexey
28.03.2017
21:29:22
в общем. я потом еще поднажал на Jmeter. правда уже не фиксировал результаты
но добился уже того, что запросов было столько, что ОС начинала упираться
и Го и ковбой. каждый по своему начинали ругаться по поводу дескрипторов, которых больше нет
был очень рад узнать, что в сеть это пролезло. потому что, когда пару лет назад занимался такими же тестами, то у меня роутер укладывался
но тогда на серверной стороне и не Orange был

shadowjack
28.03.2017
21:40:18
Надо на Digital Ocean потестить на разных инстансах. Там дешево в расчете на час.

Alexey
28.03.2017
21:41:18
попробуй. как собрать и запустить - я там пометочку сделал
https://github.com/UA3MQJ/elx-small-http-cowboy
https://github.com/UA3MQJ/go-small-http

Admin
ERROR: S client not available

Александр
28.03.2017
21:42:14
ковбой дополнительный заголовок server шлёт
а голанг нет

Alexey
28.03.2017
21:42:24
неа

Александр
28.03.2017
21:42:43
cache-control:max-age=0, private, must-revalidate
content-length:18
date:Tue, 28 Mar 2017 21:41:44 GMT
server:Cowboy

Alexey
28.03.2017
21:42:44
если бы слал, то в поле Server Software не было бы пусто

Александр
28.03.2017
21:43:09
Content-Length:18
Content-Type:text/plain; charset=utf-8
Date:Tue, 28 Mar 2017 21:42:59 GMT
ну я твои примеры скопировал
сам проверь

Alexey
28.03.2017
21:44:52
ага. так. это ты уже заголовки поглядел

Google

Alexey
28.03.2017
21:45:21
по ходу, ab тест 18 берет из заголовка Content-Length
но странно, что Server Software не заполнил. феникс так писал, что феникс )
значит полный пакетик от кофбоя получился больше

Александр
28.03.2017
21:46:16
не это я сам приложения слепил и запустил из твоего кода из темы
сейчас склонировал
собираю
cache-control:max-age=0, private, must-revalidate
content-length:18
date:Tue, 28 Mar 2017 21:47:36 GMT
server:Cowboy
вот склонировал и собрал как ты написал

Alexey
28.03.2017
21:48:33
ага. какие мы должны выводы сделать? разное количество байт в ответах

Александр
28.03.2017
21:48:52
да
надо сделать однообразно
у голанга, кстати, тоже несправедливость
там строчку форматируешь

Rumata
28.03.2017
21:49:26
Чуваки

Александр
28.03.2017
21:49:31
а с эликсира отдаёшь статичную

Rumata
28.03.2017
21:49:41
Сегодня такую мысль в подкасте услышал
Прошлое 10 лет
Было типо флеш
Все парились за скорость там

Alexey
28.03.2017
21:50:18
я тестил по jmeter не по статике / а с ключем /test чтобы он строку туда запулил

Rumata
28.03.2017
21:50:22
Теперь время другое все парятся за знания
И вообще на самом деле уже всем похуй че там быстро го или элексир

Alexey
28.03.2017
21:51:06
а в wrk и ab там да. забыл указать. но потом подставлял и туда. кординально разницы не было. оба быстро там форматировали