На интервью кандидаты постоянно путают эти два понятия, смешивая в кучу CAP теорему и транзакции баз данных. Давай раз и навсегда их разделим.
Linearizability (Линеаризуемость)
Это гарантия для одной операции или одного объекта. Она обеспечивает соблюдение реального временного порядка.
- Пример: Трейдер из Нью-Йорка покупает акцию. Трейдер из Токио должен увидеть изменение цены строго после того, как покупка реально произошла. Никаких путешествий во времени.
- Где живет: Это буква C в CAP-теореме. Относится к распределенным системам (ZooKeeper, etcd).
Serializability (Сериализуемость)
Это гарантия для группы операций (транзакций). Она гарантирует, что если транзакции выполняются параллельно, итоговый результат будет таким же, как если бы они выполнялись строго по очереди.
- Пример: Ты покупаешь сложный опцион на бирже (сначала проверяем баланс -> блокируем сумму -> покупаем актив А -> покупаем актив Б). Никто не должен вклиниться в середину этого процесса и изменить баланс.
- Где живет: Это буква I (Isolation) в свойствах ACID. Относится к базам данных (PostgreSQL, MySQL). Реализуется через механизмы блокировок (2PL) или снимков данных (MVCC).
Linearizability — про свежесть данных и время (никто не читает старье). Serializability — про изоляцию транзакций (никто не мешает друг другу).
Существует Strict Serializability, которое дает обе гарантии сразу.