LINUX.ORG.RU
ФорумTalks

кончил и забекапил

 ,


1

2

привет, ЖЖшечка.
прошло уже больше года с момента, как я начал писать биллинговую систему для своей компании (телеком).
и вот, сегодня, похоже, финальный коммит и бекап.
задавайте свои ответы по поводу разработки сложных приложений на nginx+lua, если кому интересно:)

а пока что оставлю здесь небольшие модули с костыликами, которые помогли при разработке: ссылка_на_гитхаб

  • libcost.lua — преобразование цены числом в пропись (multi-lang)
  • libfakengx.lua — фейковый объект ngx для отладки приложения без браузера
  • libhelper.lua — всякие полезные функции вроде in_array(), is_int(), join() и даже switch:case()
  • libngx.lua — враппер над nginx, функции типа die() и say(), а так же get_request_data() для получения всех параметров запроса в один массив и приведения их к нужному типу
  • libsip.lua — враппер над luasofia, для общения между астериском и биллингом посредством SIP MESSAGES
  • libsql.lua — враппер над luasql, сделанный по подобию функций для пыха. query(), array(), result(), вот это вот всё.
  • libtranslit.lua — транслитерация. откуда-то стырено, из открытых источников.
  • libucs2.lua — перекодировка из UTF8 в GSM UCS-II (эту кодировку принимают все смс-центры крупных провайдеров)
★★★★★
Ответ на: комментарий от snoopcat

кончилось.

Ну ты же кончил. Всё логично.

Stahl ★★☆
()

1) nginx+lua или таки openresty?
2) libfakengx.lua - зачем, если есть тесты?
3) почему io.popen для sh(), а не os.execute?
4) почему ты возвращаешь просто таблицы, а не метатаблицы с __index? (особенно в враппере sql, дабы pointer не передавать каждый раз)
5) почему ты не копируешь глобальные ngx.* в локальные переменные?

iSage ★★★★
()

Заклонил, и зафаворитил. Зачитал.

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

1. ванильный nginx+lua
2. чтобы offline mode
3. не знаю, а почему os.execute()?
4. как-то не прижилось
5. там из «глобальных» только ngx.ctx.db_link, если скопировать линк в локальную переменную и включить code_cache, начнут происходить странности с базой. (т.к. помимо биллинга есть еще smsc.lua, соот-но db_link'а два штуки)

snoopcat ★★★★★
() автор топика
Последнее исправление: snoopcat (всего исправлений: 1)
Ответ на: комментарий от iSage

хотя да, с метатаблицами было бы удобнее работать =)
но, поздно уже

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

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

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

дык это и есть по-нормальному.
биллинг изначально был на пхп и имел вообще 2 функции, а потом заверте..

snoopcat ★★★★★
() автор топика

Теперь выкладывай пароль. Успешные люди здесь не нужны.

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

А если бы на хаскеле, так вообще за рюмкой чая.

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

ngx.ctx - тоже глобальный ;)
Посмотри, как в openresty делают, они там даже
local say = ngx.say
local log = ngx.log
для скорости доступа пишут.

nginx совсем ванильный, или луа-модуль таки собран с luajit?

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

с джитом собран.

для скорости доступа пишут.

as is:

[2015/03/08 09:57:12] [getUnreadTickets] (0..) (Took 5.484130859375 msec.)

local _M.say = ngx.say

[2015/03/08 09:58:44] [getUnreadTickets] (0..) (Took 5.492810641288 msec.)

как видим, в пределах погрешности. =)

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

nginx+luajit+code_cache дают сумасшедшую производительность.

А что, этот ваш биллинг - критичная по производительности задача?

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

ну как бы да, критичная по производительности и отзывчивости.
подготовка звонков/тарификация/обработка-всего-чего-можно в реал-тайме

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

ну я тоже сначала так думал.

а потом ВНЕЗАПНО астер начал слать по 20 запросов в секунду (из них 10 от пользователей, которые решили позвонить, 10 из них от брутфорсеров), пользователи тыкают кнопочки в фронт-энде (это ~5 запросов/секунду на 1 пользователя) и смс-центр апстрим провайдера решает «обрадовать» наш биллинг об успешной доставке 150 смс одновременно.

на php+mysql при таких условиях приходилось страдать и наблюдать 99% загрузку проца процессами mysqld и php5-fpm

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

ну, тоже самое, примерно ~5.5 секунд.
там say() в одном месте используется, при выводе результата

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