Планируемая деятельность -- система передачи сообщений для PA

Чтобы интегрировать различные инструменты, которыми я пользуюсь, я хочу написать распределенную систему, которая будет принимать различные события (полученную почту, сообщения в телеграм, информацию от различных приложений), анализировать их и использовать различные способы связи со мной, чтобы выдавать мне те или иные сообщения. Существует большое количество различных low-code и no-code решений, которые позволяют организовать похожие вещи, но мне интересно реализовать это самостоятельно.

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

Таким образом я планирую заняться созданием системы передачи сообщений. Надсистемой является любая распределенная система, работающая на основе передачи сообщений, в частности мой (эфемерный) проект PA (Personal Assistant).

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

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

Одним из решений, которое удовлетворяло озвученным условиям, оказалось zeromq, поэтому я начал изучать его документацию. В ходе дискуссии с коллегами-программистами (тоже этап исследования) выяснилось, что zeromq сейчас признан устаревшим, а те же авторы разработали nanomsg (и еще более новую версию nng). К сожалению, для них нет готовых библиотек для связи с Common Lisp (этот язык был выбран для реализации прототипа, потому что захотелось), но можно опираться на более старые библиотеки, плюс попрактиковаться в создании таких библиотек для связывания.

Таким образом ближайшие этапы:

  • написать систему для передачи сообщения "hello, world" на языке Си
  • написать систему для организации защищенного канала связи (на языке Си)
  • написать библиотеку для работы с nng из Common Lisp
  • написать систему для передачи сообщения "hello, world" на языке Rust
  • изучить возможность передачи сообщений в nng-сокет без использования nng

Спасибо за пост!
По “распределенную систему”/Personal Assistant: в первом абзаце не очень хорошо прописано, зачем вам она нужна (вам нужна интеграция ради интеграции? или все-таки ради чего-то другого?). Надо немножко проработать предпринимательскую часть (даже если эта штука предполагается исключительно ради личного пользования – она довольно сложная, требует много инвестированного времени, так что вам нужно очень хорошее описание причин / потребностей / неуд-тей / возможностей).

К остальному по описанию вопросов нет, но опять-таки из-за того, что предпринимательская часть не проработана, и границы надсистемы ¶ не определены, непонятно, что именно должна делать выделенная ЦС (а что можно безболезненно отрезать). У вас также могут возникнуть сложности с реализацией, потому что непонятно, зачем надо-то. Пока выглядит как решение в поисках проблемы, которую решает (типичная инженерная ошибка в проектах).

Рекомендую волевым усилием ограничить применимость прототипа и таки явно назвать, зачем нужен PA, какие потребности закрывает. Тогда можно будет еще сузить и сделать яснее требования к PA и ее подсистемам.

Спасибо за комментарий. Действительно, границы PA не были отмечены, потому что на уровне фантазий это нечто такое, что “делает вообще все, что я захочу”. Например, по результатам окончания таймера pomodoro внутрь этой системы отправляется событие об этом, которое в свою очередь сопоставляется со списком задач, которые есть в моем инструменте планирования, после чего через telegram бот задает мне вопрос, инвестировал ли я это время в то, что нужно. И после моего ответа заносит информацию в систему учета времени.

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

Предыдущие попытки создать “рабочий продукт” упирались в непродуманность собственно инфраструктуры (и как раз тогда случилась блокировка Телеграм, из-за чего возникла необходимость распределенности). В данный момент функциональность бота ограничена только тем, что он примерно раз в час говорит “привет” и больше ничего не умеет. Но зато это уже распределенная система.

К вопросу “зачем нужна” основной ответ – just for fun. То есть потребителем инфраструктуры являюсь “я, желающий сесть и приделать еще что-нибудь интересное, просто ради процесса программирования”. Отсюда в частности возникло требование “не привязываться к языкам” (сформулированное в виде “чем больше языков я в этот зоопарк запихну, тем интереснее”). Если это развлечение еще и практическую пользу будет приносить, тем лучше. Сейчас я действительно не планирую эту систему далее чем “увидеть в telegram сообщение о том, что мне пришло письмо по электронной почте”.

Ага, ну тогда мб нет смысла именно практики системного мышления применять; вероятно, лучше оформить эту штуку как исследовательский проект. СМ не пропустит ответ “процесс ради процесса”, это все-таки про какое-то целенаправленное изменение мира, а не исследования просто по фану)

в таком случае может быть полезнее глянуть в сторону системноинженерных практик, тк тут важнее именно инженерная реализация. Можно посмотреть книжку Левенчука “Системноинженерное мышление” от 2015 года (пока еще не уволена), в SeBok заглянуть. Там именно системная инженерия, которая поможет точнее прицелиться в нужные инженерные практики (=отсортировать ненужное).