Меня отпугивает подход luvit к асинхронным операциям, очень не люблю callback-и. Но несомненно проект достоин внимания. Кстати есть ещё и cqueues, у нас на нём web UI роутера крутится. Он отличается более тонким контролем event-loop и сильно гибче nginx.
Мы сначала так и делали. Теперь авторизация происходит на стороне nginx и до медленной rails далеко не всегда дело доходит. Более того, все JSON APIs уже изначально на Lua пишутся.
Не стоит забывать, что shared_dict хранится в памяти. В redis могут и гигабайты храниться, нехорошо будет всё это дублировать в памяти nginx. Хотя если данных немного а объём запросов огромный — почему бы и нет.
Возможно кому-нибудь будет интересно, насколько преславутые патчи ускоряют загрузку rails приложения. Приведу статистику по одному и тому же приложению.
ruby 1.9.2p290:
real 0m44.060s
user 0m42.059s
sys 0m1.660s
ruby-1.9.2-p290-patched:
real 0m27.320s
user 0m25.578s
sys 0m1.460s
ruby 1.9.3p0:
real 0m22.683s
user 0m21.417s
sys 0m0.956s
ruby-1.9.3-p0-patched:
real 0m17.806s
user 0m16.633s
sys 0m0.892s
тестировал запуская $ time ./bin/rails runner 'puts' по 5 раз, и брал последнее время.
Многое зависит от того, есть ли официальный runtime. Мы много пишем лямбд на расте, runtime удобный (https://github.com/awslabs/aws-lambda-rust-runtime) и потому писать просто :)
2) pgmoon?
Он уже ушёл и из cludflare тоже :)
Все операции с TCP/UDP сокетами неблокирующие. Т.е. да, там используется event-loop nginx-а, чтобы ждать ответ от DB.
У нас полноценные интеграционные тесты через lapis написаны. Только одно неудобство, нельзя stub-ить код в другом процессе :)
Мы сначала так и делали. Теперь авторизация происходит на стороне nginx и до медленной rails далеко не всегда дело доходит. Более того, все JSON APIs уже изначально на Lua пишутся.
[ -d './bin' ] && export PATH=`pwd`/bin:$PATH
в .rvmrc в проекте и совсем забыть.
для 1.9.3-p0
ruby 1.9.2p290:
real 0m44.060s
user 0m42.059s
sys 0m1.660s
ruby-1.9.2-p290-patched:
real 0m27.320s
user 0m25.578s
sys 0m1.460s
ruby 1.9.3p0:
real 0m22.683s
user 0m21.417s
sys 0m0.956s
ruby-1.9.3-p0-patched:
real 0m17.806s
user 0m16.633s
sys 0m0.892s
тестировал запуская $ time ./bin/rails runner 'puts' по 5 раз, и брал последнее время.