В то время как Linux в стремлении догнать и перегнать перенимает худшие черты Windows, Microsoft активно заимствует все лучшее из мира никсов, реализуя их в своих серверных системах. Во всяком случае, Server 2008 намного больше похож на UNIX, чем последние дистры Linux. Microsoft действительно проделала большую работу, которая стоит того, чтобы на нее взглянуть.

Проект Server 2008 (ранее известный под кодовым именем Longhorn) стартовал еще до выпуска Server 2003, но первая бета-версия появилась только в июле 2005 года, вторая и третья беты вышли меньше чем через год - в мае 2006 года и в апреле 2007 года соответственно. И вот в сентябре 2007 года Microsoft начала раздавать Server 2008 Release Candidate 0, или сокращенно RC0, что переводится как «кандидат в релизы нулевой степени готовности». Финальная версия должна выйти где-то в районе первого квартала 2008 года. Если верить прогнозам Microsoft, это случится 27 февраля.

Но даже в настоящий момент популярность Server 2008 такова, что под ним работает по меньшей мере 2600 интернет-серверов (для сравнения: под управлением Windows 2000 работает порядка 5 миллионов серверов). Отчасти такая статистика объясняется тем, что бета-версия Server 2008 распространяется под лицензией Go Live, не требуя отчислений, и уже достаточно стабильна для использования в некритически важных областях, к которым, в частности, относятся web-сайты мелких компаний.

С учетом свойственной серверному рынку консервативности, потребуется не год и не два, чтобы Server 2008 потеснил Server 2003/Windows 2000, однако достаточно большое количество хакеров ставит его на рабочие станции уже сейчас. Автор, распотрошивший ядро Longhorn'а под дизассемблером и настолько проникся к нему уважением, что даже загорелся идеей поставить его на соседнюю машину (основная работает под управлением Windows 2000).
Что к чему

Server 2008 основан на ядре Vista (которое в свою очередь основано на коде Server 2003) и потому включает в себя все основные ее фичи, в том числе переписанный с нуля TCP/IP-стек, содержащий неизвестное науке количество новых дыр, улучшенную поддержку динамической памяти, файла подкачки, ввода/вывода, рандомизацию адресного пространства и контроль целостности кучи для защиты от переполняющихся буферов и т.д.

Что изменилось в Server 2008? Ну, в общем-то, кое-что изменилось. Microsoft продолжает затягивать гайки, усиливая безопасность и оптимизируя систему под работу с мощным железом, что совсем не идет на пользу SOHO-серверам. Более того, Microsoft открыто признает, что код Longhorn'а совсем не оптимизирован под файловый сервер (а в SOHO-сегменте как раз и доминируют файловые серверы!), так что в практическом плане оптимизация превращается в «пессимизацию» и конечные пользователи вынуждены вкладывать деньги в железо для получения той же самой производительности, что и на Server 2003/Windows 2000. Ну и чего это ради?!

Но оказывается, не все так просто и очевидно. Несмотря на все недостатки Longhorn'а, интерес к нему продолжает расти. К его достоинствам в первую очередь хочется отнести доработку командной строки, позволяющую выполнять 99% операций с удаленной машины (то есть без физического доступа к серверу), а также улучшенные механизмы мониторинга, диагностики ошибок и восстановления системы после падений. Наконец, Server 2008 поддерживает технологии аппаратной виртуализации Intel/AMD, известные под кодовыми именами Pacifica, Silvervale/Vanderpool и позволяющие запускать гостевые операционные системы практически без потери производительности.

Узкие рамки журнальной статьи не позволяют нам подробно рассказать обо всех нововведениях, поэтому, мы решили остановиться на самых интересных.
Server core

Linux и xBSD, изначально ориентированные на работу с командной строкой, прочно оккупировали рынок low-end серверов, мощностей которых недостаточно для поддержки графической оболочки, не являющейся частью ядра и устанавливаемой отдельно. По желанию. Или не устанавливаемой. Это уже как захочет администратор. В любом случае мы получаем полнофункциональный сервер и все необходимые нам программы будут запускаться нормально, даже если мы захотим принять почту, полазить по web'у или отредактировать офисный документ, записанный в формате MS Word. Да-да! Все это можно сделать в текстовом режиме, который на самом деле… графический. Ядро переходит в графический режим еще на самой ранней стадии загрузки, в чем легко убедиться, нажав кнопку Info на мониторе. Спрашиваешь, зачем это никсы делают? А как еще иначе работать с несколькими кодировками сразу? Да и текстовых режимов (стандартных) немного, и большинство из них выглядит просто ужасно (кто застал MS-DOS, тот помнит). Однако при желании можно форсировать работу ядра и в текстовом режиме, что ощутимо увеличивает быстродействие на слабых машинах.

Windows - совсем другой зверь. Оконная подсистема интегрирована в ядро и является неотъемлемой частью подсистемы win32-API, которую отодрать от ядра очень трудно. Собственно говоря, понятие «ядра» совершенно неприемлемо к Windows, поскольку этих ядер у него… ну, скажем так, намного больше одного и все они переплетены в тугой клубок, работающий по принципу «не трогай, а то развалится». Какой вред от интеграции графической оболочки в ядро? В общем-то, никакого. Да и ресурсов тратится намного меньше, чем в Gnome/KDE. Недостаток Windows в том, что многие действия можно выполнить только через графическую оболочку, что требует физического доступа к серверу или установки дополнительных программных пакетов для удаленного администрирования, но в ряде случаев не помогают даже они. Печально, да?

В Server 2008 появился режим server core, позволяющий устанавливать систему без графической оболочки и без библиотеки .NET Framework, управляя сервером через командную строку или удаленно через консоль управления (Microsoft Management Console). При чтении рекламных обзоров создается впечатление, что Microsoft наконец-то отодрала оконную подсистему от ядра, подарив нам чистый текстовой режим, которого все от нее так должно ждали.

Увы, это всего лишь реклама. В server core действительно отсутствует Windows Explorer, но графическая подсистема никуда не делась, и API-функции USER32/GDI32 продолжают работать как ни в чем не бывало, пожирая системные ресурсы. Аналогичного эффекта можно добиться и на Server 2003, выбрав в опциях загрузки режим command prompt only with networking support. Разница между Server 2008 и Server 2003 в том, что server core не ставит Explorer и .NET на винчестер, экономя пару сотен мегабайт дискового пространства. Какое большое достижение! Как будто нельзя снести Explorer и вручную, превратив Server 2003 в Server 2003 Core. На самом деле руками можно сделать гораздо больше, в том числе и отодрать графическую оболочку, поскольку сетевые сервисы начинают работать еще до ее загрузки. Однако это не превратит Server 2003/Server 2008 в UNIX, поскольку ряд действий осуществляется только в графическом режиме (например, управление оборудованием).

Но все же server core – это большой шаг вперед, и теперь нам уже не придется сразу же после установки сервера браться за метлу и выметать все ненужное. Впрочем, ненужного в server core по-прежнему много. Это и лишние службы, и неиспользуемые системные компоненты, и т.п.
Виртуальные миры виртуальных осей

Огромная популярность виртуальных машин типа VMware наконец-то подвигла разработчиков процессоров на поддержку аппаратной виртуализации, позволяющей эмулировать выполнение машинных команд практически без потери производительности.

У AMD эта технология называется Pacifica (Athlon 64/Turion 64/Opteron), у Intel – Silvervale (Itanium)/Vanderpool (Pentium 4), и она реализована практически на всех процессорах, выпущенных после середины 2006 года.

В состав Server 2008 входит встроенный виртуализатор, устанавливаемый опционально и сконструированный на базе эмулятора Microsoft Virtual PC (который можно приобрести отдельно за дополнительную плату и установить, например, на W2K), что позволяет запускать несколько операционных систем одновременно! Причем поддерживаются не только оси от Microsoft, но также UNIX-клоны: Linux, xBSD и т.д. Естественно, на виртуальных машинах можно запускать и саму Windows, что очень полезно для вскрытия червей, обкатки подозрительных программ, полученных из сомнительных источников, или для различных экспериментов с системой, которая в худшем случае может грохнуть только виртуальный диск, на котором, кроме нее, нет ничего ценного.

Провайдеры могут использовать эмулятор для предоставления виртуального хостинга, позволяя клиентам устанавливать свои собственные операционные системы, что до этого было невиданной роскошью и стоило немереных денег. Аналогичным образом обстоят дела и развертыванием отказоустойчивых систем. Теперь, вместо приобретения резервного сервера, достаточно запустить несколько виртуальных машин. Если упадет одна система, обработку запросов возьмет на себя другая. Естественно, эмулятор страхует только от программных сбоев, и потому в очень важных инфрастуктурах без аппаратного дублирования железа по-прежнему не обойтись, однако подобные инфраструктуры занимают сравнительно небольшую часть рынка, да и аппаратные отказы случаются не так уж часто.

Главный минус виртуализатора — необходимость в апгрейде старого железа. Учитывая, что средний срок амортизации оборудования колеблется в диапазоне от трех до пяти лет, можно сделать вывод, что количество серверов, оснащенных процессорами, выпущенными после середины 2006 года, в настоящий момент крайне невелико. Реально материнские платы и серверы с поддержкой аппаратной виртуализации появились на отечественном рынке в начале 2007 года, и цена на них все еще достаточно велика для их массового внедрения. Народ предпочитает брать слегка устаревшее железо по бросовой цене.

Кстати, о ценах. Microsoft до сих пор не определилась с политикой лицензирования своих систем, запущенных на виртуальных машинах, и в настоящий момент необходимо платить за каждую инсталляцию, включая виртуальную. Очевидно, что аппаратная эмуляция позволяет использовать базовую операционную систему как фундамент для всех остальных. Но платить за фундамент как за полнофункциональную ось, не используя и 10% ее возможностей, — смешно, если не сказать обидно и грустно. Намного выгоднее возложить эту задачу на FreeBSD или Linux, под которые есть куча бесплатных эмуляторов, поддерживающих аппаратную виртуализацию (например, XEN), и которые позволяют запускать Server 2008 как гостевую операционную систему, в результате чего мы платим всего лишь за одну инсталляцию, а не за две.
Plug'n'Pray

Вот раньше, годах этак в 60-х, все было классно — sex, drugs & rock'n'roll. А сейчас? Suxx, bugs & plug'n'play... Точнее, plug'n'pray. В смысле «включи и молись». И ведь есть о чем помолиться! Ведь может зависнуть все на фиг. И ладно, если мы что-то к USB подключаем, а если наращиваем память или вставляем еще один процессор? А что, при поддержке материнской платой технологии hot-plug еще и не такое возможно. Правда, это должна быть очень крутая плата, обслуживающая критически важный ресурс, не допускающий даже плановой (эх, слово-то какое!) перезагрузки. И стоять на такой, скорее всего, будет QNX или другая «правильная» операционная система, поставляемая вместе с машиной.

Windows (вплоть до Висты) определяла количество процессоров и объем оперативной памяти на ранних стадиях загрузки своего ядра и не допускала никакой возможности изменения конфигурации в дальнейшем. Более того, переход с однопроцессорной на многопроцессорную машину требовал не только перезагрузки, но еще и переустановки системы. Теперь же и процессор, и память включены в общее дерево Plug and Play устройств, а это значит, что они могут подключаться/отключаться на лету без перезагрузки. Теоретически. Практически же реализовано только распознавание новых устройств, но ядро Server 2008 ни морально, ни физически не готово к исчезновению одного или нескольких процессоров или планок оперативной памяти. То есть заменить память/процессор на лету мы все равно не сможем. А наращивать их количество… чисто слотов на матери не бесконечно, да и к тому же для достижения максимальной производительности следует устанавливать память/процессор с идентичными характеристиками, а если они отличаются от уже установленных, останов системы все равно неизбежен, хоть грызи зубами лед.

К тому же, как уже говорилось, в критических инфрастуктурах Windows практически не применяется, и с учетом астрономической стоимости железа, поддерживающего горячую замену процессоров и оперативной памяти, намного дешевле купить резервный сервер, чтобы спокойно останавливать основную систему для планового апгрейда. Опять-таки Server 2008 выполняет распределение ресурсов (сколько-то памяти отдать под системный кэш, столько-то - под все остальное) на ранних этапах загрузки и не меняет его в дальнейшем, даже если мы увеличим количество RAM. Но это еще что! Подумаешь, неэффективное использование памяти! Намного хуже то, что наращивание оперативной памяти приводит к невозможности сохранения полного дампа ядра, которое требует, чтобы файл подкачки был равен объему RAM или превышал последний, а максимальный размер файла подкачки устанавливается при загрузке системы и по умолчанию равен 1,5*RAM. Изменение размеров файла подкачки требует обязательной перезагрузки. То есть, если мы увеличим объем памяти более чем на 50%, создание полного дампа ядра станет невозможным! А без полного дампа ядра разобраться, почему вспыхнул голубой экран смерти, намного труднее, чем с ним. Так что эта технология еще сыра, и Microsoft'у тут есть еще над чем поработать.
Intel под угрозой вытеснения с рынка!

Server 2008 – это последний сервер в линейке Windows NT, поддерживающий x86. Дальше пойдут только 64-битные версии (смотри блог разработчиков Висты). Microsoft объясняет это своим стремлением сосредоточить все имеющиеся в ее распоряжении ресурсы на работе над одним ядром, чтобы не распылять усилия по ветру. Типа, самая преуспевающая компания мира настолько обнищала, что не может позволить себе такую «роскошь», как поддержка еще одного ядра. А вот xBSD и Linux-системы портированы под сотни различных архитектур. Странно, не правда ли? Особенно если вспомнить, что x86 – даже не одна из самых популярных, а самая популярная платформа на сегодняшний день. И дело тут совсем не в том, что у Microsoft денег/сотрудников не хватает или что для реализации очередной серверной версии позарез требуется как минимум 64 бита (что же это за монстр будет такой?!). Все гораздо проще.

64-битные версии построены с учетом последних веяний DRM, включая такие инквизиторские штуки, как обязательная подпись всех драйверов, невозможность модификации ядра и т.д. То есть все то, что позволяет Microsoft вытеснять неугодных игроков с рынка, одновременно с этим заигрывая с Голливудом и другими держателями авторских прав на медиаконтент, позиционируя Windows как систему, защищенную от цифрового грабежа. Естественно, при желании можно и контент сграбить, и ядро отмодифицировать так, что система ляжет и больше не встанет, но это уже хакерство…

Интересно, что будет делать Intel, ведь рынок SOHO-серверов не просто широк, он огромен, как Атлантический океан, а позиции Intanium'а на нем выглядят довольно слабо и вообще неубедительно. Администраторам придется переходить либо на xBSD/Linux, либо на AMD x86-64 в связке с очередным творением от Microsoft. Желающих перейти на UNIX-системы навряд ли окажется очень много (куда девать накопленный опыт администрирования и за какие шиши перестраивать сложившуюся инфрастуктуру?). А раз так, то AMD становится практически единственной альтернативой.

Выпускать «народную» версию Itanium'а Intel не сможет хотя бы потому, что он не совместим с x86. А зачем народу процессор, под которым не запускаются никакие программы? Скопировать x86-64 и добавить его в Pentium? Но это значит превратиться из лидера в догоняющего… В общем, над Intel нависла не слишком-то приятная перспектива потери значительной части рынка. Но Intel без боя не сдается, и будет просто замечательно, если она начнет проталкивать Linux в массы, вкладывая деньги в его рекламу, поддержку, etc.

Но, как говорится, поживем — увидим.