Се́рверное програ́ммное обеспечение (се́рвер, англ. server от to serve — служить; множественное число сервера́) — в информационных технологиях — программный компонент вычислительной системы, выполняющий сервисные (обслуживающие) функции по запросу клиента, предоставляя ему доступ к определённым ресурсам или услугам.
Роль сервера
Понятия сервер и клиент и закреплённые за ними роли образуют программную концепцию «клиент-сервер».
Для взаимодействия с клиентом (или клиентами, если поддерживается одновременная работа с несколькими клиентами) сервер выделяет необходимые ресурсы межпроцессного взаимодействия (разделяемая память, пайп, сокет и т. п.) и ожидает запросы на открытие соединения (или, собственно, запросы на предоставляемый сервис). В зависимости от типа такого ресурса, сервер может обслуживать процессы в пределах одной компьютерной системы или процессы на других машинах через каналы передачи данных (например, COM-порт) или сетевые соединения.
Формат запросов клиента и ответов сервера определяется протоколом. Спецификации открытых протоколов описываются открытыми стандартами, например протоколы Интернета определяются в документах RFC.
В зависимости от выполняемых задач одни сервера, при отсутствии запросов на обслуживание, могут простаивать в ожидании. Другие могут выполнять какую-то работу (например, работу по сбору информации), у таких серверов работа с клиентами может быть второстепенной задачей.
Аппаратное обеспечение
Основная статья: Сервер (аппаратное обеспечение)
У слова «сервер» есть и другое значение — компьютер, выполняющий серверные задачи, или компьютер (или иное аппаратное обеспечение), специализированный (по форм-фактору и/или ресурсам) для использования в качестве аппаратной базы для серверов услуг (иногда — услуг определённого направления).
Аппаратными серверами называются узкоспециализированные решения со встроенным программным обеспечением (англ. firmware; в отличие от компьютеров, где программное обеспечение необходимо устанавливать), определяющим специализацию и возможные предоставляемые услуги. Аппаратные сервера, как правило, более просты и надёжны в эксплуатации, потребляют меньше электроэнергии и, иногда, более дёшевы. Но вместе с тем они менее гибки (так как изначально ограничены в выполняемых задачах) и часто ограничены в ресурсах.
Важно понимать, что сервер, в том значении как его понимает эта статья (то есть сервер, предоставляющий какой-либо сервис, например прокси-сервер), всегда является программой (или программным модулем), выполняющейся на каком-то аппаратном обеспечении. Без этой программы аппаратное обеспечение не может ничего предоставлять. Даже «аппаратные сервера» (или роутеры) не исключение, потому что в них сервис также предоставляется (встроенным) программным обеспечением. Иногда, для простоты, сервером услуги (например тем же прокси-сервером) называют программное и аппаратное обеспечение в целом, в особенности если этот программно-аппаратный комплекс выполняет только одну задачу.
Теоретически на одной единице аппаратного обеспечения может одновременно выполняться произвольное количество серверов (за исключением серверов, конфликтующих между собой по ресурсам или их количеству), они будут делить между собой аппаратные ресурсы. Практически, между крайностями «один компьютер — одна услуга» и «один компьютер — все услуги» каждый находит свой компромисс.
Сервера услуг можно запускать на рабочей станции, чтобы они работали в фоновом режиме, разделяя ресурсы компьютера с программами, запускаемыми пользователем. Такой режим работы называется «невыделенным», в отличие от «выделенного» (англ. dedicated), когда компьютер выполняет только сервисные функции. Строго говоря, на рабочей станции (для примера, под управлением Windows XP) и без того всегда работает несколько серверов — сервер удалённого доступа (терминальный сервер), сервер удалённого доступа к файловой системе и системе печати и прочие удалённые и внутренние сервера.
Классификация стандартных серверов
Как правило, каждый сервер обслуживает один или несколько схожих протоколов. Сервера можно классифицировать по типу услуг, которые они предоставляют.
Универсальные сервера
Универсальные сервера — особый вид серверной программы, не предоставляющий никаких услуг самостоятельно. Вместо этого универсальные сервера предоставляют серверам услуг упрощённый интерфейс к ресурсам межпроцессного взаимодействия и/или унифицированный доступ клиентов к различным услугам. Существуют несколько видов таких серверов:
- inetd (от англ. internet super-server daemon — демон сервисов IP) — стандартное средство UNIX-систем — программа, позволяющая писать сервера TCP/IP (и сетевых протоколов других семейств), работающие с клиентом через перенаправленные inetd потоки стандартного ввода и вывода (stdin и stdout).
- RPC (от англ. Remote Procedure Call — удалённый вызов процедур) — система интеграции серверов в виде процедур, доступных для вызова удалённым пользователем через унифицированный интерфейс. Интерфейс, изобретённый Sun Microsystems для своей операционной системы (SunOS, Solaris; Unix-система), в настоящее время используетстся как в большинстве Unix-систем, так и в Windows.
- Прикладные клиент-серверные технологии Windows:
- (D-)COM (англ. (Distributed) Component Object Model — модель составных объектов) и др. — Позволяет одним программам выполнять операции над объектами данных, используя процедуры других программ. Изначально данная технология предназначена для их «внедрения и связывания объектов» (OLE англ. Object Linking and Embedding), но в общем позволяет писать широкий спектр различных прикладных серверов. COM работает только в пределах одного компьютера, DCOM доступна удалённо через RPC.
- Active-X — Расширение COM и DCOM для создания мультимедийных приложений.
Универсальные сервера часто используются для написания всевозможных информационных серверов — серверов, не нуждающихся в специфической работе с сетью и не имеющих никаких задач, кроме обслуживания клиентов. Например, в роли серверов для inetd могут выступать обычные консольные программы и скрипты.
Большинство внутренних и сетевых специфических серверов Windows работают через универсальные сервера (RPC, (D-)COM).