CAP-теорема и разделение сети
Любой блог либо обновляется, либо мертв. Конечно, и этот блог тоже когда-то умрет, но время для этого еще не пришло, так что сегодня мы поговорим о CAP-теореме.
В вольной формулировке это звучит приблизительно так: «Любая распределенная система не может быть одновременно непротиворечива, доступна и устойчива к выходу из строя узлов». За подробностями отсылаю к русскоязчыной статье Ивана Сагалаева.
CAP теорема прекрасна тем, что позволяет взглянуть на многие сложные системы гораздо проще. Более того, она позволяет легко объяснить, почему создать систему, которая «будет правильно работать всегда», невозможно. Но все это было бы просто интересным поводом для размышления, если бы никак не применялось на практике.
Я иногда думал, как поведет себя та или иная система с точки зрения CAP-теоремы. Но совсем недавно наш иностранный коллега Kyle Kingsbury проделал, на мой взгляд, титанический труд и написал серию статей под общим названием «Jepsen», в которой он проверил, как ведут себя различные системы при разделении сети (network partition), а именно: PostgreSQL, Redis, MongoDB, Riak. Кстати, кто не обратил внимание, выход из строя одного узла — это частный случай разбиения сети. Более того, в рамках этой же серии, Кайл написал огромную статью, где на примерах из реальной жизни показывает, что это не голая теория, а часть повседневной инженерной работы. Хотя статья и большая, но читается как захватывающий детективный роман, каждый новый абзац рассказывает о том, что всегда может сломаться что-то, о чем никто никогда даже и не думал.
PS Кто еще не знает, 21 и 22 сентября в рамках образовательного проекта Злых Марсиан Brainwashing, космонавты из Экспресса 42 проведут мастер-класс по DevOps, где мы, в том числе, коснемся и CAP-теоремы. Читать мастер-класс будет локомотив DevOps движения в России Александр Титов, сверхмогущественный инженер, порабощающий линуксы легким движением брови, Никита Борзых и ваш покорный слуга. Приходите, мы вложили в этот мастер-класс весь наш многолетний опыт.