E pluribus unum
ДЖОН КЛЕЙНБЕРГ
Профессор компьютерных технологий, Корнелльский университет, соавтор (с Дэвидом Исли) книги Networks, Crowds and Markets: Reasoning About a Highly Connected World («Сети, толпы и рынок: рассуждения о взаимосвязанном мире»)
Если уже двадцать пять лет назад вы пользовались персональным компьютером, то все, с чем вам приходилось иметь дело, умещалось в пластиковом корпусе на вашем столе. Сегодня в течение часа работы вы используете приложения, рассеянные по компьютерам всего мира. По большей части мы уже не можем сказать, где вообще расположены наши данные. Мы придумали термины, чтобы выразить утраченное чувство ориентации в пространстве: наши сообщения, фото и профили находятся где-то «в облаке».
И облако – не единственный пример. То, что вы считаете своим аккаунтом в Google или в Facebook, на самом деле становится возможным благодаря слаженной работе огромного количества физически разнесенных в пространстве компонентов – системой с распределенными функциями, как это называют на языке компьютерных технологий. Но мы можем думать об этом как о чем-то едином, в этом-то и заключен смысл: системы с распределенными функциями применяются везде, где нужно, чтобы множество элементов независимо, но согласованно работали, производя иллюзию единого процесса. Это происходит не только в Интернете, но и во многих других областях. Возьмем, например, какую-нибудь большую корпорацию, выпускающую новые продукты. Хотя в рекламе фигурирует лишь название корпорации, понятно, что в ней работают десятки тысяч людей. Другой пример – большая колония муравьев, занятых совместной деятельностью, или нейроны головного мозга, создающие переживание текущего момента.
Задачей распределенной системы является создание иллюзии единого процесса, несмотря на всю внутреннюю сложность. Эта задача делится, соответственно, на множество подзадач.
Один из кусочков этого пазла – проблема согласованности. Каждый компонент распределенной системы получает собственную часть информации и имеет ограниченные возможности коммуникации со всеми остальными компонентами, поэтому у разных частей системы разное, подчас взаимоисключающее, «видение мира». Существует множество примеров того, как этот принцип может приводить к сбоям, – и в области технологий, и в других областях: ваш мобильный телефон не синхронизировался с электронной почтой, и вы не знаете, что уже получили ответ на свое письмо; два человека одновременно зарезервировали билет на один и тот же рейс, на одно и то же время, на одно и то же кресло 5F; топ-менеджер компании не получил своевременного доклада и поэтому принимает неверные решения; взвод разведчиков слишком рано обнаружил себя и спугнул противника.
Для нас естественно пытаться решить подобные проблемы, используя наше собственное цельное «видение мира» и требуя, чтобы все компоненты системы сверялись с этим видением, прежде чем действовать.
Но это сводит на нет множество преимуществ распределенной системы. Компонент, отвечающий за глобальное представление, становится «бутылочным горлышком», самым узким местом в системе, и сбои в этом месте могут привести к катастрофическим последствиям. Корпорация не сможет работать, если каждое решение должен одобрить исполнительный директор.
Чтобы получить более точное представление о проблемах подобных систем, давайте возьмем базовую ситуацию: мы хотим получить желаемые результаты, а информация и задачи распределены среди множества участников. Возникает проблема с безопасностью: попробуйте создать резервные копии важнейшей базы данных на множестве компьютеров, при этом защитив информацию таким образом, чтобы ее можно было восстановить, только если одновременно работает большая часть этих компьютеров. А поскольку проблема защиты информации возникает не только в случае компьютеров и Интернета, давайте поговорим о пиратах и их сокровищах.
Представим себе, что стареющий капитан пиратов один знает, где спрятан клад и, прежде чем отойти от дел, хотел бы поделиться секретом со своими пятью непутевыми сыновьями. Он желает, чтобы они смогли найти сокровище только при условии, что в поисках примут участие как минимум трое из них. При этом не присоединившиеся к этой группе один или два сына не должны найти клад самостоятельно. Пират решает разделить тайну клада на пять ключей и раздать эти ключи сыновьям таким образом, чтобы три любых сына, объединив свои ключи, нашли сокровище. Но если на поиски отправится только один или двое из них, у них будет недостаточно информации.
Как это сделать? Совсем нетрудно придумать пять ключей, которые все вместе раскрывают тайну сокровища. Но в этом случае для успеха предприятия потребуются согласованные действия всех пяти сыновей. Но как сделать так, чтобы любых трех ключей было достаточно, а любых двух – нет?
Как это часто бывает, ответ кажется простым, когда ты его уже узнал. Пират нарисовал на глобусе одному ему известную окружность и сказал сыновьям, что зарыл сокровища в самой южной точке этой окружности. После этого он дал каждому из сыновей координаты одной из пяти точек на окружности. Трех точек достаточно, чтобы провести через них одну-единственную окружность, поэтому любые три пирата могут поделиться друг с другом информацией и найти сокровища. Но двое этого не смогут, потому что через две точки можно провести бесконечное множество окружностей, так что определить местонахождение клада будет невозможно.
Это замечательное решение можно применить во многих областях. Варианты такой схемы являются основным принципом современной защиты данных, которую предложил криптограф Ади Шамир. Произвольный тип данных кодируют, привязывая к точкам на кривой, а для расшифровки требуются другие точки на той же кривой.
Литература, посвященная системам с распределенными функциями, изобилует подобными идеями. Если попытаться обобщить, принцип распределенных систем помогает нам справиться с трудностями, неизбежными в любых сложных системах, построенных на взаимодействии множества компонентов. И когда мы воспринимаем Интернет, глобальную банковскую систему или наш собственный чувственный опыт как нечто цельное, то полезно вспомнить о мириадах процессов, обеспечивающих для нас эту цельность.