RSS Telegram YouTube Apple Яндекс Spotify Amazon Почта

70. Elvish, Temporal

29.09.2024

Скачать

К списку выпусков

Ссылки выпуска:

Я добрался до докладов с недавней Go-конференции, прошедшей в Лондоне. Все видео с докладами доступны на YouTube. Я расскажу коротко о докладах, которые меня заинтересовали.

При просмотре видео с конференций неплохо себе напоминать, что докладчики зачастую работают в крупных компаниях и их опыт нерелевантен 80% индустрии (малый и средний бизнес).

Elvish - шелл нового поколения

Доклад меня привлек техническими деталями как написан этот shell. Я и сам писал свою оболочку в студенческие годы, когда изучал POSIX-стандарты и соответствующее API. Если хотите написать свою оболочку или разобраться в работе существующих, то это отличный доклад.

Командные оболочки нового поколения - это скорее языки программирования, чем toolbox. Герой этого эпизода - Elvish. Скрипты на "эльфийском" шелле читать проще, чем на bash/sh особенно, если вы знакомы с Go. Elvish поддерживает массивы и хеш-таблицы как структуры данных. В традиционных оболочках любые структуры данных - это в первую очередь текст с разделителями, который нужно как-то особенно парсить. Также в elvish включены функции из Go SDK для работы с текстом, регулярными выражениями, путями в FS, сигналами, флагами, файлами и т.д.

Понять нравится вам язык или нет быстрее всего можно заглянув на официальный сайт, на страничку "Scripting case studies". Мне также понравилось, что в elvish включен файловый менеджер (Ctrl-N), визуальная навигация по истории директорий (Ctrl-L) и истории (Ctrl-R).

Я редко пишу скрипты на shell, но каждый раз когда приходится это делать, то вызывает страдания. Подумываю перейти на оболочку нового поколения вроде elvish и ставить её в том числе на сервера (экстра 10Мб).

EDA - Event Driven Architecture

Luno - платформа для криптоинвесторов. Пользовательская база приложения: более 13 миллионов. В основе работы Luno EDA, т.е. событийно-ориентированная архитектура.

Во-первых, что такое EDA?

EDA - is a design paradigm where systems react to changes in state or specific updates, known as "events", by triggering their own execution in response to these events.

EDA можно противопоставить polling-модели, в которой нужно получать следующий пакет данных для обработки. В EDA в среднем время между появлением события и его обработкой минимально.

Докладчик презентов их собственных продукт luno/workflow, аналог temporal, о котором сегодня и поговорим.

Важно! Событийно-ориентированная архитектура сложна. Избегайте её до того момента, когда она абсолютно неизбежна. Вы будете часто видеть слова "modern" и "distributed systems" вместе, потому что эти архитектуры дорого продаются и выгодны менеджерам по продажам. Не позволяйте себя ввести в заблуждение. Распределенные системы решают задачи распределения пользовательской нагрузки, но вместе с тем привносят ряд проблем.

Итак, что такое temporal? В недетерминированных процессах результат точно предсказать нельзя при одних и тех же входных данных: есть ли в доступе файловая система, каково будет время ответа удаленного сервера, будет ли доступно достаточно оперативной памяти и т.д.? Как решить проблемы при возникновении таких ситуаций? Вариантов два: повтор операции, возвращение к исходному состоянию. Повысим градус сложности и представим, что наш процесс (workflow) состоит из цепочки таких действий (activity функций). И нас интересует чтобы процесс выполнился до своего завершения. Т.е. нужна оркестрация (управление) такими действиями.

temporal - это middleware, который предлагает инструменты надежного выполнения процессов (workflows).

Коротко, temporal - сервер, связывающий по protobuf (protocol buffers) воркеров и их клиентов. Воркеры нацелены на выполнение всех действий многоступенчатого процесса (workflow).

Чем это отличается от обычной очереди?

Предположим, мы хотим сделать телеграм-бот по чтению телеграм канала (поток текстовых сообщений), формированию саммари (отчет) за день и генерации аудиосообщения с ключевыми темами, которые обсуждались. Наш процесс (workflow) генерации отчета должен состоять из следующих этапов (предположим, что сообщения накапливаются в СУБД):

Впечатления от использования: