Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kouzdra ([info]kouzdra)
@ 2010-08-13 23:48:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Распределенные блоговодческие хозяйства
Subj - тема, которая реулярно вознкает по поводу очередных ужасов кровавой гэбни или арбузной команды. Тут вот вдруг нафантазировалсь. Сразу говорю - поводом для фантазий был переход на GIT - распределенную систему управления версиями - так что все совпадения с неслучайны.


сеть представляет собой множество объектов, пользователей и репозиториев. Пользователь характеризуется уникальным id и возможность авторизации этого id.

объект - это либо файл с историей всех его изменений (как в любой vcs) или ассоциация между объектами (объект А ссылается на объект B), или метка (tag) или модуль.

Каждый объект имеет хозяина (и вероятно некий список тех, кто имеет право его модификации - пока можно считать, что только хозяин).

объект может быть удален - что выражается в изменении его статуса (при этом физически он не удаляется).

Модуль - множество объектов (фактически что-то вроде подкаталога).

Объект имеет уникальный идентификатор, первичный origin (репозиторий в котором он был впервые создан) набор вторичных origin-ов (последнее множество в каждом репозитории свое, но в частности в нем содержатся те сервера, через которые объект "вышел в мир" с хозяйского). Origin'ы задают сервера, куда есть смысл стучаться за апдейтами.

Операции: объект-файл можно создать, переименовать, удалить, изменить, сменить ему владельца.
Можно при синхронизации получить из другого репозитория его копию или апдейт, можно отдать его в другой репозиторий.

Объекты-ассоциации и тэги можно создавать и редактировать. !Чтобы создать ассоциацию или тэг связанный с объектом не нужно быть его владельцем. Нужно только иметь право на запись в свой репозиторий.

Модули в основном предназначены для структурирования множеств объектов и упрощения групповой работы с ними.


Тэги напоминают ассоциации и предназначены для классификации объектов и выборке по множеству тэгов.

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

Комментарий - отдельная объект, принадлежащий автору комментария + две связи - с постингом, к которому он относится и с комментарием, на который ответ.

Как это примерно работает:

У каждого пользователия есть локальный репозиторий, в котором есть копия соотвествующего модуля. Когда он пишет пост - он создает объект. После этого либо его репозиторий постоянно доступен в on-line, либо у пользователя есть 1-2 внешних сервера, которые поддерживают копию его репозитория и куда он может сливать изменения. Соответственно - он выполняет операцию push - и его пост появляется там. По мере синхронизации дальше его измениня распрострняются по сети.

Кроме того - у него есть копии тех репозиториев тех пользователей, ленты которых ему интересны и известны сервера, которые поддерживают клонирование этих репозиториев (аналог ф-ленты). таковыми могут быть online-сервера авторов соотвествующих блогов, или хосты, на которые эти блоги сливают авторы, или же какие-то аггрегирующие сайты, которые поддерживают более или менее все или крупные(например тематические) модули. Имея ссылку на объект процесс апдейта такой: выбирается наиболее удобный из вторичных origin'ов, получается соответствующий объект или модуль целиком, потом идет ссылка к первичному origin'у за актуальным апдейтом (если надо, конечно).

Если пишется коммент - асоздается соотвествующий текстовый объект и ассоциации. При синхронизации серверам, которые заданы как origin'ы послыается нотификация о их появлении - реакция по умолчанию - принять соотвествующие объекты.

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

Собственно в первом приближении все.

Чего хочется достичь: не столько защиты от кровавой гэбни или суперанонимности, сколько независимости от капризов авторов и хостеров и наличия полной истории изменений (в частности возможности посмотреть состояние на заданный момент времени):

1) вообще говоря, не существует способа удалить из системы то, что было в нее выложено и успело разойтись: это не бага, а фича.

2) не существует способа воспрепятствовать комментированию: если вам неприятен некий автор или некий комментарий - вы можете запретить его показ или распространение у себя на сервере: но не можете воспрепятствовать тому, что другим он с большой вероятностью будет виден.

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

В первом приближении все.

PS: Вообще говоря, блоговодство является частным применением - по идее также можно держать сайты etc. Для "больших" объектов видимо можно иметь альтернативный алгоритм распространения наподобие торрентов - когда файл берется со всех источников, в которых он доступен (вероятно, для этого достаточно просто его нарезать на куски и сделать модулем - дальше при вменяемом алгоритме распределения нагрузки при синхронизации вроде все должно получиться само).

PPS: Разумеется - некие гейты (в ЖЖ, LJR, возможно вики), возможность просмотра репозитория, как html-сайта, возможность импорта и апдейта внешних html-сайтов etc - это понятная техника.


(Добавить комментарий)


(Анонимно)
2010-08-13 23:55 (ссылка)
ничотак

(Ответить)

promonaut
[info]soldat31
2010-08-14 00:23 (ссылка)
С этим паном интересно тебе будет это обсудить.

(Ответить)


[info]i.dluciv.name
2010-08-14 01:00 (ссылка)
Тут дело такое: чтобы надёжно читать, аггрегировать у себя последние изменения должен именно конечный читатель. Ибо гэбня может успешно выпилить любимый гейт, и нужно будет срочно искать другой. Ну плюс для того, чтобы писать, требуется обладать минимальной пользовательской продвинутостью.

Думаю, что системы типа Freenet - более радикальное решение проблемы. За него конечно приходится платить космическими тормозами, зато и выпиливаемость у таких систем на порядок ниже.

(Ответить) (Ветвь дискуссии)


[info]kouzdra
2010-08-14 01:14 (ссылка)
Так речь и идет о том, что репозиторий с копиями нужных модулей живет вообще локально. Более того - во время синхронизации даже не онлайновый компьютер может отдать в сеть, то, что на нем есть. Чтобы реально выпилить что-то - надо выпилить все копии - иначе оно опять разойдется.

GIT, которым я вдохновлялся, так вообще имеет опцию почтовой синхронизации репозиториев - когда патчи рассылаются по почте. Там именно так - commit/checkout и вообще вся работа с собственно version control идет с локальным репозиторием без подключения к сети - а пересылка изменений между репозиториями делается отдельным протоколом. Обычно центральный сервер в GIT заводят, но технически это совершенно необязательно - и если он вдруг и навернется - то, что там лежало может быть восстановлено merge'ем репозиториев участников проекта (а если у кого-то есть актуальная копия - то просто ее клонированием на сервер).

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]i.dluciv.name
2010-08-14 01:30 (ссылка)
Я использовал для "похожих" целей mercurial (один хрен).

У меня когда-то был для личных целей репозиторий на общественном хостинге SVN, был, был, а потом сдох. Даже дамп слить не дал, падла. Ну последняя версия у меня была.

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

А теперь про блоги:

С одной стороны, в модели с RCS информация будет тупо дублироваться столько раз и в стольких местах, что выпилить её будет никак нельзя. При любом размере паяльника. Но при достаточно большом количестве народа в такой системе коммуникационная часть таки будет перегружена просто зверски.

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

А поскольку под пыткой сознаются всё равно не обязательно авторы, а "те, кто надо", то разницы нет, а любая беда становится общей =).

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2010-08-14 01:44 (ссылка)
А с чего ей быть перегруженной - imho, наоборот - снимается куча лишних пересылок - и пересылаются дельты, и сами синхронизации идут реже, чем при обычной online-работе. Плюс к этому нагрузка распределяется: скажем если взять трехуровневую структуру наверху "агрегатор всего"+ набор "нод", которые агрегируют автоматически только то, что нужно их пользователям (фактически - объединение их лент) + терминальные машины, которые в онлайн выходят принять-отправить - нагрузка тут будет меньше, чем на один центральный сервер - за счет того, что наборы модулей, которые нужны клиентам ноды будут в значительной степени пересекаться.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]i.dluciv.name
2010-08-14 01:50 (ссылка)
Ладно, с этим соглашусь пожалуй, неправ был.

А вот то, что при такой модели очень трудно скрыть свою личность - уязвимое место таки. Информацию выпилить никак, а автора - нефиг делать. Ну это отдельная тема. Я сам, например, не фанат писать вещи, под которыми не смог бы подписаться явно. Но я, с другой стороны, покровы не срываю и с кровавым режимом не борюсь, так что мне как-то странно было бы шифроваться. А вот для борцунов может быть полезно деидентифицироваться...

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2010-08-14 02:03 (ссылка)
Какую-то анонимность обеспечить несложно - например сделать origin'ы опциональными - они собственно нужну в основном как hint, откуда брать наиболее актуальные апдейты (ну и для восстановления целостности при сбое etc), равно как тут легко делается анонимайзер - какой-то узел ставится в другой юрисдикции и выкладывается через него.

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

(Ответить) (Уровень выше)

маргобляда
(Анонимно)
2010-08-14 09:10 (ссылка)
Настоящее имя дамочки - Людмила Ибрагимовна Уханова
(род. в г. Мытищи)

(Ответить)


[info]tristes_tigres
2010-08-14 15:16 (ссылка)
Получается что-то похожее на юзенет

(Ответить)


[info]ketmar
2010-08-15 04:23 (ссылка)
это ты заново FreeNet изобретаешь?

(Ответить)