Все больше и больше фирм приходят в Internet как активные или пассивные участники. Стремительное развитие сделало требование надежных соединений абсолютно естественным.
С самого своего появления в конце 60-х Internet непрерывно развивалась от небольшой сети, ориентированной на военные и образовательные нужды, до всемирной паутины, известной нам сегодня. Теперь десятки миллионов пользователей и миллионы серверов соединены друг с другом, и их количество продолжает стремительно расти. Кроме того, с течением времени сеть предоставляет все новые и новые возможности. Тогда как в самом начале - после принятия протокола TCP/IP в качестве стандартного - были доступны только символьные услуги, такие как ftp, telnet, mail, то за последние несколько лет сеть стала куда более дружелюбной за счет использования графических пользовательских интерфейсов. World Wide Web играет сегодня главную роль среди всех услуг Internet. При этом остаются весьма популярными Usenet News (новости) и E-mail (электронная почта).
Все больше и больше фирм приходят в Internet как активные или пассивные участники. Стремительное развитие сделало требование надежных соединений абсолютно естественным.
Безопасность против отказоустойчивости
В повседненвной практике безопасность и сохранность достаточно близкие понятия. Однако в данном случае между ними необходимо сделать четкое различие. Безопасность в контексте передачи данных означает обеспечение средств для предотвращения неавторизованного доступа к конфиденциальным данным. Это особенно справедливо для денежных транзакций и услуг, доступных только по паролю (персональные услуги, обычно требующие оплаты). Безопасность обычно достигается за счет использования методов шифрования данных, таких как, например, системы открытых и закрытых ключей. Для специально для WWW был разработан протокол S-HTTP (безопасный гипертекстовый протокол передачи). Существует также немало продуктов, способных шифровать и дешифровать сообщения аппаратно. Другой реализацией системы безопасности, выполненной на уровне протокола, является SSL (secure socket layer), обеспечивающая прозрачное для приложений шифрование данных на уровне IP.
С другой стороны, термин "сохранность" происходит из теории систем. В таком контексте он означает, что система будет вести себя в точности так, как задано, т.е. не будет непредсказуемого поведения. Отказы систем обычно не отвечают требованиям сохранности. Хотя, конечно, можно утверждать, что остановившаяся система продолжает оставаться в рамках своей спецификации, потому что не делает ничего, что не указано в спецификации, однако в реальной жизни такое утвурждение, мягко говоря, не слишком ответственное.
Мало того, что пользователи хотят, чтобы их системы работали, им надо, чтобы работали хорошо. Это особенно верно для серверов Internet. Социологические исследования показали, что средний пользователь WWW пытается подсоединиться к хосту только два раза. Если оба раза соединение установить не удается, то попытки прекращаются. Кое-кому это может изрядно повредить.
В контексте данной статьи сохранность будет означать все возможные меры, которые могут быть приняты для того, чтобы гарантировать безостановочное функционирование, свободное от прерываний, вызванных аппаратными, программными средствами или операционной системой. Также, отказоустойчивость и сохранность будут считаться эквивалентными понятиями.
Классическое отказоНЕустойчивое решение
Такая архитектура применяется в большинстве однопроцессорных систем типа ПК, рабочих станций младших классов и серверов и иногда используется в многопроцессорных системах, работающих без отказоустойчивой операционной системы. На Рис. 1 показана архитектура такой системы. Процессор оперирует единым полем памяти, которая посредством системной шины соединена с периферийными устройствами типа дисков и коммуникационных линий.
Рисунок 1.
Простейшая архитектура системы (отказоНЕустойчивая).
Очевидным недостатком такой архитектуры является ее склонность к возникновению ситуаций, называемых "бутылочным горлышком", т.е. наличие узких мест. Тот факт, что все внутренние потоки данных перемещаются по одной единственной системной шине, приводит к тому, что скорость шины неизбежно накладывает жесткие ограничения на быстродействие всей системы.
Так или иначе, в настоящее время большинство небольших и средних систем продолжают использовать такую архитектуру. В основном это объясняется тем, что такие системы проще изготавливать, они дешевле и, следовательно, для них проще находить рынки сбыта. Продолжительность жизни таких систем низкая и средняя, а среднее время безотказной работы достаточно высокое. Эти данные сильно зависят от качества аппаратной части, которая, в свою очередь, напрямую связана с ценой.
Практически любая аппаратура и любая операционная система, имеющиеся сегодня на рынке, могут обеспечивать Internet-услуги. Грубо говоря, чтобы компьютер подходил для работы с Internet, достаточно, чтобы он поддерживал TCP/IP протокол. На самом деле, большинство современных Internet-серверов, будь они Web-серверами, почтовыми серверами или чем-либо еще, работают на отказоНЕустойчивой платформе. Типичными операционными системами в таком случае являются UNIX и Windows-NT, которые обеспечивают достаточную стабильность для некритичных Internet-программ за приемлимую цену.
Отказоустойчивая аппаратура
Обычно, когда необходимо сделать аппаратную часть отказоустойчивой, просто добавляют избыточные компоненты. Это может быть выполнено посредством использования копии стандартной архитектуры, приведенной выше, которая будет работать в режиме ожидания. Однако, более красивым решением является использование специально разработанных архитектур. Ниже приведено несколько архитектур характерных для отказоустойчивых компьютеров.
На Рис. 2 показана конфигурация с несколькими процессорами, использующими общую память. В зависимости от деталей конфигурации и от операционной системы процессоры могут работать в трех режимах. В первом режиме, который называется параллельным независимым, каждый процессор выполняет свой набор команд, что приводит к высокой скорости и к нулевой отказоустойчивости. Если в каком-либо процессоре происходит сбой, то останавливаются все процессы, выполнявшиеся на нем; восстановить их непросто. Второй режим, носящий название виртуального процессора, является отказобезопасным. В каждый момент времени все процессоры выполняют одни и те же команды, а результаты их работы сравниваются друг с другом. Так называемый голосующий механизм принимает решение относительно сбойности процессора и автоматически отключает его. Отключение сбойного процессора происходит совершенно незаметно для пользователя, производительность не снижается, поскольку остальные процессоры продолжают свою работу. Однако подобная архитектура содержит единичные точки отказа, т.е. компоненты, отказ которых приводит к полной остановке системы.
Рисунок 2.
Многопроцессорная архитектура с общей памятью.
Таким компонентом в данном случае является память.
Архитектура, позволяющая решить эту проблему, приведена на Рис. 3. Две системы соединены через свои каналы ввода-вывода для получения крупномодульной полной избыточности. Для сохранения целостности данных и предоставления всем системам кластера одинакового доступа к общему массиву данных для хранения данных обычно используются многопортовые RAID-системы. Обычно одна из двух систем работает в качестве основного сервера, а другая зарезервирована. Используя специальное программное обеспечение, системы постоянно проверяют друг друга ("Ты еще жива?"). Как только случается сбой в основном сервере, страховочный сразу берет все его функции на себя.
Рисунок 3.
Сцепление многопроцессорных систем в один кластер.
Для устранения недостатков архитектуры с разделенной памятью (единичных точек отказа) были разработаны многопроцессорные системы без совместно используемых ресурсов. Как показано на Рис. 4, полностью самостоятельные процессоры, каждый со своей собственной памятью и периферийными устройствами, взаимодействуют друг с другом через высокоскоростную локальную шину. В данном случае шина является сдвоенной, так что отказ одной шины не приведет к краху системы. Отказ одного или даже нескольких модулей такой системы также не вызовет останова системы. Соответствующее программное обеспечение отвечает за то, чтобы процессы, выполнявшиеся на отказавшем процессоре, были перезапущены на другом процессоре.
Рисунок 4.
Многопроцессорная архитектура без общих ресурсов.
Логическим продолжением описанной только что архитектуры явилась недавно разработанная технология межсоединений ServerNet. Будучи реализацией так называемой системной сети, она обеспечивает высокоскоростное соединение модулей процессор-память и периферийных устройств в произвольном порядке. Эта сеть полностью динамически конфигурируема, и практически не имеет предела расширяемости. Гибкость сети позволяет осуществлять ее конфигурацию для приложений, выполняющих большое количество вычислений, работающих с большим количеством данных, выполняющих большое количество обменов данными или для их комбинации.
Рисунок 5.
Архитектура ServerNet.
Целостность данных может быть достигнута за счет комбинации методов многопроцессорной обработки с общей памятью и кластерной многопроцессорной обработки (работающая часть кластера берет на себя все функции дефектной части). Для достижения полной отказоустойчивости можно сделать саму ServerNet избыточной и подключить все устройства к обеим плоскостям параллельно.
Как правило, серверы Internet не требуют большой вычислительной мощности, зато им необходимы огромные объемы для хранения данных и хорошие коммуникационные линии с высокой пропускной способностью. На Рис. 6 показана типичная конфигурация ServerNet, удовлетворяющая требованиям отказоустойчивого Web сервера.
Рисунок 6.
Конфигурация сервера Интернет, основанная на ServerNet.
Отказоустойчивые операционные системы
Использовать отказоустойчивую аппаратуру без соответствующей отказоустойчивой операционной системы - это все равно что ездить на спортивном автомобиле без мощного двигателя. Иными словами, ни аппаратная часть, ни операционная система не являются самодостаточными ни в каком отношении.
Так уж сложилось исторически, что аппаратура и операционные системы всегда разрабатывались в тесном взаимодействии. Иногда архитектура операционной системы оказывал влияние на дизайн аппаратной части, но обычно операционная система разрабатывалась так, чтобы подходить к уже существующей аппаратуре.
Современные операционные системы строятся по принципу слоев или уровней. На самом нижнем уровне находятся аппаратно-зависимые модули, как, например, драйверы устройств. Самые верхние слои опираются на абстрактную модель компьютера, и не уделяют никакого внимания аппаратной части. Отказоустойчивые операционные системы тоже строятся по иерархическому принципу. Примером отказоустойчивой операционной системы UNIX является NonStop UX от фирмы Tandem, структура которой приведена на Рис. 7.
Рисунок 7.
Архитектура системы NonStop UX.
Функции слоев, наиболее близких к аппаратной части:
Более высокие слои выполняют такие задачи как перезапуск процессов, реконфигурация сетевых интерфейсов на уровне протокола (переприсвоение адреса TCP/IP интерфейсу вторичной сети, который активизируется после сбоя первичной сети), запуск вновь сконфигурированной сети и т.д.
Для приложений система предоставляет типичный интерфейс UNIX. Функциональное расширение операционной системы может осуществляться посредством четко определенного интерфейса прикладных программ (API), который в среде UNIX обычно реализуется через системные вызовы или с использованием библиотечных функций. Приложение может использовать все эти возможности или работать без них в отказоНЕбезопасном режиме.
Безостановочные Internet-услуги
Теперь, когда у нас уже есть отказоустойчивая аппаратура и работающая на ней отказобезопасная операционная система, внимание должно быть направлено на отказоустойчивые приложения. Обычно приложения, которые должны обеспечивать непрерывные услуги для своих пользователей, создаются с упором на отказоустойчивость. Речь идет о таких приложениях, как базы данных, системы обработки транзакций, системы управления критическими процессами, системы, обеспечивающие интерфейс с внешним миром (Web-страницы, эл. почта и т.п.) и т.д.
Кому нужна отказоустойчивость Internet ?
Теперь, когда мы обсудили с технической точки зрения, как обеспечивать бесперебойные Internet- услуги, давайте зададимся вопросом, а кто собственно нуждается в таких услугах.
Прежде всего, это люди, стремящиеся использовать Internet для деловых целей, их число очень быстро растет. Надежность передачи данных из конца в конец особенно важна, когда имеют место денежные транзакции. Представьте себе ситуацию, когда кто-то делает заказ через Internet с автоматическим переводом денег с его счета на счет компании, получающей заказ. Если сервер Internet отказывает в тот критический момент, когда первая транзакция еще не завершена, а вторая уже полностю обработана, то покупателю придется платить за то, что он так и не заказал. Использование отказоустойчивой техники снизит подобный риск практически до нуля и, таким образом, повысит доверие людей к заказам через Internet.
Подобный же сценарий разворачивается благодаря развитию коммерческих приложений небольшой мощности (так-называемые "апплеты" в терминологии Java). Пользователи больше не покупают программные средства на носителях, а при необходимости загружают их за плату из Internet. После использования такие приложения автоматически удаляются. Оплата производится за каждое использование программного продукта, а не за каждую копию. Следовательно, пользователи очень заинтересованы в том, чтобы процесс перекачки не прерывался и не содержал ошибок.
Еще один пример: число поставщиков Internet-услуг растет почти также быстро как и число потребителей. Следовательно, в ближайшие годы им придется столкнуться с ростом конкуренции. Простое снижение цен не очень-то выгодно, поскольку приведет к снижению доходов. Поэтому гораздо выгоднее улучшать качество услуг. Способность предложить бесперебойные и отказобезопасные соединения без повышения платы за обслуживание - достаточно убедительный аргумент для перспективных клиентов.
Мы привели всего лишь несколько типичных примеров использования отказоустойчивых услуг. На самом деле их гораздо больше, а какие-то мы еще не только не знаем, но даже и представить себе не можем.
Мы рассмотрели некоторые аспекты отказобезопасных вычислений в области услуг Internet. По большому счету, существует три уровня, каждый из которых должен обладать свойствами отказобезопасности, чтобы вся система была отказобезопасной: аппаратная часть, операционная система и программное обеспечение самого сервера и приложений. Аппаратная часть может быть сделана отказоустойчивой несколькими способами, каждый из которых так или иначе подразумевает избыточность. Операционные системы типа UNIX строятся по модульному принципу, так что они могут быть улучшены путем добавления отказоустойчивых элементов на уровнях, близких к аппаратуре, при этом практически не придется трогать верхние слои. Программное обеспечение Internet серверов может рассматриваться как обычное приложение и, следовательно, может быть сделано отказоустойчивым аналогичными методами. Услуги же, не основанные на виртуальных соединениях, модифицировать гораздо легче.
Сегодня на рынке уже существует потребность в отказоустойчивых услугах Internet, и с течением времени будет появляться все больше и больше продуктов для ее удовлетворения. Взаимодействие и сотрудничество между компаниями, давно работающими в области отказоустойчивой вычислительной техники, и компаниями, занимающимися сетями и Internet, поможет быстрее разрабатывать и продвигать на рынок такие продукты.
Фолькер Хаманн - сотрудник фирмы Tandem Computers. С ним можно связаться по электронной почте Email: hamann_volker@tandem.com