Pull to refresh

Comments 8

"Подведем итог": столько много кода в таком простом приложение давно не видел. Возможно надо было сделать с помощью кафки? сразу -60-70% ручного труда и кода \ микросервисов если смотреть в сторону kafka streams

Так и на Lua/Tarantool эти приложения давно существуют, можно посмотреть на tarantool/queue или на moonlibs/xqueue.


Однако, во-первых, Kafka Streams — не одно и то же, что и описанная выше очередь, и может быть оверкиллом для ващей задачи, а во-вторых — создание своей реализации чего-то похожего на Kafka Streams не получится уместить в одну статью:)

local function gen_id()
    local new_id
    repeat
        new_id = clock.realtime64()
    until not box.space.queue:get(new_id)
    return new_id
end

Я так понимаю, что этот код работает, только по тому, что Tarantool однопоточный

Круто, особенно с горячей перезагрузкой кода, очень полезная возможность. Хотя, конечно, нужно проделать определенные танцы с бубном для ее использования.

А если целый кластер надо таким образом обновить, как тогда действуете?
Кластер выкатывается постепенно, по частям. Поскольку с другими частями системы взаимодействие идёт по API, то обновление на лету это API не ломает и обновление происходит незаметно.

Если же нужно выполнить breaking change, то выкатка выполняется в 3 этапа:
1. Выкатываем версию, которая поддерживает старое API и новое API. Выкатываем постепенно. Растянутость во времени не мешает, т.к. старая версия всё ещё работает. Если что-то идёт не так, можем откатить.
2. Выкатываем целевой софт, в котором меняем версию на новую. Поскольку поддерживаются обе версии, то проблем с длительностью выкатки нет.
3. Выкатываем версию, из которой просто удаляем роботу со старым API. Тоже ничто не мешает делать это постепенно.
А как этот код тестировать и версионировать?
Для этого в Tarantool существует экосистема инструментов. Вот туториал по созданию простого приложения — там все эти инструменты объясняются. Есть примеры тестов и способ их запуска.
Sign up to leave a comment.