Дискретната математика е пълна с малки неща, които изглеждат очевидни. Това е капанът.
Седиш в лекцията. Професорът чертае нещо на дъската. Инвариант е свойство P, което се запазва във всяка контролна точка на една операция. Записваш го, свиваш рамене, отиваш да пиеш кафе. И после, десет години по-късно, дебъгваш разпределена система в 2 през нощта... и чак тогава думата започва да означава нещо за теб.
Това е за версията на теб, която още е в лекцията.
Стълб в поле
Представи си стар каменен стълб, сам насред поле. Нищо около него. Нищо не му се случва.
Това ти дава учебникарското определение. Само стълба.
Професорът забрави бръшляна
Между другото, професорът ми беше чудесен. Учебникът не лъже. Картината просто е непълна.
Сега пусни бръшлян по стълба. Ластари, които дърпат камъка. Птици, които гнездят. Турист с маркер. Малко земетресение. Буря. Двеста години време.
Стълбът още е там. От негова гледна точка нищо не се е случило.
Това е инвариантът.
Сега прочети учебникарското изречение пак — свойство P, което се запазва във всяка контролна точка на една операция. Стълбът е свойството. Бръшлянът е операцията. Контролната точка е моментът, в който минаваш покрай него и поглеждаш. Запазва се е просто дългият начин да кажеш, че на стълба не му пука за бръшляна.
Къде ще продължиш да го срещаш
Щом веднъж имаш стълба, започваш да го виждаш навсякъде.
Инвариант на цикъл. Тялото на цикъла е бръшлянът. Твоят инвариант е стълбът. Тялото може да го наруши за миг, като ластар, който дърпа камъка. До следващата контролна точка стълбът пак е там, където е бил.
Транзакция в база данни. Между BEGIN и COMMIT данните могат да правят гимнастики. ROLLBACK е градинарят, който идва и откъсва бръшляна. Стълбът — твоето съгласувано състояние — още стои.
ACID. Външни ключове. Типови системи. Разпределени повторни опити. Всички са стълбове. Всички стоят в собствения си бръшлян.
Стълб, който можеш да прегърнеш
Малък бонус, понеже още четеш.
Има едно роднинско понятие, наречено идемпотентност. Идемпотентна операция е нещо, което можеш да направиш много пъти и резултатът е същият като да го направиш веднъж. Да извикаш ROLLBACK десет пъти е същото като да го извикаш веднъж. Да зададеш ключа на лампата на "on" десет пъти е същото като да го зададеш веднъж.
Ако инвариантността е стълбът, който не се променя, докато бръшлянът вилнее, тогава идемпотентността е стълбът, който можеш да прегръщаш колкото пъти искаш, и той няма нищо против.
Сложи двете заедно и получаваш златния стандарт за отказоустойчиви системи. Мрежата прекъсва? Повтори. Сървърът се срива? Повтори. Накрая ще стигнеш до валидно състояние и можеш да продължаваш да повтаряш, без да счупиш нищо.
Стълб, който преживява бръшляна и преживява да бъде прегърнат хиляда пъти. Голяма част от съвременната инфраструктура е тихо построена върху това.
Малък финал
Това е картината, която ми се иска някой да беше нарисувал за мен преди десет години.
Не е много. Един образ. Но понякога един образ е разликата между понятие, което живее в костите ти, и понятие, което живее в бележка под линия.
Ако си студент, или младши инженер, или просто човек, който от известно време тихо кима при думата "инвариант"... това е за теб.
На стълба не му пука за бръшляна. Това е цялата работа.
От един аутсайдер към друг.

Коментари