О технологии "клиент-сервер"

В Unix\Linux терминологии, слово "терминал" в очень узком смысле означает "рабочее место оператора ЭВМ", обычно представляющее из себя клавиатуру (стандартный ввод) и дисплей (стандартный вывод). На заре компьютерной индустрии, в компаниях работал достаточно мощный компьютер, его ещё называли мэйнфрейм, а к нему подключалось множество "рабочих мест" в виде терминалов, состоящих из дисплея и клавиатуры. Все задачи и приложения выполнялись именно на мэйнфрейме, а пользователю отдавалось изображение результата выполнения задачи и принимались команды с клавиатуры. Такой принцип взаимодействия называется "клиент-сервер".

По мере развития микропроцессорной техники, компьютеры всё больше становились "персональными" и от технологии мэйнфреймов отошли. Теперь задачи выполняются больше на локальных компьютерах со своей периферией, а решение задач, где присутствуют коллективный доступ к данным, взяли на себя менее мощные компьютеры (по сравнению с мэйнфреймами) - файловые серверы с большим объёмом дискового пространства. Конечно же это не означает, что мэйнфреймы канули в лету, совсем нет. В некоторых случаях они до сих пор применяются и весьма успешно для обработки сложных бизнес-процессов и производства ёмких вычислений.

В персональных компьютерах и современных операционных системах Unix и Linux, технология "клиент-сервер" работает непосредственно на одном компьютере - он же и "мэйнфрейм" и "терминал". Ничего не мешает их разделить, и функцию сервера (мэйнфрейма) оставить на одном компьютере, а терминал переместить на другой.

Напрашивается очевидный вопрос: где это свойство можно применить?
1. Удалённый "Рабочий стол" (копия "Рабочего стола" на удалённой машине) - пользователь управляет удалённой машиной, как если бы он работал непосредственно на ней. В Windows это делает встроенный RDP-сервер и RDP-клиент, а также сторонние программы типа Radmin, VNC, TeamViewer и другие. В *nix: Krdc, oMachineNX,RealVNCJava, Remmina, TeamViewer, TigerVNC, Vinagre и другие.

2. Удалённое управление через консоль (управление через текстовые команды) - это классические терминальные методы управления:

  • telnet - (Windows, *nix) наверно один из самых первых, простых и незащищённых инструментов управления;
  • rsh - (*nix) утилиты для выполнения отдельных команд;
  • SSH (OpenSSH) - (*nix) аналог telnet, только данные передаются по защищённому (шифрованному) каналу;

3. Полноценные терминальные решения на базе серверов терминалов и терминальных клиентов. Сюда можно отнести сетевые технологии, благодаря которым большое количество пользователей могут изолированно работать (запускать приложения) на одной машине, со множества машин, подключённых к сети, как если бы они работали непосредственно на этом компьютере. Это похоже на удалённый рабочий стол, за тем исключением, что для каждого пользователя создаётся уникальный сеанс со своим окружением и всё это обслуживает одна машина.
Примеры таких решений:

  • Windows: Terminal Services, Citrix.
  • *nix: LTSP.

Теперь рассмотрим варианты применения более подробно.

Удалённое управление

Самое распространённое применение - это удалённое управление машиной (Рабочим столом) через сеть: на одном компьютере запускается серверная часть, на удалённой машине - клиентская. Серверная часть транслирует изображение с монитора на клиентскую часть. В свою очередь, клиентская часть отправляет серверной нажатие клавиш клавиатуры и положение курсора мыши.

Другое применение - удалённое управление, но уже с целью разгрузки каналов связи. Например, работает предприятие, и на сервере функционирует программное обеспечение "1С Бухгалтерия". В некоторых случаях, производительности 100-мегабитной сети хватает для работы внутри предприятия (если база большая, даже на скорости 100 мегабит, работа клиентов будет невыносимо медленна), а теперь допустим что требуется подключить филиал предприятия, располагающийся достаточно далеко от основого и имеющий, скажем, ADSL-канал со скоростью 1 Мегабит в секунду. При запуске клиентской части бухгалтерской программы, в зависимости от задачи, может потребоваться перекачка большого объёма базы данных 1С. Учитывая узкий канал, на это может потребоваться достаточно много времени. Вот здесь и проходит на помощь терминальное решение, в котором пользовательский сеанс переносится на удалённую станцию, а управление (экран, клавиатура, мышь) "переносится" по сети до удалённого компьютера. В этом случае, передаваемый объём данных достаточно мал, и может уместиться в канал со скоростью от 128Кбит\сек. Примеры реализации:

  • терминальный сервер Citrix (коммерческое решение),
  • встроенная система удалённого управления в Windows по протоколу RDP,
  • в Unix\Linux: удалённый запуск приложений через средства Xorg, клиентские средства типа FreeRDP и VNC.

Также стоит упомянуть и классические (консольные) методы удалённого управления операционными системами:

  • telnet - (Windows, Linux) наверно один из самых первых, простых и незащищённых инструментов управления;
  • rsh - (Linux) утилиты для выполнения отдельных команд;
  • SSH (OpenSSH) - (Linux) аналог telnet, только данные передаются по защищённому (шифрованному) каналу;
  • RDP - (Windows) встроенные в Windows средства удалённого управления;
  • Xorg - (Linux) может разделять клиентскую часть от серверной и работать по сети.

Полноценные терминальные решения

Ещё вариант применения - снижение затрат на IT-инфраструктуру. Это теже самые терминальные решения, но цель их работы заключается в снижении затрат на развёртывание локальной сети и IT-инфраструктуры в целом. Как это работает? Достаточно просто. Допустим, у Вас на предприятии есть старые машины - на них нельзя запустить даже современный Интернет-браузер или какую-нибудь более-менее современную офисную программу. Обычно такие машины выбрасывают или раздают по школам. Однако даже такие машины можно использовать в роли клиента сервера терминалов. Потребуется одна или несколько достаточно мощных машин для серверов, а пользовательские станции могут быть гораздо скромнее.

Ещё один момент - экономия лицензий на программное обеспечение. Обычно на предприятиях, где в основном работает Windows или MacOS, достаточно часто работает платное ПО. Если лицензия привязывается к рабочему месту, то такое ПО закупается для всех рабочих станций. Но если ПО установить на одной машине (сервере терминалов), то доступ к работе можно организовать многим пользователям и это не пойдёт в нарушение лицензии. Таким образом можно сэкономить достаточно средств.
Примеры реализации:

  • терминальный сервер Citrix Metaframe (коммерческое решение),
  • в Unix\Linux:
    • удалённый запуск приложений через средства Xorg,
    • проект LTSP (Linux Terminal Server Project),
    • FreeNX.

Кстати, проект LTSP успешно применяется в компьютерных классах многих общеобразовательных школ.

Единственное, на что однако нужно будет потратиться - это мониторы. Если старичёк ЭЛТ-монитор не выдаёт разрешение 1024х768 при 75 герцах, то такой монитор нужно заменить на более продвинутый и желательно на ЖК. Это же касается и видеокарт. Вобщем, видеоподсистему желательно апгрейдить до рабочего разрешения до 1024х768. Это связано с сохранением здоровья глаз пользователей и, заодно, чтобы элементы графических окружений вписывались в экран монитора. Разрешение 800х600 в некоторых случаях, без перенастройки размера элементов графических окружений (шрифты, кнопки, размеры панелей, и тд.) не будет удобно пользователю.

Теперь речь пойдёт о специфике реализаций терминальных решений в Unix\Linux.

Ограничения

Стоит упомянуть об ограничениях в работе полноценных терминальных решений (не путать с удалённым управлением!):

  • как уже говорилось выше, видеоподсистема должна обрабатывать высокое разрешение 1024х768 как минимум, и если нужно - больше,
  • желательно, чтобы для видеокарты на терминале работали драйверы с аппаратным ускорением. Это нужно для просмотра видео,
  • в очень старых компьютерах нет портов USB, но если это будет рабочая станция - печатная машинка, то usb, а тем более приводы, там вообще не нужны,
  • желательно чтобы сервер терминалов работал с сетью на скорости 1Гигабит или выше - это нужно для быстрой обработки действий и минимизации времени реакции при работе пользователя, а также ускорения процесса загрузки ПО в терминалы в момент их старта. Для терминалов хватит и 100-мегабитного подключения, но в целом, пропускная способность сети должна быть как можно выше,
  • если сеть частично или полностью собрана на сервере терминалов, то нужно заранее позаботиться об отказоустойчивости как самого сервера (серверов), так и сети. Это очень важный момент, поскольку остановка сети или сервера может вызвать прерывание рабочих процессов компании!

Аппаратура

Как уже говорилось выше, в качестве сервера нужно применять достаточно мощный компьютер или даже кластер компьютеров, в зависимости от количества терминалов и приложений, которые нужно запускать. В среднем, на сервере должно быть как минимум по 256Мбайт оперативной памяти на каждый терминал.

В качестве клиентов подойдут машины начиная от Pentium-133 или AMD K6 или выше с соответствующей периферией (звуковая карта, видеокарта, приводы и тд). Обязательно наличие сетевого адаптера и желательно со скоростью 100 Мегабит (Pentium-I, Pentium-II) и выше (Celeron 350МГц, Pentium-III). Если есть старенькие тонкие клиенты - можно применить и их (о таком варианте речь пойдёт в одной из статей). Современные модели готовых тонких клиентов стоят в России дороже чем готовые бюджетные системники.

Специфика в Unix и Linux

X-терминал

Очень важно понять, что в Unix и Linux, организация графического интерфейса работает наоборот! В роли клиента выступает программа, результат работы которой нужно отрисовать на экране монитора, а серверная часть представляет собой X.org-сервер, который перехватывает периферию (клавиатуру, мышь) и отрисовывает работу программы, которую запустил пользователь. Это выглядит сложно, но система достаточно универсальна. В связи с этим полноценные терминальные решения в контексте Unix\Linux выглядят тоже наоборот: на сервере терминалов выполняется пользовательская программа (клиент для X-сервера), а запускает её X-сервер с удалённого компьютера. Существую специализированные рабочие станции, на которых исполняется исключительно X-сервер, их называют аппаратным X-терминалом. На картинке ниже представлена урощённая схема работы такой системы.

Упрощённая схема сетевого варианта X-сессии (нажмите для увеличения)

На терминале запускается минимальная Linux-система с X.org-сервером. Процесс загрузки не показан, но на терминалы Linux-система передаётся по сети от одного готового бинарного образа. На самих терминалах не обязательно наличие даже дисковых накопителей.

"Удалённое управление"

Вариант удалённого управления выглядит вполне стандартно: на клиентском компьютере запускается минимальная система, для запуска клиента на базе таких протоколов как: VNC, RDP или NX. На сервере терминалов, запускается многопользовательский вариант сервиса. Приложение запускается непосредственно на сервере терминалов и запускает его X-сервер, выполняющийся там же на сервере! Но обращения от клавиатуры\мыши и вывод изображения перехватываются RDP-сервером и перенаправляются через сеть до удалённого клиента. Упрощённый вариант с RDP-сервером выглядит так:

Упрощённая схема варианта с RDP (нажмите для увеличения)

Здесь на клиенте запускается минимальная Linux-система с полноценным графическим окружением и RDP-клиент.

О выборе метода работы

Какой метод и где применить? Всё зависит от поставленной задачи и средств, выделенных на её реализацию. Например:

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

Также следует учитывать технический аспект - производительность. В случае с "удалённым управлением" происходит передача уже готового (построенного) изображения на терминал. В X-терминале, построения происходят непосредственно на терминале. Поэтому, в первом случае, динамика изображения практически не влияет на загрузку клиента, а во втором - вся нагрузка ложится на X-сервер терминала, в связи с чем, производительность видеоподсистемы должна быть как можно выше.

Послесловие

В статье были рассмотрены варианты реализации терминальных решений для операционных систем. Кратко были затронуты и коммерческие решения и не только для Linux.

Есть также решения, которые стоит упомянуть, не смотря на их "не сетевую" работу - мультисит (multiseat). В этом решении используется один системник на несколько рабочих мест. Суть идеи: Linux (Unix) позволяет подключать множество мониторов, клавиатур\мышей, звуковых и видеокарт и всё это можно распределить между рабочими местами. Если кого интересует - в конце статьи даны ссылки на материалы.

В процессе работы над статьёй, автор реализовал на стенде вариант решения на базе LTSP. Есть желание протестировать ещё несколько продуктов и описать их. Через некоторое время будут подготовлены и опубликованы статьи, освещающие практические реализации терминальных решений под Linux.

Смотрите также

Ресурсы по теме

  • Thinstation
    • Проект Linux-дистрибутива Thinstation (минимальная система для работы в качестве тонкого-клиента с поддержкой нескольких протоколов) : http://www.thinstation.org/
Печать/экспорт