
Serb
02.05.2016
23:05:26
Так, это всё отлично, но я спать. Спасибо за советы, Паша, Артем, Алекс, всем спок!

Sergey
02.05.2016
23:05:59
Ну и последний вопрос: как обрабатывать быстро много поступающих сообщений/обновлений? Мне нужно быстро отправить ответ юзеру и записать в БД его меседж.

[Anonymous]
02.05.2016
23:06:27
Fire and forget.

Google

[Anonymous]
02.05.2016
23:07:14
А вообще если это по поводу бота в телеге - то лучше вебхуки привязать.
Чем дёргать getUpdates.

Sergey
02.05.2016
23:09:26

[Anonymous]
02.05.2016
23:09:48
Тем более через очереди пусти, тебя же положить могут.

Sergey
02.05.2016
23:09:52

[Anonymous]
02.05.2016
23:10:06
Соединение с базой не открывай на приёме.
Я 5000 сообщений боту отправлю.
И он упадёт.

Alex
02.05.2016
23:10:21

[Anonymous]
02.05.2016
23:10:23
Fire and forget.

Roman
02.05.2016
23:11:08

Sergey
02.05.2016
23:11:45
Т.е. мне нужно все обновления закидывать в очередь. А как вообще реализуется очередь и как её обрабатывать?

Artem
02.05.2016
23:11:59

Google

[Anonymous]
02.05.2016
23:12:04
LPUSH - пульнуть в список слева.
BRPOP - взять справа.

Artem
02.05.2016
23:12:30
Ну да, или RPUSH

[Anonymous]
02.05.2016
23:12:31
А то если LPUSH BLPOP - это FIFO.
А то "хвост" собираться будет.
?
Ещё нужно смотреть в сторону BRPOPLPUSH.
Если у тебя какие-то вычисления которые могут оборваться.

Roman
02.05.2016
23:13:58

Artem
02.05.2016
23:13:59

[Anonymous]
02.05.2016
23:14:24
?
Но это потому что дохуя обновлений приходит.
Один тупо не справляется.
Например флуд какой-то идёт и у тебя и очередь может заткнуться.
А популярных ботов часто спамят.
Я видел как некоторые собирают всех ботов в одну группу.

Google

[Anonymous]
02.05.2016
23:15:12
И начинают спамить.

Artem
02.05.2016
23:15:16
А юзаешь какой-то фреймворк ботовый?

[Anonymous]
02.05.2016
23:15:18
Это вроде как чтобы всех сразу положить.

Sergey
02.05.2016
23:15:34

[Anonymous]
02.05.2016
23:15:34
Bot API элементарное.
sendMessage я могу отправить без фреймворка.
Зачем фреймворк - не ясно.

Sergey
02.05.2016
23:16:09

[Anonymous]
02.05.2016
23:16:20
К тому же я уверен, что там объектно-ориентированный интерфейс.
Это ещё к overhead'у.

[Anonymous]
02.05.2016
23:16:41
А мне (лично мне) нужно просто сообщения в очередь прохуяривать.
Как можно быстрее.
Видоизменяя входящий массив только минимально.
Т.е. я сообщения обрабатываю по сути уже в демоне.
Который с очередями работает.
А endpoint "голенький".
Там только persistent соединение с Redis и минимальная обработка входных.
(чтобы мусор не попал на всякий случай)

Google

[Anonymous]
02.05.2016
23:18:58
Я подумываю даже минимальную обработку перенести тоже на воркер, чтобы максимально снизить любые нагрузки на endpoint.
Кстати сообщения отправляются не из воркера, а прямо с endpoint'a, потому что, опять же, скорость.

Sergey
02.05.2016
23:19:26
Резюмируем:
- все входящие в очередь отдельным воркером
- несколько воркеров для обработки сообщений из очереди
- из очереди же сообщения попадают в постоянное хранилище

[Anonymous]
02.05.2016
23:19:26
Пока он долетит в очереди - пройдёт секунда, может две.
Python для обработки данных позволяет создавать по процессу на ядро.
Через multiprocessing или multithreading я уже не помню.
Вот я как раз создаю по воркеру на ядро.

Admin
ERROR: S client not available

Sergey
02.05.2016
23:20:32
Есть еще threading

Roman
02.05.2016
23:21:20

[Anonymous]
02.05.2016
23:21:45

Roman
02.05.2016
23:21:55
треды ускорят вас только на i/o

[Anonymous]
02.05.2016
23:21:57
У меня просто только большие железяки, я не измерял на маленьких.

Roman
02.05.2016
23:22:06
http://geekforbrains.com/post/after-a-year-of-nodejs-in-production

Sergey
02.05.2016
23:22:11
Предпологается пока что около 1000 юзеров/сутки

[Anonymous]
02.05.2016
23:22:32

Artem
02.05.2016
23:22:39
Лол, а мы тут уже придумали хайлоад

Sergey
02.05.2016
23:22:41

Google

Roman
02.05.2016
23:22:44
наш скромный бот проверяет кучу всего на вирусы.

[Anonymous]
02.05.2016
23:22:51
1000 юзеров в сутки выдержит обычный VPS.
Я думаю.
Это мало же.

Sergey
02.05.2016
23:23:25

Artem
02.05.2016
23:23:32

[Anonymous]
02.05.2016
23:23:40

Sergey
02.05.2016
23:23:44

[Anonymous]
02.05.2016
23:23:45
Скорее и 1 хватит.
Там ОЗУ не нужно.
Тебе процессор нужен.
Ты будешь с базой работать.
Я забыл.
Так что оперативка тебе в принципе особо не нужна.
А вот процессор и т.д. - очень важно.

Roman
02.05.2016
23:24:19
зачем там cpu?

[Anonymous]
02.05.2016
23:24:22
MongoDB вообще любит на 100% по рандому забивать процессор.
Какой ему понравится.

Sergey
02.05.2016
23:24:56