
ShadoWalkeR
20.06.2018
11:24:33
Если идти дальше по конкретике - как у вас хранится эта почта. Сервис использует какую то БД? Если да - как организовано взаимодействие? Какую нагрузку на сервер он создает? на систему? Как часто отправляется почта - при появлении письма или по расписанию? И тд

Felix
20.06.2018
11:30:09

ShadoWalkeR
20.06.2018
11:33:01
Как и откуда он данные по изменениям забирает. Тоже самое по письмам, или генерирует? Маркирует ли он как то что задание обработано?

Alex
20.06.2018
11:33:44

Google

Alex
20.06.2018
11:33:58
особенно если воркеры спавнят подзадачи

ShadoWalkeR
20.06.2018
11:33:59
И как часто происходит отправка?
Верней так - как часто на текущей нагрузке приходится отправлять письма?
И как часто остальные клиенты генерируют события на отправку? Это кстати можно измерить сделав аналогичное приложение но без отправки почты клиентам.

Felix
20.06.2018
11:50:40

Alex
20.06.2018
11:51:57
колбэки в моделях
???
вечно с ними проблемы какие то

Felix
20.06.2018
11:54:44

ShadoWalkeR
20.06.2018
11:55:08
?

Alex
20.06.2018
11:55:12
что то вспомнил как проект встал когда очередь забилась

ShadoWalkeR
20.06.2018
11:55:15
100-150 писем

Google

Felix
20.06.2018
11:55:26

ShadoWalkeR
20.06.2018
11:56:25

Alex
20.06.2018
11:56:40
очереди замечательно масштабируются
а вот база - не очень.
❤️❤️
причем у большинства этих проблем никогда не будет.

Felix
20.06.2018
11:57:38

Alex
20.06.2018
11:57:48
приложение в вебсервере крутится не?

Felix
20.06.2018
11:58:24

Alex
20.06.2018
11:58:48
в чем предпочтительнее чтобы работал автомобиль? слишком размыто
какой сервер, где крутится, какие нагрузки

ShadoWalkeR
20.06.2018
11:59:57
У нас когда авария была крупная, нагрузка выросла в 5 раз и 3 сервера просто заткнулись по процессору и памяти изза звонков. Пришлось срочно с тестового стенда брать сервера и в строй вводить из - вот это проблема с производительностью. А у вас детский сад

Alex
20.06.2018
12:00:10
пиздец
я бы охуел стейжинг в прод переводить

ShadoWalkeR
20.06.2018
12:01:18
"Я не знаю как оно сейчас грузит, как оно будет грузить после перевода в прод, но скажите мне как решить мою проблему, которой возможно не будет"

Felix
20.06.2018
12:02:19
Неправильно сформулировал вопрос) в общем, если рассматривать на примере сайдкика — стартует код сам сайдкик. А в случае очереди сообщений, что лучше использовать? Rack-ом как-то запускать?

Alex
20.06.2018
12:03:52
какой очереди сообщений?
все засунуть в очередь сайдкик
недавно читал что если тяжелые воркеры в свою очередь будут спавнить воркеры - это хорошо.

Google

Alex
20.06.2018
12:04:22
(хотя спорно)
а вообще у сайдкика есть вебморда и пул воркеров. Один пул воркеров это физический процесс рубей, а значит хоть там и много воркеров но работать хорошо будут только высоко конкурентные задачи
также как и у ноды например.
Только у руби с асинхронностью плохо поэтому просто плодят побольше потоков.
Впрочем никто не мешает держать несколько пулов sidekiq с разными приоритетами (один почту обрабатывает например, а другой все остальное)

Roman
20.06.2018
12:09:37

Felix
20.06.2018
12:09:44

Alex
20.06.2018
12:10:00
так и делаем
у меня так не делали пока петух жареный не клюнул

Roman
20.06.2018
12:10:11
так обычно и бывает

Alex
20.06.2018
12:10:13
правда я там уже не работаю, но не по этому.

Roman
20.06.2018
12:10:47
не

Alex
20.06.2018
12:11:17
не
а как при автодеплое запускаете пулы?
я чет все позабыл уже ((

Roman
20.06.2018
12:11:31

Alex
20.06.2018
12:12:06
Я тут ищу адекватную схему запуска пумы после перезагрузки, пока что смотрю в сторону systemd --user
ну и других процессов тоже, того же sidekiq или бота.

Alex
20.06.2018
12:13:26
Я в systemd делал

Alex
20.06.2018
12:13:59
а апдейтишь конфиг юнита ручками?

Google

Alex
20.06.2018
12:14:24
и в sudo исключение добавил для автоперезапуска?

Alex
20.06.2018
12:15:26
Добавил пользователю возможность перезапуска systemd puma без sudo, конфиг редко и руками получается

Alex
20.06.2018
12:15:44
т.е юзаешь systemd --user?

Alex
20.06.2018
12:15:49

ShadoWalkeR
20.06.2018
12:31:12

Alex
20.06.2018
12:32:19


ShadoWalkeR
20.06.2018
12:32:42
[Unit]
Description=
After=network.target
[Service]
Type=forking
GuessMainPID=yes
User=
Group=
# If not use forking and GuessMainPID options
# PIDFile=/run/%p.pid
ExecStart=
ExecStopPost=/bin/rm -f $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
Так же проще
Это шаблон для засовывания в systemd чего либо. Его, правда, придется допиливать под приложение, поскольку все предусмотреть нельзя
Но представление дает.
Просто потом можно вот так делать:
systemctl status callManagerREST
● callManagerREST.service - Queue module that work with redis, mysql and kamailio for forming call to agents via REST API
Loaded: loaded (/etc/systemd/system/callManagerREST.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-06-20 17:28:27 +05; 7min ago
Process: 11765 ExecStop=/bin/bash -c /usr/bin/env ruby $VOIP_BIN/callManagerREST.rb stop (code=exited, status=0/SUCCESS)
Process: 11829 ExecStart=/bin/bash -c /usr/bin/env ruby $VOIP_BIN/callManagerREST.rb start (code=exited, status=0/SUCCESS)
Process: 11825 ExecStartPre=/usr/bin/env ruby -v (code=exited, status=0/SUCCESS)
Tasks: 4 (limit: 4915)
Memory: 36.1M (limit: 512.0M)
CPU: 646ms
CGroup: /system.slice/callManagerREST.service
├─11879 callManagerREST
└─11880 callManagerREST_monitor


Alex
20.06.2018
12:38:09
@ShadoWalkeR31 systemd --user это насколько я понимаю теже юниты только от лица конкретного юзера
у меня просто деплой в хомяк и запуск тоже от того же юзера

ShadoWalkeR
20.06.2018
12:39:31
Может я не совсем понимаю - после деплоя вызывается команда systemd —user run приложение?
А все - посмотрел вывод команды
Если у тебя приложение крашнется что произойдет? Я просто с самой командой systemd не работал - сразу service файлы стал использовать

Alex
20.06.2018
12:42:06
оно поидее рестартиться должно
причем тут команда )) такой же юнит поидее

ShadoWalkeR
20.06.2018
12:43:31
Если я правильно понял он запустит чтото типа screen - надо будет справку почитать)

Alex
20.06.2018
12:43:52
он запускает user процесс systemd который хэндлит юниты

Google

Alex
20.06.2018
12:43:54
если ничего не путаю

ShadoWalkeR
20.06.2018
12:45:37
Скорее всего с какими то дефолтными вещами.
Можешь попробовать systemct list-units сделать и поискать там свой сервис
Потом systemctl cat %имя сервиса%
Ну и systemctl show/status %имя сервиса%

Alex
20.06.2018
12:46:05
в плане дефолтными вещами? ))

ShadoWalkeR
20.06.2018
12:46:28
Там набор опций существенно больше в настройке сервиса)

Alex
20.06.2018
12:46:34
естественно

ShadoWalkeR
20.06.2018
12:47:04
Просто в примере выше - я сразу лимит памяти назначаю для сервиса
Еще он у меня в случае падения/рестарта в заббикс уведомления шлет
Кроме того у меня все через rvm работает - я подгружаю файл с переменными окружения, сформированный для руби/гемсета, которое это приложение должно использовать

Alex
20.06.2018
12:49:25
у меня тоже rvm

ShadoWalkeR
20.06.2018
12:49:50
У меня он не по дефолту) Тут некая предвзятость в организации к нему ?

Alex
20.06.2018
12:49:59
по дефолту в смысле?

ShadoWalkeR
20.06.2018
12:50:07
Пришлось извернуться)
У меня системный руби по дефолту

Alex
20.06.2018
12:50:22
а в хомяке rvm
ибо нефиг rvm делать ничего за пределами хомяка
rvm на уровне системы - садомазо

ShadoWalkeR
20.06.2018
12:50:59
А у меня в системе - один на всех. Просто подцепить его просто так нельзя)
Да все нормально, если умеючи))))