Содержание
О технологии "клиент-сервер"
В 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-терминалом. На картинке ниже представлена урощённая схема работы такой системы.
На терминале запускается минимальная Linux-система с X.org-сервером. Процесс загрузки не показан, но на терминалы Linux-система передаётся по сети от одного готового бинарного образа. На самих терминалах не обязательно наличие даже дисковых накопителей.
"Удалённое управление"
Вариант удалённого управления выглядит вполне стандартно: на клиентском компьютере запускается минимальная система, для запуска клиента на базе таких протоколов как: VNC, RDP или NX. На сервере терминалов, запускается многопользовательский вариант сервиса. Приложение запускается непосредственно на сервере терминалов и запускает его X-сервер, выполняющийся там же на сервере! Но обращения от клавиатуры\мыши и вывод изображения перехватываются RDP-сервером и перенаправляются через сеть до удалённого клиента. Упрощённый вариант с RDP-сервером выглядит так:
Здесь на клиенте запускается минимальная Linux-система с полноценным графическим окружением и RDP-клиент.
О выборе метода работы
Какой метод и где применить? Всё зависит от поставленной задачи и средств, выделенных на её реализацию. Например:
- Если на предприятии уже работают хорошие машины, то не имеет смысла делать полноценное терминальное решение, разве что только для экономии электроэнергии и затрат на обслуживание. Опять-таки, если на предприятии работает с десяток аниматоров 3D-графики, то каждому из них нужен не терминал, а достаточно мощный компьютер, чтобы была возможность производить предварительный рендеринг на своих машинах.
- Если машины не совсем быстрые - полноценное терминальное решение здорово поможет.
Также следует учитывать технический аспект - производительность. В случае с "удалённым управлением" происходит передача уже готового (построенного) изображения на терминал. В X-терминале, построения происходят непосредственно на терминале. Поэтому, в первом случае, динамика изображения практически не влияет на загрузку клиента, а во втором - вся нагрузка ложится на X-сервер терминала, в связи с чем, производительность видеоподсистемы должна быть как можно выше.
Послесловие
В статье были рассмотрены варианты реализации терминальных решений для операционных систем. Кратко были затронуты и коммерческие решения и не только для Linux.
Есть также решения, которые стоит упомянуть, не смотря на их "не сетевую" работу - мультисит (multiseat). В этом решении используется один системник на несколько рабочих мест. Суть идеи: Linux (Unix) позволяет подключать множество мониторов, клавиатур\мышей, звуковых и видеокарт и всё это можно распределить между рабочими местами. Если кого интересует - в конце статьи даны ссылки на материалы.
В процессе работы над статьёй, автор реализовал на стенде вариант решения на базе LTSP. Есть желание протестировать ещё несколько продуктов и описать их. Через некоторое время будут подготовлены и опубликованы статьи, освещающие практические реализации терминальных решений под Linux.
Смотрите также
Ресурсы по теме
- X.org
- Популярно о X.Org: http://rus-linux.net/papers/xwin/X-Window.html
- Статья Jasper St. Pierre - "Графический стек Linux": http://habrahabr.ru/post/148954/
- LTSP
- Официальный сайт проекта: http://www.ltsp.org/
- Wiki проекта (много технической информации, которая осталась "за кадром" на официальном сайте): http://sourceforge.net/apps/mediawiki/ltsp/
- Thinstation
- Проект Linux-дистрибутива Thinstation (минимальная система для работы в качестве тонкого-клиента с поддержкой нескольких протоколов) : http://www.thinstation.org/
- FreeNX
- Устанока FreeNX: https://help.ubuntu.com/community/FreeNX
- Мультисит
- Пример реализации мультисита на Ubuntu: http://habrahabr.ru/post/112534/
- Пример реализации мультисита на 2 рабочих места: http://research.edm.uhasselt.be/~jori/page/index.php?n=Misc.DualSeatX
- Пример реализации мультисита переконфигурацией X.org-сервера: http://blog.chris.tylers.info/index.php?/archives/14-Multiseat-X-Under-X11R6.97.0.html

