subject: Про IDEC
12.01.2018 11:54
Difrex(mobile) (tavern,23)
// Я попробую транслировать в сеть некоторые посты из своего бложика, если кто не против
IDEC - это протокол обмена сообщениями совместимый на базовом уровне с ii. Расшифровывается, как ii-like Data Exchange Convention.
Главная фишка его - это простота и возможность работать поверх чего угодно, например, ssh.
Но практически все реализации сейчас работают поверх http.
Цитата из документации(https://ii-net.tk/idec-doc/)
>Есть несколько серверов (грубо говоря, сайтов), за каждым из которых закреплены свои пользователи (поинты). Поинты пишут сообщения каждый на свой сервер.
>Через каждые 10-20 минут сервера скачивают друг у друга новые сообщения. В итоге на всю сеть одна общая база данных.
>Для установления цепочек синхронизации владельцы серверов сначала договариваются.
>Всё общение разделено на так называемые эхоконференции или эхи (см. терминология). Эха - это что-то вроде ленты твиттера или темы на форуме.
>Пользователи могут свободно подписываться на интересные им эхи и писать туда сообщения в пределах одной станции.
>Держатели серверов синхронизируют между собой (по общему согласию) самые популярные и нужные пользователям эхи, и сообщения оттуда расходятся по всей сети.
Так при отключении одного из серверов, сообщения останутся живы на других, что дает нам такие блага, как антицензурируемость и отказоустойчивость.
== Общение
В стандарте предусмотрена очень полезная фича, как /list.txt(это может быть на самом деле файл или путь в строке адреса в браузере).
На запрос list.txt сервер возвращает нам список эх(публичных) с описанием и количеством сообщений в них.
Так при первом попадании на сервер, клиент сможет сразу знать какие эхи он хочет читать.
Стандарт и все реализации серверов поддерживают создание эхи пользователем. Для этого нужно всего лишь написать в нее. Такая эха не
будет отображаться в list.txt и получить из нее сообщения можно, только зная название. Шифрования в стандарте нет, но это и не нужно,
ибо приносит только усложнение. Для приватного общения можно использовать скрытую эху и GPG.
Личных сообщений нет, но обсуждение стандарта идет. Можно начать с чтения [этого](https://dynamic.lessmore.pw/?j=FGOqT29oVwwBElTJNMjx) треда.
Каждое сообщение в сети уникально, т.е. ему присвается ID сгенерированный на основе суммы sha256 от контента. Это не спасает от спама,
но позволяет избежать коллизий в сети.
== Устройство сети
На протоколе IDEC чаще всего реализуют децентрализованную клиент-сервер сеть.
P2P не предусмотрено, но никто не мешает написать свое расширение, которое реализует P2P обмен.
Итак, рассмотрим топологию сети от простого к сложному.
Самая простейшая сеть выглядит так:
https://difrex.lessmore.pw/images/idec/idec1.png
У нас есть два клиента, которые обмениваются сообщениями через сервер. Оба клиента получают сообщения из одной и той же эхи.
Все централизовано и при смерти сервера клиенты больше не смогут общаться с друг дугом. Давайте добавим еще один сервер!
https://difrex.lessmore.pw/images/idec/idec2.png
Владельцы серверов договорились между собой обмениваться сообщениями эхи pipe.2032, теперь при выходе из строя одного из серверов
сообщения будут доступны на другом сервере.
Добавим еще сегмент сети
https://difrex.lessmore.pw/images/idec/idec3.png
У нас добавился еще один сегмент сети в котором происходит общение в эхах pipe.2032 и linux.14.
Так наш первый сегмент начинает обмениваться сообщениями со вторым. Добавим еще один сегмент.
https://difrex.lessmore.pw/images/idec/idec4.png
И еще
https://difrex.lessmore.pw/images/idec/idec5.png
Можно еще добавить связь между серверами внутри кольца и мы получим полностью децентрализованную сеть, которая реализует
распределенную базу данных.
IDEC позволяет строить любые топологии. Клиент может выступать так же и сервером и забирать сообщения сразу со всех серверов.
А простота протокола позволяет писать клиентов очень быстро.
В следующей статье напишем бота, который будет слать сообщения в указанную нами эху.
--------------------------------------------------------------------------------