Задачей распределенной системы является создание иллюзии единого процесса, несмотря на всю внутреннюю сложность. Эта задача делится, соответственно, на множество подзадач.
Один из кусочков этого пазла – проблема согласованности. Каждый компонент распределенной системы получает собственную часть информации и имеет ограниченные возможности коммуникации со всеми остальными компонентами, поэтому у разных частей системы разное, подчас взаимоисключающее, «видение мира». Существует множество примеров того, как этот принцип может приводить к сбоям, – и в области технологий, и в других областях: ваш мобильный телефон не синхронизировался с электронной почтой, и вы не знаете, что уже получили ответ на свое письмо; два человека одновременно зарезервировали билет на один и тот же рейс, на одно и то же время, на одно и то же кресло 5F; топ-менеджер компании не получил своевременного доклада и поэтому принимает неверные решения; взвод разведчиков слишком рано обнаружил себя и спугнул противника.
Для нас естественно пытаться решить подобные проблемы, используя наше собственное цельное «видение мира» и требуя, чтобы все компоненты системы сверялись с этим видением, прежде чем действовать.
Но это сводит на нет множество преимуществ распределенной системы. Компонент, отвечающий за глобальное представление, становится «бутылочным горлышком», самым узким местом в системе, и сбои в этом месте могут привести к катастрофическим последствиям. Корпорация не сможет работать, если каждое решение должен одобрить исполнительный директор.
Чтобы получить более точное представление о проблемах подобных систем, давайте возьмем базовую ситуацию: мы хотим получить желаемые результаты, а информация и задачи распределены среди множества участников. Возникает проблема с безопасностью: попробуйте создать резервные копии важнейшей базы данных на множестве компьютеров, при этом защитив информацию таким образом, чтобы ее можно было восстановить, только если одновременно работает большая часть этих компьютеров. А поскольку проблема защиты информации возникает не только в случае компьютеров и Интернета, давайте поговорим о пиратах и их сокровищах.
Представим себе, что стареющий капитан пиратов один знает, где спрятан клад и, прежде чем отойти от дел, хотел бы поделиться секретом со своими пятью непутевыми сыновьями. Он желает, чтобы они смогли найти сокровище только при условии, что в поисках примут участие как минимум трое из них. При этом не присоединившиеся к этой группе один или два сына не должны найти клад самостоятельно. Пират решает разделить тайну клада на пять ключей и раздать эти ключи сыновьям таким образом, чтобы три любых сына, объединив свои ключи, нашли сокровище. Но если на поиски отправится только один или двое из них, у них будет недостаточно информации.
Как это сделать? Совсем нетрудно придумать пять ключей, которые все вместе раскрывают тайну сокровища. Но в этом случае для успеха предприятия потребуются согласованные действия всех пяти сыновей. Но как сделать так, чтобы любых трех ключей было достаточно, а любых двух – нет?
Как это часто бывает, ответ кажется простым, когда ты его уже узнал. Пират нарисовал на глобусе одному ему известную окружность и сказал сыновьям, что зарыл сокровища в самой южной точке этой окружности. После этого он дал каждому из сыновей координаты одной из пяти точек на окружности. Трех точек достаточно, чтобы провести через них одну-единственную окружность, поэтому любые три пирата могут поделиться друг с другом информацией и найти сокровища. Но двое этого не смогут, потому что через две точки можно провести бесконечное множество окружностей, так что определить местонахождение клада будет невозможно.
Это замечательное решение можно применить во многих областях. Варианты такой схемы являются основным принципом современной защиты данных, которую предложил криптограф Ади Шамир. Произвольный тип данных кодируют, привязывая к точкам на кривой, а для расшифровки требуются другие точки на той же кривой.
Литература, посвященная системам с распределенными функциями, изобилует подобными идеями. Если попытаться обобщить, принцип распределенных систем помогает нам справиться с трудностями, неизбежными в любых сложных системах, построенных на взаимодействии множества компонентов. И когда мы воспринимаем Интернет, глобальную банковскую систему или наш собственный чувственный опыт как нечто цельное, то полезно вспомнить о мириадах процессов, обеспечивающих для нас эту цельность.
Проксемика[9] городской сексуальности
СТЕФАНО БОЭРИ
Архитектор, Технический университет Милана, приглашенный профессор Высшей школы дизайна Гарвардского университета, главный редактор журнала Abitare
В каждой комнате, в каждом доме, на каждой улице и в каждом городе движения, взаимосвязи и пространство определяются с учетом логики сексуального притяжения и отталкивания. В огне сексуального исступления внезапно исчезают даже самые непреодолимые этические или религиозные барьеры; без эротического напряжения быстро распадутся самые дружелюбные и сплоченные сообщества. Чтобы понять, как работает наш космополитический и полигендерный город, нам нужна проксемика городской сексуальности.
Неудачи открывают путь к успеху
КЕВИН КЕЛЛИ
Колумнист журнала Wired, автор книги What Technology Wants («Чего хочет технология»)
Из неудавшегося эксперимента мы можем почерпнуть столько же, сколько из удавшегося. Не нужно избегать неудач, нужно их искать. Это хорошо знают ученые, но это касается не только лабораторных исследований, но также дизайна, спорта, инженерного дела, искусства, бизнеса и даже повседневной жизни. Творческий путь, усеянный ошибками, приводит к успеху. Хороший разработчик графического дизайна придумывает огромное количество решений, зная, что большая часть из них будет отброшена. Хороший балетмейстер понимает, что большая часть новых па окажутся неудачными. То же касается любого архитектора, инженера, скульптора, марафонца или микробиолога. В конце концов, что же такое наука, как не способ познания мира путем отбрасывания того, что не работает? Поэтому, стремясь к успеху, нужно быть готовым учиться на ошибках. Более того, нужно осторожно, но осознанно подталкивать свои успешные исследования или достижения к той точке, в которой они будут повержены, потерпят фиаско, крах, поражение.
Неудача не всегда так воспринималась. Сегодня во многих странах неудачу все еще не считают чем-то достойным. Часто ее подают как признак слабости и клеймо, лишающее второго шанса. Во многих странах детей учат тому, что неудача позорна, и следует делать все возможное, чтобы ее избежать. Но развитие западных стран во многих отношениях стало возможным благодаря росту терпимости к неудачам. Действительно, многие иммигранты из стран, где не терпят ошибок, преуспевают, попав в западную культуру. Неудача открывает путь к успеху.
Главное, что привнесла наука в изучение неудач, – это новые способы справляться с ними. Мы научились минимизировать ошибки, управлять ими, постоянно их контролировать. Ошибки не то чтобы совершаются намеренно, но каждый раз, когда мы их совершаем, мы можем направить их в нужный контекст, так, чтобы каждый раз научиться чему-либо на каждой из них. Главное – ошибаться, но продолжать двигаться вперед. Наука сама учится использовать негативные результаты. Поскольку распространение информации довольно дорого стоит, большинство негативных результатов не публикуются, и это ограничивает возможность других ученых воспользоваться опытом. В последнее время ситуация начала меняться, и все чаще появляются публикации негативных результатов (включая эксперименты, демонстрирующие отсутствие эффекта); эти публикации становятся важным инструментом научного метода познания.
В заключение можно сказать, что идея о том, что неудачи полезны, связана с методом изучения, в ходе которого вещи разрушаются ради их усовершенствования – особенно это касается сложно устроенных вещей. Чтобы усовершенствовать сложную систему, ее иногда нужно привести к краху. Программное обеспечение, которое входит в число сложных вещей, которые мы создаем сегодня, часто тестируют с помощью специально нанятых хакеров, которые настойчиво ищут способы его взломать. Точно так же один из способов выявить неисправность сложного приспособления – намеренно добиваться негативных результатов (временной поломки) различных функций, чтобы локализовать настоящую проблему. Хорошим инженерам нравится идея что-то сломать, и это, равно как и терпимость ученых к собственным неудачам, сбивает с толку неспециалистов. Но способность использовать негативные результаты – важнейший ключ к успеху.