Вычислительные устройства, созданные до изобретения компьютеров в их современном понимании — с памятью, хранящей программы и данные — были специализированными. Но после изобретения схемы Джона фон Неймана на долгие годы инициативу перехватили универсальные компьютеры. Их «всеядность» рассматривалась как достоинство: действительно, меняя программное обеспечение, можно было использовать один и тот же компьютер в совершенно разных качествах. Однако за универсальность приходится расплачиваться избыточностью и потерей эффективности. Не случайно в ряде случаев примитивные специализированные устройства демонстрируют свое превосходство; к примеру, на расшифровке кодов электромеханический компьютер Colossus, построенный во время Второй мировой войны, показывал практически ту же производительность, которую обеспечивают процессоры Intel 80486 на тех же задачах! Нет ничего удивительного в том, что в последние годы, когда к вопросам экономической эффективности ИТ привлечено заметное внимание, наблюдается очевидный возврат к специализированным устройствам, которые принято называть computer appliance.
Скорее всего, процесс специализации начался с устройств для поддержки виртуальных частных сетей и межсетевых экранов, где для этого есть и достаточные, и необходимые условия: здесь критична производительность, а функциональность по определению весьма ограничена. Сегодня на смену первому поколению экранов приходят устройства с большей функциональностью, попадающие в категорию Unified Threat Management (UTM), то есть «комплексное (объединенное) управление угрозами» или «единая система управления сетевой защитой». Они обеспечивают максимально широкий спектр защитных функций, включая противовирусную защиту, предотвращение или защиту от разного рода вторжений и т.д. В целом сценарий эволюции от универсальных компьютеров к устройствам категории computer appliance, специализирующимся на защите данных, повторяется и в других областях. На первых порах в качестве аппаратной платформы используются универсальные компьютеры, на которые загружается специализированное программное обеспечение, но далее происходит миграция на специализированные компьютеры, построенные на программируемых логических матрицах (Field-Programmable Gate Array, FPGA) или каких-либо иных технологиях, обеспечивающих высокую производительность. Иначе говоря, универсальную архитектуру заменяет специальная.
Самый яркий пример подобной специализации — файловые серверы, реализованные в подключаемых к сети устройствах хранения (Network Attached Storage, NAS). Они появились с отставанием всего на несколько лет по отношению к средствам обеспечения безопасности. Показательно, что одна из наиболее влиятельных в данной области компаний так и называется — Network Appliance.
Еще один отдельный класс составляет немногочисленная категория устройств, предназначенных для работы с хранилищами данных, они известны главным образом по аппаратным продуктам компаний Teradata и Netezza. Близкие к ним по своему подходу молодые компании Kognitio, Vertica и ParAccel строят свои программные виртуальные вычислительные устройства (virtual appliance) на основе пропагандируемого небезызвестным Майклом Стоунбрейкером «колонного» принципа организации данных и в расчете на кластеры, собранные из стандартных серверов.
Компания Google предложила свои поисковые машины, упакованные в виде готовых к употреблению устройств Google Search Appliance; среди них Google Mini, стоимостью всего 2 тыс. долл. Совсем новый класс appliance образуют устройства, предназначенные для геоинформационных систем (geospatial appliance), — это своего рода развитие систем спутниковой навигации. В основном их производят традиционные поставщики специального оборудования, такие как корпорации Northrop Grumman, Lockheed Martin и другие. Некоторые, например FortiusOne, а также купленная корпорацией Microsoft компания Vexcel создают виртуальные геоинформационные устройства, используя обычные серверы. Имеются и совсем «банальные» приборы, записывающие телевизионное изображение на диски, и им подобные решения. И наконец, нельзя забывать о мобильных Internet-устройствах (Mobile Internet Device, MID) и «неттопах», появление которых на массовом рынке ожидается уже в самое ближайшее время.
В получившем распространение переводе слова appliance выражением «специализированное вычислительное устройство» (см. статью «Все проходит… и универсализм компьютеров тоже», «Открытые системы», № 1, 2008) теряется один из оттенков его смысла. Имеется в виду родственность бытовым устройствам, которые, будучи единожды сделанными, не изменяются в процессе своего существования, оставаясь «закрытыми и запечатанными».
Все перечисленные устройства в большей мере используют коммуникационные, а не вычислительные возможности компьютеров. Одно из немногих исключений составляют решения компании Azul Systems, которая выпускает Java-ускорители семейства Vega.
С 2004 года в Azul разрабатывается технология вычислителей, подключаемых по сети (Network Attached Processing, NAP) и предназначенных для выполнения на уровне приложений в трехуровневой системной модели. В собственной терминологии Azul специализированные вычислительные устройства называют Compute Appliance (CA). Общая схема предполагает, что они подключаются к любым традиционным серверам, и при необходимости выполнение приложения в режиме, прозрачном для пользователя, передается на них. Каждое устройство CA представляет собой SMP-сервер с высоким уровнем параллелизма, специально приспособленный для выполнения виртуальных Java-машин и аналогичных нагрузок.
В отличие от обычных серверов CA не нуждаются в каком-либо предустановленном программном обеспечении, на них не работает какая-либо операционная система. Их функции сведены к тому, что они снабжают вычислительными ресурсами и ресурсами памяти те приложения, которые инсталлированы на обычных серверах, выполняя определенного рода сервис для них. Они вполне укладываются в представления о специализированных вычислительных устройствах. Подобная организация вычислений предполагает, что все остальные характерные для серверов виды работ, связанных с доступом к данным, обеспечением надежности и др., остаются на обычных серверах и только вычисления передаются на CA. В таком случае образующие единый пул кластеризованные устройства СА являются специализированным счетным механизмом для множества бизнес-приложений, находящихся на различных компьютерах в сети. Эффективный распределенный доступ к CA обеспечивает программный инструментарий Azul Compute Pool Manager*.
Предпосылкой к созданию CA послужило внедрение платформенно-независимой и компонентной парадигмы разработки и внедрения приложений, ставшее массовым вместе с принятием технологии J2EE. Язык Java не стал откровением, но в нем удалось воплотить объектно-ориентированную и компонентную модель удачнее, чем в предшественниках. Поэтому он был принят всеми основными производителями, за исключением корпорации Microsoft, предложившей альтернативу в виде .Net. Сегодня платформы J2EE и .Net стали основными для ведущих производителей программного обеспечения. О массовости этих двух платформ можно судить по данным, опубликованным IDC (рис. 1).
Аппаратной основой для программных решений на этих платформах, как правило, служат обычные серверы. Однако наличие встроенной виртуальной машины Java не исключает и других решений. На каком бы ином языке — Cи, C++, Кобол или Visual Basic — не было написано приложение, для его поддержки требуется среда исполнения и операционная система. Такие приложения плохо «разделяются на потоки» (threading), поскольку они «крупно гранулированы» (coarse-grained). В отличие от этих языков модели приложений в J2EE и .Net предполагают «мелкую гранулированность» (fine-grained), их сессии можно разделить на «зерна» (bean), что предоставляет более широкие возможности для распараллеливания приложений. Именно это обстоятельство открывает возможность для создания серверов с альтернативной архитектурой, отличающейся более высоким уровнем параллелизма.
Основатели компании Azul одними из первых осознали, что собственно выполнение Java-приложений не связано с аппаратной платформой и операционной средой. Поэтому можно избрать новый путь, а именно ограничиться упрощенными специализированными вычислительными устройствами, предназначенными для выполнения платформенно-независимых кодов, а все, что в приложениях специфично для платформы, оставить за традиционными серверами.
Обычно на уровне приложений используются самые различные серверы, работающие под управлением Windows, Linux, IBM AIX, HP-UX, Sun Solaris и других операционных систем. Но следует учесть, что не менее 60% приложений написаны на J2EE и .Net и им универсальность серверов вовсе не требуется, а потому часть приложений можно перенести на специализированные серверы (рис. 2). Такое решение будет дешевле и производительнее.
Между сетевыми вычислениями с использованием CA и сетевым хранением данных с использованием устройств NAS обнаруживаются очевидные аналогии. Переход от традиционной схемы к схеме с СА можно уподобить переходу от непосредственно подключаемых к серверу систем хранения (Direct Attached Storage, DAS) к NAS. В обоих случаях есть три составляющих решения. В NAS это собственно дисковые массивы, система управления, обеспечивающая прозрачный доступ к ним, и протоколы NFS (Network File System) или CIFS (Common Internet File Systems), обеспечивающие совместное использование ресурсов. В «подключаемых к сети устройствах вычислений» своя триада: устройства СА, централизованное управление ресурсами посредством Compute Pool Manager и протокол Java Native Interface (JNI), связывающий чистые байт-коды Java с кодами конкретной платформы.
Compute Pool Manager обеспечивает динамическое распределение процессоров в СА. Одно из преимуществ распределенного доступа к процессорному пулу заключается в том, что этот ресурс используется эффективнее. Это очевидное достоинство консолидации, известное по множеству примеров из различных областей. Консолидированное использование процессоров по своей логике очень напоминает виртуализацию стандартных серверов и те выгоды, которые из нее следуют.
Основой СА от Azul служат многоядерные специализированные процессоры; в первой версии в них было 24 ядра, во второй?— 48. Эти процессоры используются для выполнения объектно-ориентированных операций, уборки мусора, а также они адаптированы к лучшей масштабируемости Java. Каждый процессор имеет в своем составе контроллер памяти и кэш-памяти, средства межсоединений и интерфейсы ввода/вывода. Различные варианты СА имеют разное число процессоров; из них строятся относительно простые кластеры, расчет на параллелизм приложений позволяет отказаться от сложной серверной архитектуры, соединяя отдельные строительные блоки обычным Gigabit Ehernet. Но средства обеспечения надежности остаются, это и устройства питания и охлаждения с горячей заменой, и память ECC, и другие известные решения. В моделях Vega 2, выпущенных в 2007 году, в одной стойке можно собрать до 768 процессорных ядер (рис. 3).
***
Несмотря на очевидную «экстремальность», продукты Azul находят своих потребителей. В основном это финансовые и телекоммуникационные компании, которые и определяют перспективные направления в развитии идеи вычислительных ускорителей. В частности, предполагается, что в следующих поколениях Vega будет реализована поддержка динамических языков наподобие PHP, Ruby и C#.
* Любопытно, что выражение compute appliance иногда используют в английском языке для обозначения счетных механизмов типа китайских или русских счетов. — Прим. автора.