Виктор Гришченко

Виктор Гришченко

Темы
Неделя
May 2, 2016 → May 8, 2016

Архив недели @gritzko

Понедельник


Контроль захватил @gritzko, distributed systems researcher, автор @swarm_js, Casual Trees CRDT и RFC7574. Пока меняю пароли и читаю приватки

Swarm - это как @apachekafka, только между клиентом и сервером. Шина синхронизации всего со всем. В том числе, реплицированная БД на клиенте

То есть, скачиваем кусок БД на клиента и работаем с ним локально. Читаем, пишем. Синхронизация/мерж автоматические. Offline, real time.

Проект в разработке, путь был тернистым. Классические БД построены на линейном логе, Swarm на частично упорядоченном - новая математика.

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

Тренд будет усугубляться. Тесла - айфон на колёсах. Процессор - это просто переплавленный песок. Кстати, про IoT+JS: youtu.be/zsJnsRGh8dE

Вторник


Опрос. Моё веб приложение сильнее всего выиграло/выиграет, если я добавлю...
🤔 21.0% serverside prerender
🤔 31.7% real time updates
🤔 15.9% data prefetch
🤔 31.4% offline work

Иду по дороге, вижу - подкова. Поднял, перевернул - а там конь. Это про разработку сложных систем

Среда


Побеждал offline, но ретвит @nikitonsky перетянул голосование в пользу real-time updates. Возможно, из-за tonsky.me/blog/the-web-a… ?

Иллюстрация к статье: у Твиттера одно и то же число в разных частях интерфейса имеет разные значения. 146% synced.
notion image

Собственно, @apachekafka и вырос из этой боли: на бэкэнде много разных БД, нужно их между собой синхронизировать. А есть ещё и фронтенд.

ППШ эффективен и надёжен, при этом прост. Хорошая система - простая система. #чтение #9мая vk.com/doc8787281_179…
notion image

Оружейники советской школы провели годы в полевых оружейных мастерских. Поэтому их конструкции исключительно просты в обслуживании и надёжны

Вопрос: в какие окопы отправить ребят из facebook?

Если этот твит наберёт 10 лайков, я расскажу @vmakhaev абсолютно всё, что знаю про номера транзакций, лампортово время и вектора версий.

Итак, самый простой способ обозначать версии—порядковый номер: 1,2,3. Так сделано в PostgreSQL, например. Просто и для локальной системы ОК

В распределенной системе трудно понять, кто 2, а кто 3. Поэтому в LWW системах типа Cassandra используют время (timestamp). NTP им в помощь.

Самые суровые timestamps—в Google Spanner. Он ACID, а не LWW, поэтому время там синхронизируется через спутник, чтобы гарантировать порядок.

Еще способ жить с порядковыми номерами в распр системе: координация, Paxos или Raft. Узлы долго договариваются, какая запись 2, а какая 3.

В 2007 в Яндексе мы с Галаховым случайно изобрели Paxos. Казалось просто. Хорошо, писать не стали. Там как УК РФ 131, 3 года содомии минимум

Еще вариант: хэши, как в git. Плюсы: уникальны, гарантия integrity. Минус: порядок (граф) нужно описывать отдельно. Так в CouchDB/pouchdb.

Лампортова модель. Если одним маркером можно изрисовать всё, кроме самого маркера, то двумя маркерами—абсолютно всё! en.wikipedia.org/wiki/Lamport_t…

Лампорт: нумеруем события парой (номер, процесс). Новое событие получает номер +1 от макс известного. Если номер одинаков–процесс разный.

Лампорт пишет, что его логическое время срисовано с теории относительности, поэтому зависит от системы отчета. Для распред.сист.–самое то!

Lamport timestamps, как и обычные номера/стампы, уникальны. Но увы, они показывают отношения "до-после" только для отдельного процесса.

То есть, (5,А) был после (4,А). А был ли он после (4,Б) или одновременно? Непонятно. Тут и становятся нужны Вовины любимые векторные версии.

Векторные версии (часы) - это конструкции вида [5А,4Б,4В,3Д], которые описывают конус прошлого по Минковскому
notion image

@avibryant @strlen Yes, very possibly. Basically what I can say definitely is that vector clocks are a failure as an end-user api.
Векторные часы используются внутри AP систем типа Amazon Dynamo или Voldemort, где их размер N, к-во серверов в с-ме twitter.com/jaykreps/statu…

В Swarm, где у каждого клиента есть своя реплика, N неимоверно больше. Это делает векторные часы не очень-то применимыми. Но и без них низя.

Четверг


Кому экосистема, а кому джунгли. Дай-ка ещё обойму. #nodejs

Кстати, кто-то успел побаловаться с virtual-dom? Какие впечатления? github.com/Matt-Esch/virt…

Если этот твит набирает 20 лайков, сегодня-завтра говорим про управление зависимостями. Я не про наркоту, а про git, npm, semver, zeit...

npm–детский сад по сравнению с git. git рассчитан на проект, а npm на экосистему. Но, в git хэш фиксирует все дерево кода побитно, а в npm?

В npm мы в лучшем случае верим честному слову @izs и что он не накосячил нигде. В теории, там можно ставить ссылки на git, конечно...

Это было бы ещё приемлемо с большими пакетами от известных авторов (типа от @facebook), тогда роль npm сводилась бы до хостинга.

Но для микропакетов механизм неадекватный. Ронахер отписался на тему развёрнуто lucumr.pocoo.org/2016/3/24/open…

@dominictarr I had strange idea of per-function dependency mgmt once. Hypertext of functions, all Merkle pinned. Cool, but is it any better?
С крипто на уровне git можно было бы "один пакет=один класс/функция" замутить даже. Но семвер+центральный репо это 👎 twitter.com/gritzko/status…

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

В этот солнечный майский день нужно быть на природе и слушать Джона Бон Джови youtube.com/watch?v=mafbPc…

Пятница


Видна аналогия между микросервисами, микропакетами и микроядром. Вспомним флеймвор Линуса Торвальдса и Э Таненбаума en.m.wikipedia.org/wiki/Tanenbaum…

Система слишком сложна 2. Распилим на маленькие простые кусочки 3. И как теперь разобраться в этих кусочках

Суббота


Ужастик про управление зависимостями на кластере. Фича реализована на трех уровнях: хранения, агрегации и фронта. Каждый - сотни серверов...

Работает неск версий кластера, части как-то друг друга находят. Порой не так. Результаты кэшируются на неск уровнях. "Умный" балансировщик.

В результате, невозможно понять, какой комбинацией версий кода получен наблюдаемый результат. Правки меняют результат случайным образом.

Интересный подход к микропакетам, который вроде никто не пробовал - совместить пакетный менеджер и систему контроля версий.

Потому что если JavaScript, один пакет = один файл, то их функции на 80% перекрываются. Добавим единое дерево файлов по типу Java пакетов...

...тогда юнит-тесты нужно включить в систему и фашистский семвер по методу Стефана Боннеманна.

Из TDD берем "тесты идут-значит, все работает", из Стефана: "если patch-level change ломает зависимости - коммитить нельзя".

Но, в принципе, такой коммунизм можно устроить в одном большом проекте, с кучей либ и таргетов. Интересно, где поломается...

Ценно, что каждую версию приложения и всех его зависимостей можно фиксировать одним хэшем -- их граф, по require(), это готовое Merkle tree.

Так же, возможен diff по всему дереву, с либами. А версиии можно менять у отдельных компонентов - в отличие от глобальных бранчей в git.

То есть, эффект распиливания отсутствует, зато гибкость присутствует. Осталось найти все подковы и грабли...

Воскресенье


Рыночная ниша node.js сильно отличается от того, что задумывал @ry. Зачем browserify или gulp асинх работа с сетью?
notion image

Помня, какого шухера наводили Windows-черви в 2000-х, воспринимаю это очень серьёзно infoq.com/news/2016/03/n… infoworld.com/article/304852…

Про червей. В 2001 N.Weaver написал, что умный червь, используя хитрые оптимизации, может заразить интернет за 15мин iwar.org.uk/comsec/resourc…

В 2003 очень простой, даже тупой, SQL Slammer заразил все уязвимые сервера в интернете за 10 минут en.m.wikipedia.org/wiki/SQL_Slamm…

Но эпидемии - это эффектный фейерверк, не более. Мне лично было плохо в 2006, когда хакер пролез в сеть организации

На этой неделе с вами был @gritzko. Итого, +70 фолловеров и один судебный иск от npm Inc. Всем спасибо за внимание!

Ссылки