185 похожих чатов

@Y0zhig @shizzard А можно я опишу цель и может вообще

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

Но как быть если задачу уже повзаимодействовала с внешним миром. Условно по tcp что-то отправила, сохранила ответ в переменную и упала?
Можно ли как то продолжить выполнение с этой точки в случае падения. И можно ли если упала вся нода кластера?

6 ответов

28 просмотров

Есть библиотеки которые это успешно делают. Но тут же всегда вопрос в том, что делать когда ты продвинулся дальше результата, какая нода будет исполнять с чекпоинта, как часто делать чекпоинт Как я понял, нужно чтобы контекст выполнения сохранялся при падении и потом исполнялся в другом месте (по возможности). Во-первых, это физически невозможно. Отказы бывают не только багами в коде, а бывают багами в рантайме, багами в ядре и просто выдернутой розеткой. Поэтому условный подход "ловить exception и сохранять стек" тут не работает в принципе. Во-вторых, перенести исполнение на другую ноду не возможно если, как вы пишете, вы читаете из TCP сокета. Сокеты привязаны к конкретному инстансу обычно. Можно попробовать поставить прокси перед сокетами и читать из разных инстансов, но это очень ненадёжно, потому что, во время передачи сокета другой ноде, клиент может просто отключиться. Но есть варианты, которые реализуют некоторый durability для вычислений и возможность исполнять их на разных нодах. Правда все эти либы на Elixir, но это считайте почти Erlang 1. Machinery. Это стейтфул акторы. То есть там все фичи обычных акторов Erlang, только они ещё транзакционно обновляют переходы между состояниями. Можно запустить такой под global (или swarm/horde/gproc/syn), например, и тогда при падении на одной ноде, он будет запускаться на соседней из стейта в базе. Для сценария передачи TCP сокета тут надо будет только самим реализовать общение с proxy и всё. 2. Oban. Это persistent job queue. То есть ты просто описываешь задачки, и они исполняются где-то в кластере. Тут уже сложнее смоделировать вашу задачу, но всё равно возможно, если описать взаимодействие с сокетом как последовательность задачек.

Да такой прокси совсем не сложно и на Erlang/Elixir сделать. Я говорил только что готового решения нет

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

Похожие вопросы

Обсуждают сегодня

лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
#include <stdio.h> #include <stdlib.h> #include <time.h> int** generate_table(int size_matrix) { int** matrix = (int**)malloc(size_matrix * sizeof(int*)); for (int i ...
Чувак
1
Яндекс маршрутизатор кто-нибудь использовал с своих проектах, чтоб через него маршруты составить/посчитать? Насколько простой/муторный сервис?
Dreamer_0x01 VeseloV
7
У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
В связи с "политическим дембелем" ms office кто нибудь пробовал работать с чем то импортозамещенным? Например, Р7. Т. е. задача открыть "импортозамещенный" шаблон, что то в н...
Alex
5
Карта сайта