gritzko

2 мая 2016, Екатеринбург, Россия

# Понедельник 8 твитов

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

9:55

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

10:28

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

10:29

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

10:32

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

10:41

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

10:48
This awesome service offers instant deploys of any Node app thenextweb.com/insider/2016/0… pic.twitter.com/BNfJizPRw6
9:57

P.S. С now ещё никто не баловался? Занятно, что на каждую версию пакета свой URL. Если зав-сти pinned, то очень ОК. От авторов @SocketIO

9:57

# Вторник 2 твита

Опрос. Моё веб приложение сильнее всего выиграло/выиграет, если я добавлю...

6:33

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

11:55

# Среда 26 твитов

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

2:37

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

3:06

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

3:20

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

5:23

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

5:29
Marc was almost ready to implement his "hello world" React app pic.twitter.com/ptdg4yteF1
5:30

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

5:40
@jsunderhood в окопы с медленным, очень медленным и ненадежным интернетом. Для начала.
6:48

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

7:22

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

8:11

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

8:14

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

8:19

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

8:23

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

8:38

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

9:20

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

12:23

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

12:32

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

12:36
@jsunderhood Использовал года пару лет назад для синхронизации сервера с клиентом. В принципе взлетело :) Хорошо ложится на event sourcing.
12:53

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

12:58

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

13:00
@jsunderhood это всё хорошо и интересно. Дак а чем векторные версии плохи? И какие рекомендации/примеры по созданию упорядоченных структур?
13:00

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

14:33
@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, к-во серверов в с-ме

@avibryant @strlen Yes, very possibly. Basically what I can say definitely is that vector clocks are a failure as an end-user api.

14:36

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

14:38

@jsunderhood P.S. не N, а "в худшем случае N"

19:59

# Четверг 17 твитов

8 видео с секции FrontTalks на DUMP: БЭМ, React, CSSO отладка, баги, гриды, тесты, спорт — youtube.com/playlist?list=… pic.twitter.com/6xAlazVTao
4:53

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

8:39

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

8:41

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

9:14
The difference between an easy model and a complicated one
bit.ly/1SBYQGV pic.twitter.com/Nj5JaoxfxA
9:15

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

11:28

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

11:37

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

11:39

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

11:41
@dominictarr I had strange idea of per-function dependency mgmt once. Hypertext of functions, all Merkle pinned. Cool, but is it any better?

С крипто на уровне git можно было бы "один пакет=один класс/функция" замутить даже. Но семвер+центральный репо это 👎

@dominictarr I had strange idea of per-function dependency mgmt once. Hypertext of functions, all Merkle pinned. Cool, but is it any better?

11:46

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

11:47
довольно интересно, особенно, чтобы не тянуть react ради одной фичи. хотя, конечно, приходится флоу писать руками

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

11:56
@jsunderhood но ты же хочешь зависеть от версий все-таки? Получать патч релизы автоматом (если не ломают ничего). Это две крайности...
11:58
@jsunderhood related: интересный тред от создателя Erlang: erlang.org/pipermail/erla… "why do we need modules at all?"
12:05

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

13:26
@jsunderhood конечно. В целом, построение отдельной сущности "патч", а затем ее наложение на реальный dom, красивая, но не самая крутая идея
15:18

# Пятница 4 твита

@jsunderhood но что же все таки делать с микропакетами...
5:24
Thanks again to Twitter friends who helped me research my web obesity talk. I’ve put up the text version here idlewords.com/talks/website_…
5:47

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

6:47

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

6:58

# Суббота 11 твитов

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

4:23

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

4:26

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

4:27

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

12:51

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

12:56

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

13:01

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

13:04

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

13:06

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

13:18

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

13:30

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

13:36

# Воскресенье 7 твитов

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

5:16

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

11:50
@jsunderhood Express там, как раз в тему. Остальное это в основном приватные проекты с АПИ, не модули.
11:53

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

12:01

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

12:03

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

12:04

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

12:32

other