Компьютер, способный работать без сбоев, без аварийных остановок, остаётся голубой мечтой с незапамятных времён. Избавиться от ошибок мы давно не надеемся: даже программы с открытым исходным кодом всё ещё содержат примерно одну ошибку на каждые две тысячи строк. В наших силах, похоже, лишь защититься от последствий.
Ещё двадцать лет назад ошибка в программе стремилась унести с собой результат работы не только самой программы, но и операционной системы. Популяризация микропроцессоров, способных аппаратно изолировать приложения друг от друга (архитектура x86 умеет это с середины 80-х), появление массовых операционных систем, умеющих использовать эту возможность, несколько улучшило ситуацию. Не стояла на месте и эволюция языков программирования. Вышедший из лабораторий Ericsson чудаковатый Erlang и его последователи делают ставку на конкурентное решение задачи множеством мелких параллельных процессов: если один из них вдруг «обваливается», соседям это не мешает.
Тем не менее и сегодня ещё стопроцентная надёжность остаётся недостижимой. Даже дата-центры таких гигантов бизнеса, как Amazon, Facebook, Google, Microsoft, обеспечивают аптайм лишь с одной девяткой после запятой (онлайн 99,9 процента времени). Вправе ли мы надеяться, что однажды научимся строить вычислительные машины, сохраняющие работоспособность вне зависимости от качества кода, решаемых задач, любых других обстоятельств? Учёные — пожалуй, единственные, кто ещё не растерял оптимизма. На днях группа британских компьютерщиков (University College, London) обнародовала результаты эксперимента, в рамках которого была создан действующий прототип именно такой — абсолютно надёжной! — машины.
Британцы оттолкнулись от простого рассуждения. Мы строим компьютеры и разрабатываем программы, равняясь на последовательное исполнение команд. Суперскалярные фокусы в микропроцессорах (уже Intel Pentium умел исполнять несколько команд одновременно) и суперкомпьютеры с их тысячами параллельно работающих узлов лишь маскируют это препятствие. Взгляните на картину в целом: весь компьютерный мир всё ещё крутится вокруг идеи последовательного исполнения. Если одна команда в потоке приводит к непредвиденному результату, выполнение прекращается — и вся задача остаётся нерешённой.
Представьте, как смешно выглядел бы, скажем, человек, надели нас природа таким вычислителем. Мы застывали бы на месте, если под ногой вдруг обнаруживалась бы лужа, теряли дар речи, если «синтезатор голоса» вместо слов вдруг выдавал бы хрипы и кашель. Слава богу (или эволюции), живые системы строятся по иному принципу. В живой природе балом правит децентрализованный, вероятностный, массивно-параллельный подход. Выполняя свои повседневные функции, тело получает информацию из нескольких источников, обрабатывает их независимо и не в унисон, а в случае непредвиденных ситуаций адаптируется, оценивая и корректируя состояние вышедших из строя узлов за счёт узлов, сохранивших работоспособность.
Это и попытались воспроизвести в виде компьютерной архитектуры британцы. Идея, несколько упрощая, следующая: каждая большая задача разбивается на множество независимых кусков, которые — и это важный момент — вместе с необходимыми исходными данными передаются на исполнение разным микропроцессорам. Авторы назвали это «системными вычислениями», потому что каждый микропроцессор с порученной ему частью задачи здесь фактически является самодостаточной системой (архитектура HAoS — Hardware Architecture of Systemic computation). Работают они одновременно, асинхронно, словно пчелиный рой или части человеческого тела. Вышла из строя одна система? Не беда! Можно добавить избыточности, сделав резервные системы, ждущие повода вступить в игру, а можно заставить некоторые из систем следить за соседями, скажем, перезагружая их в случае необходимости. Результатом станет машина, не просто чрезвычайно устойчивая к сбоям, но и обладающая необычной для компьютеров способностью «лечить» себя на ходу.
Строго говоря, авторы HAoS Америки не открыли, но научная пресса комментирует их работу тепло: британцы спроектировали и построили (с помощью имеющихся на рынке FPGA и графических процессоров) действующий, практически применимый образчик сверхнадёжного компьютера с архитектурой, отличной от доминирующей фон-неймановской, а попутно ещё и доказали, что такая машина может быть производительней, нежели предполагалось ранее.
HAoS — больше, чем просто эксперимент: уже есть конкретные планы её практического применения. К сожалению, пока не дома и не в офисе, где цена компьютерного сбоя не настолько велика, чтобы оправдать смену вычислительной архитектуры. HAoS планируется применить в науке — для эффективной симуляции живых систем (вроде очень сложных генетических алгоритмов или нейросетей). А следующим кандидатом считаются военные и представители космических отраслей. Так управление дроном кажется задачей, хорошо укладывающейся в идею и возможности HAoS. Равно и частные космические извозчики вроде SpaceX могут заимствовать такую архитектуру для своих бортовых компьютеров.
Будут ли и персоналки когда-нибудь строиться из системных кубиков а-ля HAoS? Очень может быть. Но тут необходимо сделать приятную поправку: на самом-то деле миллиарды человек уже пользуются преимуществами HAoS-подобных систем. Каждый день! Для того чтобы это увидеть, необходимо переключить внимание с микроуровня на уровень макро. Вспомните о коммерческих дата-центрах, с которых начался сегодняшний рассказ. «Облака», в которых хранятся данные и выполняются веб-сервисы Google, Facebook и прочих, к настоящему моменту превратились из просто серверных ферм в сложное целое, функционирующее в соответствии с принципами, очень похожими на живую природу.
Посмотрите, как строит своё облако, скажем, Microsoft. Кирпичиком, мельчайшей функциональной единицей для неё сегодня стал — как она сама его нарекла — ITPAC: контейнер размером с небольшой загородный домик, вмещающий тысячи серверов (на фото выше). Такой «кирпич» полностью самодостаточен: извне ему требуется только какой-никакой источник электричества и широкий интернет-канал, но, строго говоря, даже качество этих двух компонент особой роли не играет. ITPAC бросают в любой точке Земли — и он вливается в облако, беря на себя часть вычислений. Избыточность и высшая степень абстракции решаемых задач от «железа» позволяют не беспокоиться о судьбе конкретного «кирпича»: облако составлено из тысяч подобных юнитов — и если сколько-то из них выйдут из строя, на работоспособности облака в целом это не скажется. Та же картина в Google (где сломавшиеся серверы даже не трудятся менять сразу, ибо смысла в такой спешке нет), в Facebook (где петабайтные кластеры, работающие в том числе и под Erlang, обслуживают лишь несколько человек), в Amazon, Dropbox и многих других крупных компаниях.
Тот факт, что облака периодически всё-таки «зависают», говорит не столько о неспособности инженеров справиться с вечной проблемой, сколько о достигнутом консенсусе между спросом и предложением. Надёжности в 99,9 процента, очевидно, достаточно для бизнеса и рядовых пользователей. А конкуренция со временем улучшит эту цифру — возможно, и путём заимствования наработок из проекта HAoS. В любом случае, необходимость беспокоить рядового пользователя сменой архитектуры появится вряд ли.