Я добрался до докладов с недавней Go-конференции, прошедшей в Лондоне. Все видео с докладами доступны на YouTube. Я расскажу коротко о докладах, которые меня заинтересовали.
При просмотре видео с конференций неплохо себе напоминать, что докладчики зачастую работают в крупных компаниях и их опыт нерелевантен 80% индустрии (малый и средний бизнес).
Доклад меня привлек техническими деталями как написан этот 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Мб).
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) генерации отчета должен состоять из следующих этапов (предположим, что сообщения накапливаются в СУБД):
Впечатления от использования: