Size: a a a

Network Neighborhood

2021 June 22

SM

Slava Maltsev in Network Neighborhood
А вообще, как верно заметили выше, select для мелких задачек - топ. И считывание с канала туда, и ловилку sigterm для graceful завершения)
источник

0

0xCAFED00D in Network Neighborhood
О, про sigterm тема классная, но если по чистой архитектуре пилить, тут уже вопрос, какую прослойку сделать)
источник

SM

Slava Maltsev in Network Neighborhood
Если бд монга можно контекст to do выбрать, правда нет гарантии что после записи сразу чтение прокнет.
Для постгри или мускула, хм, очереди, да, но тож могут переполниться :(
Я обычно сигналы тож на каналах пилю, мы на работе в докер пихаем, оно иногда падает и хоть перед падением успеваю скинуть очередь)
источник

SM

Slava Maltsev in Network Neighborhood
https://github.com/gorilla/websocket/tree/master/examples/chat
Вот тут можно посмотреть)
источник

0

0xCAFED00D in Network Neighborhood
У меня там прослойка вызывается, которая в транзакцию все запросы заворачивает используя Unit Of Work, короче архитектуры полные штаны, сижу вожусь теперь.

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

0

0xCAFED00D in Network Neighborhood
Да, спасибо, гляну)
источник

SM

Slava Maltsev in Network Neighborhood
Почитай ещё про RLock - офигенная вещь, обычный лок блокирует на запись, а этот на чтение, можно много читать изредка записывая, я так в мапу клиентов складыааю - чат при получении сообщения шлет всем - тут только читаю в рутине, а вот запись лочит рутину, да
источник

0

0xCAFED00D in Network Neighborhood
Хорошо, спасибо) Сейчас просто после достаточно долгой работы на пыхе, где всё приложение живёт только на время запроса тяжеловато на Go переходить, намного больше таких спорных моментов
источник

V

V in Network Neighborhood
То чувство, когда на эрланге такая задачка решается строчки в три, если пренебречь красотой синтаксиса
источник

0

0xCAFED00D in Network Neighborhood
А что под капотом происходит?
источник

V

V in Network Neighborhood
Даже в одну при желании, что-то типа
SomeFunction() -> receive AnyShit -> do(AnyShit), SomeFunction() end end.
источник

V

V in Network Neighborhood
А внутри у ней неонка виртуалка jit с 100500% оверхеда
источник

SM

Slava Maltsev in Network Neighborhood
Ни, ну эрланг зато офигенно удобен для апдейтов, да и те ж чат серваки на xmpp не зря робят, тож используем на проде для онлайн игруль
источник

0

0xCAFED00D in Network Neighborhood
Угу... В этом и проблема, потому что у меня тут сервис, к которому могут обратиться два клиента одновременно, и мне нужно сходить к базе, получить инфу, и исходя из полученной информации записать в неё. Можно решить банальной блокировкой базы, на время выполнения запроса, но вот только тут много оверхеда придётся пилить и не совсем бизнес-логике будет соответствовать. Имхо же поставить таск в очередь и выполнять такие таски по одному, будет наилучшим решением, а сам же Erlang вроде однопоточный, поэтому такой проблемы в нем похоже не будет
источник

V

V in Network Neighborhood
>Erlang
>Однопоточный
Чёт ору
источник

0

0xCAFED00D in Network Neighborhood
Хз, не знаю про него)
источник

V

V in Network Neighborhood
Он в многопоток мог ещё когда си# пешком под стол ходил
источник

0

0xCAFED00D in Network Neighborhood
Ну C# это вообще отдельная история, особо непонятно выглядит, когда его тащат как бэкэнд
источник

SM

Slava Maltsev in Network Neighborhood
Ни, оно наоборот умеет каждому запросу отдельную "рутину" заводить.
Но го тож неплох, мы, например дробим на сервисы максимальной простоты, а если люто много запросов - заводим редис, когда не вывозит (например в аналитике) - кафку
источник

V

V in Network Neighborhood
Го создали потому что хотели, чтобы эрланг мог в математику 😂
источник