Size: a a a

2020 February 13

S

Snusmumriken in pro.lua
V V
Это в общем-то не попытка найти решение лучше существующего для такой специфический ситуации =)

Это пример того, как крупные вендор типа Симантека могут забить на rfc при tcp-шной пересылке данных.

И такой "ход конём" всегда надо держать в голове. А то можно промахнуться, если исходить из "минимальный формат tcp будет содержать хотя бы длину или однозначный признаки начала-конца". Должен. Но может и не содержать.
Ты, прежде чем делать систему, берёшь и читаешь спеки того что тебе шлют. И если там что-то малопарсибельное — орёшь на ночальника/вендора: "Ты что мне принёс? Сладкий хлеб?! Как я вилкой парсить буду?"
источник

S

Snusmumriken in pro.lua
Кстати, 25к логов/сек это довольно много. При гигабитной сети, каждое сообщение (включая заголовки TCP) должны укладываться в 5.24288 бита, иначе не пролезут в сетевуху ))
В 10-гигабитной, соответственно, 52.4288 бита.
Или принимать это счастье должно несколько машин, целый кластер для приёма логов с балансировкой на клиентской стороне (ибо одна тачка не справится).
Так что если 25к это пик, то ещё ничо так (tcp выровняет приём), но в среднем должно быть около 1-5к логов/сек, туда уже средне-длинные логи влезают.
источник

VV

V V in pro.lua
Snusmumriken
Ты, прежде чем делать систему, берёшь и читаешь спеки того что тебе шлют. И если там что-то малопарсибельное — орёшь на ночальника/вендора: "Ты что мне принёс? Сладкий хлеб?! Как я вилкой парсить буду?"
Это, увы, не прокатит, когда обе части пирога внедрять начали до тебя, а ты нужен на поддержку таких связок)
источник

VV

V V in pro.lua
Snusmumriken
Кстати, 25к логов/сек это довольно много. При гигабитной сети, каждое сообщение (включая заголовки TCP) должны укладываться в 5.24288 бита, иначе не пролезут в сетевуху ))
В 10-гигабитной, соответственно, 52.4288 бита.
Или принимать это счастье должно несколько машин, целый кластер для приёма логов с балансировкой на клиентской стороне (ибо одна тачка не справится).
Так что если 25к это пик, то ещё ничо так (tcp выровняет приём), но в среднем должно быть около 1-5к логов/сек, туда уже средне-длинные логи влезают.
Речь о 40г сети и таких же адаптерах. Но чтобы минимизировать нагрузку при пересылке, логи бы желательно на первом же хопе парсить и ужимать. Чтобы можно было отправить "сообщение А, количество 300 штук", а не пересылать все 300 в чистом виде.
источник

VV

V V in pro.lua
Это возвращает нас к автоматическому парсингу и хлебушку от разрабов, которые решили, что по tcp можно передавать сообщения без разбивки.
источник

S

Snusmumriken in pro.lua
Но изначальная фигня вопроса была в том, что в норме, все tcp-rfc-сообщенькоориентированные — написаны с учётом длин сообщенек, дабы машина могла в точности определить длину и предельно быстро распарсить, в идеале — прямым распилом:
local len, data = data:sub(1, 4), data:sub(5)
local msg, data = data:sub(1, len), data:sub(len + 1)
источник

VV

V V in pro.lua
Snusmumriken
Но изначальная фигня вопроса была в том, что в норме, все tcp-rfc-сообщенькоориентированные — написаны с учётом длин сообщенек, дабы машина могла в точности определить длину и предельно быстро распарсить, в идеале — прямым распилом:
local len, data = data:sub(1, 4), data:sub(5)
local msg, data = data:sub(1, len), data:sub(len + 1)
Точно. И то, что вот этот замечательный порядок работы поддерживают не все.
источник

S

Snusmumriken in pro.lua
Ну, то есть если у нас фиксированная длина текста длины сообщения — мы просто отпиливаем N символов, числофицируем, и отпиливаем от остатка то что у нас получилось. Если не фиксированная — нужен разделитель и регулярки, что хреново. Или фиксированная длина длины сообщения ))
источник

S

Snusmumriken in pro.lua
В сишном варианте — можно смело упаковать 32-битное число в четыре октета, но на луях это не очень удобно (плюс при попытке дебага странно выглядит), поэтому именно в моём протоколе — 10 ascii-циферок. Оверхед, ну что поделать.
источник

VV

V V in pro.lua
Snusmumriken
В сишном варианте — можно смело упаковать 32-битное число в четыре октета, но на луях это не очень удобно (плюс при попытке дебага странно выглядит), поэтому именно в моём протоколе — 10 ascii-циферок. Оверхед, ну что поделать.
Я бы с удовольствием такой оверхед обрабатывал - если бы его кто добавил))

Да, оверхед. Но отсутствие стоит гораздо дороже для системы обработки, поэтому пусть уж лучше оверхед.
источник

S

Snusmumriken in pro.lua
Ну тут оверхед ровно 6 символов. 4 символа 32-битного числа против 10 символов ascii.
источник

VV

V V in pro.lua
Snusmumriken
Ну, то есть если у нас фиксированная длина текста длины сообщения — мы просто отпиливаем N символов, числофицируем, и отпиливаем от остатка то что у нас получилось. Если не фиксированная — нужен разделитель и регулярки, что хреново. Или фиксированная длина длины сообщения ))
Думаю, фиксированный длины для систем, работающих с полные URL путями, не вполне применимы.
источник

VV

V V in pro.lua
Snusmumriken
Ну тут оверхед ровно 6 символов. 4 символа 32-битного числа против 10 символов ascii.
Sub работает на порядок быстрее match, так что допустимо)
источник

S

Snusmumriken in pro.lua
(On вместо n * log(n)^2 или чего-то такого)
источник

VV

V V in pro.lua
Snusmumriken
(On вместо n * log(n)^2 или чего-то такого)
Это экспериментально получено, или где-то записано?
источник

S

Snusmumriken in pro.lua
Это примерно прикинуто
источник

S

Snusmumriken in pro.lua
Ну сам прикинь. В регулярке почти точно есть n, она как правило проходит по всем символам строки.
Но ещё у неё есть обработка собственно регулярной фигни, это курсор который бегает по символам и набивает в магазин то что в него подходит, сбрасывает если напоролся на неподходящую фигню и так далее. По прикидке, это где-то log(n)^2: на log(n) не тянет ибо слишком просто, но и на n^2 тоже не тянет ибо жирновато.
источник
2020 February 15

1

15164418390 in pro.lua
How is everything?
источник
2020 February 16

А

Александр in pro.lua
Добрый день, помогите!
источник

S

Snusmumriken in pro.lua
М?
источник