Devs World
480 subscribers
227 photos
15 videos
1 file
445 links
All about software developing & architecture
@ml_world - the best materials about Machine Learning & Data Science

Our fund instagram to help homeless animals: https://www.instagram.com/ukraineanimalhelp/

Contacts: @anikishaev | creotiv@gmail.com
Download Telegram
CRDT хорошо понимать не как "магическую eventual consistency", а как способ заранее определить такую структуру данных, которую разные узлы смогут менять независимо, а потом слить без конфликтов.

Возьмем OR-Set - Observed-Remove Set. Он нужен там, где несколько replica могут одновременно добавлять и удалять одни и те же элементы: collaborative apps, distributed caches, replicated metadata, shopping carts, multi-region storage.

Проблема обычного Set очень простая. Пусть replica A и B одновременно работают с элементом "x". A делает add("x"), а B - remove("x"). Потом сеть восстанавливается. Что должно победить?

OR-Set решает это не timestamp-ом, а уникальными тегами операций.

Когда A добавляет "x", она хранит не просто:

x

а, например:

(x, a1)

Если B независимо тоже добавит "x":

(x, b1)

Теперь множество логически содержит:

x -> {a1, b1}

Удаление работает хитрее. remove("x") удаляет только те теги, которые replica уже видела.
Devs World
CRDT хорошо понимать не как "магическую eventual consistency", а как способ заранее определить такую структуру данных, которую разные узлы смогут менять независимо, а потом слить без конфликтов. Возьмем OR-Set - Observed-Remove Set. Он нужен там, где несколько…
Допустим, A видит только a1 и делает remove("x"). Она удаляет a1, но b1, созданный параллельно на B, остается.

После merge:

x -> {b1}

То есть concurrent add побеждает remove.

Это не случайность, а выбранная семантика.

Для merge нам снова нужны свойства:

merge(A, B) = merge(B, A)

merge(merge(A, B), C) = merge(A, merge(B, C))

merge(A, A) = A

Именно commutativity, associativity и idempotency позволяют доставлять обновления в любом порядке, повторять их и переживать network partition без coordinator.

Интересная часть начинается с масштаба. Если один логический элемент добавляли N раз, у него потенциально может накопиться O(N) уникальных tag-ов. Значит, CRDT не отменяет стоимость согласования - он переносит ее из runtime coordination в metadata.

И вот это важный архитектурный trade-off.

Мы можем платить latency на каждой операции через lock, leader или consensus. А можем разрешить локальные изменения мгновенно, но платить памятью, metadata и сложностью garbage collection позже.

CRDT полезны не потому, что "работают без конфликтов". Они полезны потому, что превращают конфликт из runtime-события в заранее определенную алгебру данных.

#заметкиархитектора #история
👍1
Есть алгоритмы, которые особенно хорошо показывают разницу между "посчитать точно" и "решить задачу правильно". MinHash - как раз такой случай.

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

Самый прямой способ - взять два множества и посчитать Jaccard similarity:

intersection / union.

Если кошелек A взаимодействовал с 10 000 адресов, B - с 12 000, мы можем сравнить их множества напрямую. Для одной пары это не проблема. Для сотен миллионов пар начинается совершенно другая математика по CPU, памяти и времени.

Вот здесь появляется MinHash.

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

Вместо огромного множества у нас остается маленькая подпись - signature.
👍1👀1
Devs World
Есть алгоритмы, которые особенно хорошо показывают разницу между "посчитать точно" и "решить задачу правильно". MinHash - как раз такой случай. Представим блокчейн-систему, где у нас есть миллионы адресов, транзакций или наборов взаимодействий. Например,…
Например, исходный кошелек может иметь 50 000 взаимодействий, а его MinHash signature - всего 128 чисел.

Самое красивое начинается дальше.

Если две MinHash signature совпали в 100 позициях из 128, то Jaccard similarity исходных множеств будет примерно 100 / 128 = 0.78.

То есть мы не сравнивали десятки тысяч элементов. Мы сравнили 128 чисел и получили хорошую оценку того, насколько похожи два множества.

Почему это работает? Для одной случайной hash-функции вероятность того, что минимальный hash двух множеств окажется одинаковым, равна их Jaccard similarity. Повторяя эксперимент много раз, мы получаем статистическую оценку.

В blockchain это можно использовать для clustering адресов, поиска похожего поведения, анализа transaction patterns, группировки контрактов по множествам пользователей, обнаружения почти одинаковых datasets и предварительного отбора кандидатов для более дорогого анализа.

Важно понимать: MinHash не отвечает на вопрос "одинаковые ли эти кошельки". Он дешево отвечает на другой вопрос: "какие пары вообще стоит сравнивать подробнее?"

И это гораздо более полезная архитектурная роль.

За пределами blockchain MinHash встречается практически везде, где объект можно представить множеством. Поиск дубликатов документов через наборы shingles. Similarity web pages. Recommendation systems. Поиск похожих пользователей. Deduplication больших data lakes. Анализ логов. Сравнение наборов features. Поиск почти одинаковых файлов или записей.

А вместе с Locality Sensitive Hashing можно уйти еще дальше и не сравнивать каждую signature с каждой, а быстро находить только вероятно похожие объекты.

Мне вообще нравится этот класс алгоритмов за одну важную инженерную идею.

На больших данных правильный вопрос часто звучит не "как посчитать абсолютно точно?"

А "какую минимальную информацию нужно сохранить, чтобы с высокой вероятностью принять правильное решение?"

#заметкиархитектора
👍3👀1
Друзі, нам до кінця дня треба зібрати 12500грн на закупівлю ліків від ФІП. На рахунках нулі.

Зібрано 700грн

Від цих ліків залежить чи будуть котики завтра живі чи ні. Благаю вашої допомоги

https://send.monobank.ua/jar/9tbJNeWg6U
Продакт: "Це маленька фіча". Я: фотографія Оппенгеймера. Підпис: "Я бачив такі “маленькі фічі”."

#жартипроандрія
😁2
Продолжаю обучать ИИ видео монтажу
https://www.youtube.com/watch?v=gFxH2fhRlmc
Forwarded from Andrey Nikishaev
Друзі, терміново треба ще 32тис грн інакше тварин викинуть з клініки на смерть. В нас немає чим оплатити рахунки

Благаю вас

https://send.monobank.ua/jar/9tbJNeWg6U
❤1👍1
Я будую відмовостійкі системи. Коти тестують мене на відмову щодня.

Підписуйтесь на мої канали:
https://www.youtube.com/@MiiDosvid
https://t.me/devs_world
https://t.me/fe8courses

#жартипроандрія
👏1
Защита рождается из заботы, а не из насилия: почему государство без взаимности - это абьюз

Очень часто в спорах об "обязанностях перед государством" нам пытаются продать простую, но манипулятивную мысль: "Ты должен, потому что так написано в законе"

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

Откуда берется желание защищать?

Человек устроен просто: он защищает то, что искренне любит. Мы без раздумий готовы рисковать собой ради своего ребенка, семьи, близких или даже домашних питомцев. Нам не нужны приказы сверху или законы, чтобы встать на защиту тех, о ком мы заботимся и кто заботится о нас.

С государством работает абсолютно та же логика. Масштаб не меняет природы человеческих отношений:
💯4
Devs World
Защита рождается из заботы, а не из насилия: почему государство без взаимности - это абьюз Очень часто в спорах об "обязанностях перед государством" нам пытаются продать простую, но манипулятивную мысль: "Ты должен, потому что так написано в законе" Но давайте…
* Если страна становится для человека реальным домом, у него не возникает вопроса, почему он должен ее беречь.
* Но чтобы страна стала домом, она должна проявить элементарную человеческую заботу.

И речь не о пафосных лозунгах с трибун. Речь о простых, понятных вещах: как система относится к тебе, когда ты сломал ногу? Помогает ли она, когда ты потерял работу? Видишь ли ты уважение к человеческому достоинству на каждом шагу?

Это аналог "чашки чая, когда тебе плохо". Когда человек чувствует, что его жизнь действительно ценят, у него рождается естественное желание защищать эту среду. Он понимает: такое отношение уникально, и его стоит беречь.

Симптом абьюзивных отношений

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

Захочет ли сын его защищать? Нет. И это не предательство - это естественная реакция на жестокость.

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

Естественный отбор систем

Если коллектив держится исключительно на насилии, страхе и закручивании гаек, это говорит об одном: члены этого коллектива не видят в нем ценности.

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

Государство имеет моральное право рассчитывать на защиту только тогда, когда оно заслужило ее своей взаимной заботой. Все остальное - это попытка переложить ответственность и классический абьюз, где ценность человеческой жизни сведена к нулю.
💯8
Forwarded from Andrey Nikishaev
Продолжаю усовершенствовать свой MCP для Davinci Resolve.

Сегодня добавил вот такой полезний фильтр.

Может бить когда появятся деньги перейду на платную версию, там єто чуть проще все.

Ну а пока делаю так что би работало на бесплатной)
👍3
Сон важливий. Навіть коти вже зрозуміли, що я зламався.

Підписуйтесь на мої канали:
https://www.youtube.com/@MiiDosvid
https://t.me/devs_world
https://t.me/fe8courses

#жартипроандрія
❤1
В житті головне мати правильні пріоритети

Підписуйтесь на мої канали:
https://www.youtube.com/@MiiDosvid
https://t.me/devs_world
https://t.me/fe8courses

#жартипроандрія
😁3