Опыт работы с LuaJITв нагруженных интернет-проектахАлександр ГладышCTO, LogicEditor
1. О Lua и LuaJIT2. Наш стек3. Грабли4. Стек следующего поколения5. Хотите знать больше?
О Lua и LuaJITLua:• мощный,• быстрый,• лёгкий,• расширяемый,• встраиваемыйскриптовый язык программирования.
Кратко о языкеО Lua и LuaJIT• Происхождение.• Рост популярности в последние годы.• Где используется?• LuaRocks.
Популярные диалектыО Lua и LuaJIT• Lua 5.1 vs. Lua 5.2,• LuaJIT 2.0,• Metalua.
LuaJIT 2.0О Lua и LuaJIT• JIT, FFI, производительность.• Ограничения для x86 64.• LuaJIT vs. Lua 5.2.
Почему Lua?О Lua и LuaJITИсторически: Мы вышли из игровой индустрии, где Lua "правит миром".Прагматически:• Работает — быс...
Где искать людей?О Lua и LuaJITПереучивать.
Основные проблемы при переучивании на LuaО Lua и LuaJIT• Неуёмное перетачивание языка под себя:• NIH-синдром и лёгкость до...
Самое главное!О Lua и LuaJITКогда пишете код на Lua — пишите его на Lua!
Место для Lua / LuaJIT в вашем стекеО Lua и LuaJITВ первую очередь:• Настраиваемая пользователем логика.• Код, который ина...
Фреймворки для построения веб-сервисов на LuaНаш стекНекоторые популярные:• Kepler/WSAPI• OpenResty• LuvitУ нас — велосипе...
Какие веб-задачи мы решаем при помощи Lua?Наш стек• Браузерные и социальные игры.• Баннерные сети.• Ненагруженные веб-серв...
На каком "железе" мы живём?Наш стек• Linode• Hetzner EX6
ОСНаш стек• Xen XCP поверх Ubuntu Sever.• Виртуальные машины на Ubuntu Server:• Фронтенды (nginx).• Бэкенды (32-bit).• Вор...
БэкендыНаш стек• nginx• spawn-fcgi + multiwatch• LuaJIT 2.0• FCGI/WSAPI• Код приложения
ВоркерыНаш стек• runit• LuaJIT 2.0• Код приложения
IPCНаш стек• ØMQ• Основные задачи:• Замена неработающим сигналам.• Сброс кешей внутри процессов.• Задачи воркерам передают...
Тюнинг системыНаш стек• OS• bit.ly/kernel-magic (для фронтендов и бэкендов)• Redis• I/O Scheduler: noop on guests, deadlin...
"DevOps"Наш стек• Деплоймент• High Availability• Мониторинг
Основные библиотекиНаш стек• lua-nucleo, lua-aplicado (лучше — Penlight, telescope)• slnunicode• luatexts, luajson• luasoc...
DSL и кодогенерацияНаш стек• Обработчики HTTP запросов.• Код (частично статически валидируется).• Документация.• (В дальне...
ПроизводительностьНаш стек• Порядка 160M синтетических хитов в день на машину класса EX6 вбаннерных сетях.• Порядка 8K акт...
С чем мы сталкивались?ГраблиОсновное:• Пара "мистических" проблем, вызванных багами в ранних бетах LuaJIT(всё исправлено)....
Диагностика, отладка и мониторингГрабли• Частичная статическая валидация кода.• Проверки в рантайме.• Автотесты.• Тюнинг и...
Основные нерешённые проблемыГрабли• Long polling / Comet.• Нормальная поддержка сигналов.• Более эффективная загрузка CPU....
Стек следующего поколения• Неблокирующее API при помощи кооперативной многозадачности, безколлбэков. Вдохновляться либо до...
Хотите знать больше?Official Site lua.org, luajit.orgWiki lua-users.org/wiki, wiki.luajit.orgMailing Lists lua.org/lua-l.h...
Вопросы?@agladyshag@logiceditor.commeetup.com/Lua-in-Moscow
Upcoming SlideShare
Loading in …5
×

Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (LogicEditor)

4,314 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,314
On SlideShare
0
From Embeds
0
Number of Embeds
650
Actions
Shares
0
Downloads
18
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (LogicEditor)

  1. 1. Опыт работы с LuaJITв нагруженных интернет-проектахАлександр ГладышCTO, LogicEditor
  2. 2. 1. О Lua и LuaJIT2. Наш стек3. Грабли4. Стек следующего поколения5. Хотите знать больше?
  3. 3. О Lua и LuaJITLua:• мощный,• быстрый,• лёгкий,• расширяемый,• встраиваемыйскриптовый язык программирования.
  4. 4. Кратко о языкеО Lua и LuaJIT• Происхождение.• Рост популярности в последние годы.• Где используется?• LuaRocks.
  5. 5. Популярные диалектыО Lua и LuaJIT• Lua 5.1 vs. Lua 5.2,• LuaJIT 2.0,• Metalua.
  6. 6. LuaJIT 2.0О Lua и LuaJIT• JIT, FFI, производительность.• Ограничения для x86 64.• LuaJIT vs. Lua 5.2.
  7. 7. Почему Lua?О Lua и LuaJITИсторически: Мы вышли из игровой индустрии, где Lua "правит миром".Прагматически:• Работает — быстро!• Писать — удобно!• Освоить — легко!
  8. 8. Где искать людей?О Lua и LuaJITПереучивать.
  9. 9. Основные проблемы при переучивании на LuaО Lua и LuaJIT• Неуёмное перетачивание языка под себя:• NIH-синдром и лёгкость доработки напильником.• Цена и выгоды отхода от мэйнстрима.• Идеосинкразии языка:• Переменные по умолчанию — глобальные.• Массивы индексируются с 1.• Размер массива с nil внутри — не определён.• Всё, что не nil и false — истина (включая 0).
  10. 10. Самое главное!О Lua и LuaJITКогда пишете код на Lua — пишите его на Lua!
  11. 11. Место для Lua / LuaJIT в вашем стекеО Lua и LuaJITВ первую очередь:• Настраиваемая пользователем логика.• Код, который иначе был бы написан на C/C++/OCaml.
  12. 12. Фреймворки для построения веб-сервисов на LuaНаш стекНекоторые популярные:• Kepler/WSAPI• OpenResty• LuvitУ нас — велосипед, построенный на WSAPI.
  13. 13. Какие веб-задачи мы решаем при помощи Lua?Наш стек• Браузерные и социальные игры.• Баннерные сети.• Ненагруженные веб-сервисы, мобильные игры и проч.
  14. 14. На каком "железе" мы живём?Наш стек• Linode• Hetzner EX6
  15. 15. ОСНаш стек• Xen XCP поверх Ubuntu Sever.• Виртуальные машины на Ubuntu Server:• Фронтенды (nginx).• Бэкенды (32-bit).• Воркеры (32-bit).• БД (Redis, MySQL).• Системная (Bind, конфиг-сервер на nginx, деплоймент, мониторинг).
  16. 16. БэкендыНаш стек• nginx• spawn-fcgi + multiwatch• LuaJIT 2.0• FCGI/WSAPI• Код приложения
  17. 17. ВоркерыНаш стек• runit• LuaJIT 2.0• Код приложения
  18. 18. IPCНаш стек• ØMQ• Основные задачи:• Замена неработающим сигналам.• Сброс кешей внутри процессов.• Задачи воркерам передаются через Redis.
  19. 19. Тюнинг системыНаш стек• OS• bit.ly/kernel-magic (для фронтендов и бэкендов)• Redis• I/O Scheduler: noop on guests, deadline on host• nginx• worker rlimit nofile
  20. 20. "DevOps"Наш стек• Деплоймент• High Availability• Мониторинг
  21. 21. Основные библиотекиНаш стек• lua-nucleo, lua-aplicado (лучше — Penlight, telescope)• slnunicode• luatexts, luajson• luasocket, luaposix (лучше — ljsyscall)• WSAPI• lua-zmq• lua-hiredis (лучше ljffi-hiredis)• luasql-mysql
  22. 22. DSL и кодогенерацияНаш стек• Обработчики HTTP запросов.• Код (частично статически валидируется).• Документация.• (В дальнейшем) Smoke-тесты.• Структура SQL.• "ORM" wrapper code.• DB schema patches.• Auto-backoffice.• Документация.• bit.ly/lua-dsl-talk• Генерация типичных частей проекта из текстовых шаблонов.
  23. 23. ПроизводительностьНаш стек• Порядка 160M синтетических хитов в день на машину класса EX6 вбаннерных сетях.• Порядка 8K активных пользователей единомоментно на машину классаEX6 в онлайн-играх.
  24. 24. С чем мы сталкивались?ГраблиОсновное:• Пара "мистических" проблем, вызванных багами в ранних бетах LuaJIT(всё исправлено).• Проблемы из-за одновременно установленных двух версий одногокамня в LuaRocks.• Лопающийся Redis.• Падучие диски Hetzner.
  25. 25. Диагностика, отладка и мониторингГрабли• Частичная статическая валидация кода.• Проверки в рантайме.• Автотесты.• Тюнинг и мониторинг GC.• Мониторинг времени запросов, расхода памяти на запрос и проч.• Отладка по логам.
  26. 26. Основные нерешённые проблемыГрабли• Long polling / Comet.• Нормальная поддержка сигналов.• Более эффективная загрузка CPU.• LuaRocks:• Возможность установить две версии одного камня.• Отсутствие возможности апгрейдить камни.
  27. 27. Стек следующего поколения• Неблокирующее API при помощи кооперативной многозадачности, безколлбэков. Вдохновляться либо доточить OpenResty.• Полный переход на LuaJIT FFI.• Отказ от LuaRocks.• Отказ от FCGI, переход на epoll и lua-http-parser.• Максимально упрощённая архитектура. Отказ от сервера конфигурации.Ещё больше кодогенерации.• Новый дизайн DSL.
  28. 28. Хотите знать больше?Official Site lua.org, luajit.orgWiki lua-users.org/wiki, wiki.luajit.orgMailing Lists lua.org/lua-l.html,luajit.org/list.htmlStackOverflow stackoverflow.com/questions/tagged/LuaIRC #lua at irc.freenode.net
  29. 29. Вопросы?@agladyshag@logiceditor.commeetup.com/Lua-in-Moscow

×