25
LuaJIT как основа для сервера приложений Игорь Эрлих, IPONWEB v0.3

LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

  • Upload
    ontico

  • View
    109

  • Download
    8

Embed Size (px)

Citation preview

Page 1: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

LuaJIT как основа для сервера приложенийИгорь Эрлих, IPONWEB

v0.3

Page 2: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Что такое LuaJIT• Среда исполнения для Lua 5.1, включающая в себя трассирующий

JIT-компилятор

Page 3: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Что такое LuaJIT• Среда исполнения для Lua 5.1, включающая в себя трассирующий

JIT-компилятор

• Работает существенно быстрее, чем официальный интерпретатор:x2-x4 без JIT-компиляцииx2-x100 с JIT-компиляцией

Page 4: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Что такое LuaJITРазвивается и поддерживается более десяти лет• 08/09/2005: первый публичный релиз 1.0.3• 14/05/2015: стабильный релиз 2.0.4• Ветка 2.1 в активной разработке

Page 5: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Что такое LuaJITБольшое количество пользователей и моделей применения

Page 6: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

LuaJIT @ IPONWEB• Многопоточный веб-сервер

• Бизнес-логика на Lua

• x86_64 GNU/Linux

• LuaJIT 2.0.4 (стабильный релиз)

Page 7: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Проблема #1Ограничения по памяти

Page 8: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Ограничения по памятиСколько доступно управляемой памяти…

• В i686 GNU/Linux – 4GB

Page 9: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Ограничения по памятиСколько доступно управляемой памяти…

• В i686 GNU/Linux – 4GB

• В x86_64 GNU/Linux – 1GB???

Page 10: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Ограничения по памятиtypedef struct Mref { uint32_t ptr32;} Mref;

void *ptr = mmap((void *)MMAP_REGION_START, size, MMAP_PROT, MAP_32BIT|MMAP_FLAGS, -1, 0);

Page 11: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Ограничения по памятиКак справиться?• Снизить количество потоков

Page 12: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Ограничения по памятиКак справиться?• Снизить количество потоков• Перейти от потоков к процессам

Page 13: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Ограничения по памятиКак справиться?• Снизить количество потоков• Перейти от потоков к процессам• Вывести данные в неуправляемую память

Page 14: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Ограничения по памятиКак справиться?• Снизить количество потоков• Перейти от потоков к процессам• Вывести данные в неуправляемую память• Дождаться релиза v2.1

Page 15: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Проблема #2Сборка мусора

Page 16: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Сборка мусора• Mark’n’Sweep сборщик унаследован от Lua 5.1

Page 17: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Сборка мусора• Mark’n’Sweep сборщик унаследован от Lua 5.1• Инкрементальная, но не поддерживает поколения

Page 18: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Сборка мусора• Mark’n’Sweep сборщик унаследован от Lua 5.1• Инкрементальная, но не поддерживает поколения• До 30% производительности на реальных нагрузках!

Page 19: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Проблема #3Управление строками

Page 20: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Такая ситуация…

Page 21: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Управление строкамиhttp://myadsite.org/myhandler/creative_id=15365532&bidder_id=1http://myadsite.org/myhandler/creative_id=15365533&bidder_id=1http://myadsite.org/myhandler/creative_id=15365534&bidder_id=1http://myadsite.org/myhandler/creative_id=15365535&bidder_id=1http://myadsite.org/myhandler/creative_id=15365536&bidder_id=1http://myadsite.org/myhandler/creative_id=15365537&bidder_id=1http://myadsite.org/myhandler/creative_id=15365538&bidder_id=1......

Page 22: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Управление строкамиhttp://myadsite.org/myhandler/creative_id=15365532&bidder_id=1

Page 23: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Выводы• Основное преимущество LuaJIT – высокая скорость работы в

большинстве случаев (особенно в численных вычислениях)• Большое количество управляемой памяти (в смысле количества

объектов или их совокупного размера) может быть реальной проблемой• Много лексикографически похожих слов (URL, пути файловой

системы) – потенциальная DoS уязвимость

Page 24: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Ссылки• https://www.lua.org/• https://luajit.org/• https://github.com/LuaJIT/LuaJIT

• Or contact me:https://ru.linkedin.com/in/iaehrlic

Page 25: LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)

Q&A