LINUX.ORG.RU

Вышел Cowboy 0.8.0

 ,


1

2

Небольшой быстрый веб-сервер Cowboy обновился до версии 0.8.0.

Новая версия содержит большое количество изменений, среди которых:

  • новая версия не совместима с предыдущими и требует Erlang R15B и выше;
  • обновлена документация и добавлены множество примеров;
  • улучшен синтаксис роутинга;
  • усовершенствованы Websocket API и REST API;
  • улучшена поддержка стандарта HTTP;
  • многочисленные оптимизации и рефакторинг кода. Смотрите документацию для получения дополнительной информации.

Исходный код распространяется под свободной лицензией и доступен на гитхабе.

Коммерческую поддержку осуществляет компания 99s.

>>> Подробности

★★★★★

Проверено: JB ()

А чем он хорош? Чем-то от веб-серверов, которые студенты на лабораторных пишут, отличается?

Wizard_ ★★★★★ ()
Ответ на: комментарий от Wizard_

По ссылке «Подробности» написано. И да, откуда поддержка у лабороторной работы?

hizel ★★★★★ ()

Что-то мне подсказывает, что на фоне nginx, lighttpd и apache оно совсем не нужно, увы.

IPR ★★★★ ()

Страх господень. И на ЭТОМ пишут сервера?!

Sociopsih ★☆ ()

Ну наконец-то нормальная документация. Браво!

jeyc ()

Под оффтопиком можно собрать?

PaRuSoft ★★★ ()
Ответ на: комментарий от PaRuSoft

не пробовал, но думаю что проблем не должно возникнуть.

ymn ★★★★★ ()
Ответ на: комментарий от ymn

Не обращай внимания, очередной детский пук в лужу. Дитё просто начиталось каментов «не нужно» в каждом топике и решило тут вставить свои пять копеек. Уверен, что ни эрланга в целом, ни ковбоя в частности оно не видело

boombick ★★★★★ ()
Ответ на: комментарий от PaRuSoft

Если весь код на erlang, должно взлететь: интерпретатор под мастдайку есть.

dmfd ()
Ответ на: комментарий от IPR

Что-то мне подсказывает, что на фоне nginx, lighttpd и apache оно совсем не нужно, увы.

Ололо, ты бы понял бы про что тут. Это аналог python twisted, ROR и тд, только на erlang. Работает очень шустро, памяти жрет мало.

anonymous ()
Ответ на: комментарий от hizel

И да, откуда поддержка у лабороторной работы?

Так пока экзамен не сдадут, будут поддерживать :)

Wizard_ ★★★★★ ()
Ответ на: комментарий от anonymous

Ну, РоР и Твистед это какбэ совсем разные вещи, но, таки да, аналог Твистед... Чего там у рубироидов есть, ЕвентМашина?

anonymous ()
Ответ на: комментарий от boombick

ни эрланга в целом, ни ковбоя в частности оно не видело

и правильно. не нужно калечить психику.

niXman ★★ ()

Можно-ли на этом дома с нетбука поднять свой контаkтик или лицежопу со своими крючками и опарышами? нет? на зачем тогда всё эта..

anonymous ()
Ответ на: комментарий от boombick

Не обращай внимания, очередной детский пук в лужу. Дитё просто начиталось каментов «не нужно» в каждом топике и решило тут вставить свои пять копеек. Уверен, что ни эрланга в целом, ни ковбоя в частности оно не видело

Вопрос дитя «А нахрена оно нужно, если есть nginx?»
А от конфигов ерланговских приложений мне хочется орать и выпрыгивать в окно, благо оно на первом этаже.

tazhate ★★★★★ ()
Ответ на: комментарий от ymn

В Эрланге нету OOP, Patterns, Dependency Injection, OSGi, MVC и много другого мусора, которым вам забивают голову на работе

lol, все понятно, кульхацкер

Поскольку риак не может нам обеспечить консистентности мы будем ее обеспечивать очередью запросов на запись в процессе пользователя\группы\фида

Эпично, возьмем Riak потому что пацаны говорили что круто и сделаем его консистентным с однопоточной записью

vertexua ★★★☆☆ ()
Последнее исправление: vertexua (всего исправлений: 2)
Ответ на: комментарий от anonymous

Работает очень шустро, памяти жрет мало.

мое определение «очень шустро» - 100000 запросов в секунду для статичных данных на десктопном железе, а ваше?

wota ★★ ()
Ответ на: комментарий от wota

могу дома вечером на ноуте тесты погонять, если интересно.

ymn ★★★★★ ()
Ответ на: комментарий от ymn

могу дома вечером на ноуте тесты погонять, если интересно.

было бы интересно

wota ★★ ()
Ответ на: комментарий от wota

ну а пока можешь посмотреть на графики вот в этой презентации.

ymn ★★★★★ ()
Ответ на: комментарий от ymn

17000 запросов - неплохо, но не больше, в два раза хуже дефолтного апача

wota ★★ ()
Ответ на: комментарий от tazhate

Nginx из коробки не умеет проксировать веб-сокеты, например. Отчего делается грустно. Ну а зачем нужен эрланг - довольно глупый вопрос :)

boombick ★★★★★ ()
Ответ на: комментарий от wota

для статии есть nginx. cowboy для динамики. erlang парсит запросы ну очень быстро совсем немного хуже, чем либы на с/с++

anonymous ()

Коммерческую поддержку осуществляет компания 99s.

Если кому не нужна коммерческая поддержка - «You can also donate via Bitcoin: 1Q9Y9U3hj28R2VL3tGtAHhmw9ndMe5wCKq »

Anonymous ★★★★★ ()
Ответ на: комментарий от ymn

Спасибо огромное за пост. Интереснее читать сообщение человека на тему «посмотрите как я на этом довел работу до вменяемого результата» а не просматривать тонны плача «нафига еще одна сущность которую мне опять не осилить».

A-234 ★★★★★ ()
Ответ на: комментарий от wota

Итак, дефолтная убунта 12.10, дефолтный эрланг R15B01 из репозитория, дефолтный ковбой 0.8.0 с хеллоувордом из директории с примерами:

alex@home:~$ curl -i http://localhost:8080
HTTP/1.1 200 OK
connection: keep-alive
server: Cowboy
date: Wed, 13 Feb 2013 14:56:58 GMT
content-length: 12

Hello world!alex@home:~$

Запускаем пузомерку с параметрами взятыми из презентации что я давал:

alex@home:~$ siege -b -c 100 -t 30s http://localhost:8080
Lifting the server siege...      done.
Transactions:		      143470 hits
Availability:		       99.97 %
Elapsed time:		       29.11 secs
Data transferred:	        1.64 MB
Response time:		        0.02 secs
Transaction rate:	     4928.55 trans/sec
Throughput:		        0.06 MB/sec
Concurrency:		       99.17
Successful transactions:      143470
Failed transactions:	          45
Longest transaction:	        0.70
Shortest transaction:	        0.00

Запускаем пузомерку с другими параметрами:

alex@home:~$ siege -b -c 1000 -t 30s http://localhost:8080
** SIEGE 2.70
** Preparing 1000 concurrent users for battle.
The server is now under siege...
Lifting the server siege...      done.
Transactions:		       41108 hits
Availability:		      100.00 %
Elapsed time:		       29.65 secs
Data transferred:	        0.47 MB
Response time:		        0.69 secs
Transaction rate:	     1386.44 trans/sec
Throughput:		        0.02 MB/sec
Concurrency:		      958.21
Successful transactions:       41108
Failed transactions:	           0
Longest transaction:	        6.57
Shortest transaction:	        0.00

Все это дело запускалось на дефолтном ноутбуке Lenovo B570e:

alex@home:~$ uname -a
Linux home 3.5.0-23-generic #35-Ubuntu SMP Thu Jan 24 13:15:40 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

alex@home:~$ cat /proc/cpuinfo 
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 42
model name	: Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz
stepping	: 7
microcode	: 0x1b
cpu MHz		: 800.000
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 0
cpu cores	: 2
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips	: 4589.74
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 42
model name	: Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz
stepping	: 7
microcode	: 0x1b
cpu MHz		: 800.000
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 0
cpu cores	: 2
apicid		: 1
initial apicid	: 1
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips	: 4589.74
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 48 bits virtual
power management:

processor	: 2
vendor_id	: GenuineIntel
cpu family	: 6
model		: 42
model name	: Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz
stepping	: 7
microcode	: 0x1b
cpu MHz		: 800.000
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 1
cpu cores	: 2
apicid		: 2
initial apicid	: 2
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips	: 4589.74
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 48 bits virtual
power management:

processor	: 3
vendor_id	: GenuineIntel
cpu family	: 6
model		: 42
model name	: Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz
stepping	: 7
microcode	: 0x1b
cpu MHz		: 2300.000
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 1
cpu cores	: 2
apicid		: 3
initial apicid	: 3
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips	: 4589.74
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 48 bits virtual
power management:

alex@home:~$ cat /proc/meminfo 
MemTotal:        3961492 kB
MemFree:          777016 kB
Buffers:          264064 kB
Cached:          2076400 kB
SwapCached:            0 kB
Active:          1160252 kB
Inactive:        1730680 kB
Active(anon):     558124 kB
Inactive(anon):   320892 kB
Active(file):     602128 kB
Inactive(file):  1409788 kB
Unevictable:       31424 kB
Mlocked:           31424 kB
SwapTotal:       4105212 kB
SwapFree:        4105212 kB
Dirty:                44 kB
Writeback:             0 kB
AnonPages:        582064 kB
Mapped:           138140 kB
Shmem:            322724 kB
Slab:             159336 kB
SReclaimable:     125936 kB
SUnreclaim:        33400 kB
KernelStack:        3544 kB
PageTables:        27204 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     6085956 kB
Committed_AS:    3442280 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      404644 kB
VmallocChunk:   34359322132 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       69632 kB
DirectMap2M:     4040704 kB

Еще раз повторюсь, тесты запускались на дефолтной конфигурации без всяких твиков операционной системы и самого эрланга. Скорее всего можно несколько улучшить цифры, но мне лень)

ymn ★★★★★ ()

Спасибо ymn`ому человеку, просвящающего несколько необычными новостями простой православный люд, а ведь мы могли бы так и писать на вульгарных C++ и Java, совершенно в ус не дуя. Сердечное спасибо за эрланг, лисп и ковбой. С ув.

Etch ()
Ответ на: комментарий от Etch

ymn вообще немногий из адекватных регистрантов на нашем ЛОРчике... без всякой иронии сообщаю.

anonymous ()
Ответ на: комментарий от tazhate

Непорядок. Срочно надо переехать на семнадцатый!

Oleaster ★★★ ()
Ответ на: комментарий от Oleaster

Непорядок. Срочно надо переехать на семнадцатый!

Максимум доступен третий. Не хочу попасть в больницу из-за этого ужасного формата :)

tazhate ★★★★★ ()
Ответ на: комментарий от tazhate

Вот и я говорю. Надо было на символьных выражениях синтаксис делать, как в LFE прикрутили сбоку в виде костыля.

naryl ★★★★★ ()
Ответ на: комментарий от ymn

Сколько воркеров в ковбое? Потому что siege -c тесно коррелирует с количеством воркеров.

r ★★★★★ ()
Ответ на: комментарий от r

Смотря что считать под воркерами. Процессов ОС Эрланг запускает по числу ядер (именно планировщиков для выполнения Erlang кода). Сколько Erlang-процессов-акцепторов «префоркает» ковбой - задаётся при запуске

  cowboy:start_http(my_http_listener, 100,...
Количество одновременно обрабатываемых запросов (каждый в своём Erlang процессе) тоже задаётся в конфиге и оно по умолчанию равно 1024

seriyPS ()
Ответ на: комментарий от seriyPS

я про то и говорю. Если мало аксепторов - как по умолчанию 100 - то неудивительно что на 1000 параллельных соединений есть
«деградация» производительности. На самом деле надо конфиг поправить разрешив ему столько обрабатывать.

r ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.