Кластер — это разновидность параллельной
или распределённой системы, которая:
1. состоит из нескольких связанных
между собой компьютеров;
2. используется как единый,
унифицированный компьютерный ресурс
Дано: есть бизнес-приложение (например, ERP-система), с которым работают одновременно тысячи (возможно, десятки тысяч) пользователей.
- Сделать приложение масштабируемым, чтобы при увеличении количества пользователей можно было за счёт наращивания аппаратных ресурсов обеспечить необходимую производительность приложения.
- Сделать приложение устойчивым к выходу из строя компонентов системы (как программных, так и аппаратных), потере связи между компонентами и другим возможным проблемам.
- Максимально эффективно задействовать системные ресурсы и обеспечить нужную производительность приложения.
- Сделать систему простой в развертывании и администрировании.
К желаемому результату мы пришли не сразу.
В этой статье расскажем о том, какие бывают кластеры, как мы выбирали подходящий нам вид кластера и о том, как эволюционировал наш кластер от версии к версии, и какие подходы позволили нам в итоге создать систему, обслуживающую десятки тысяч одновременных пользователей.
Терминальный сервер #1 Ограничение прав пользователей
Как писал автор эпиграфа к этой статье Грегори Пфистер в своей книге «In search of clusters», кластер был придуман не каким-либо конкретным производителем железа или софта, а клиентами, которым не хватало для работы мощностей одного компьютера или требовалось резервирование. Случилось это, по мнению Пфистера, ещё в 60-х годах прошлого века.
Традиционно различают следующие основные виды кластеров:
- Отказоустойчивые кластеры (High-availability clusters, HA, кластеры высокой доступности)
- Кластеры с балансировкой нагрузки (Load balancing clusters, LBC)
- Вычислительные кластеры (High performance computing clusters, HPC)
- Системы распределенных вычислений (grid) иногда относят к отдельному типу кластеров, который может состоять из территориально разнесенных серверов с отличающимися операционными системами и аппаратной конфигурацией. В случае grid-вычислений взаимодействия между узлами происходят значительно реже, чем в вычислительных кластерах. В grid-системах могут быть объединены HPC-кластеры, обычные рабочие станции и другие устройства.
Для тех, кто не в курсе, коротко расскажу, как устроены бизнес-приложения 1С. Это приложения, написанные на предметно-ориентированном языке, «заточенном» под автоматизацию учётных бизнес-задач. Для выполнения приложений, написанных на этом языке, на компьютере должен быть установлен рантайм платформы 1С:Предприятия.
1С:Предприятие 8.0
Первая версия сервера приложений 1С (еще не кластер) появилась в версии платформы 8.0. До этого 1С работала в клиент-серверном варианте, данные хранились в файловой СУБД или MS SQL, а бизнес-логика работала исключительно на клиенте. В версии же 8.0 был сделан переход на трехзвенную архитектуру «клиент – сервер приложений – СУБД».
Классификация прикладных программ
Сервер 1С в платформе 8.0 представлял собой СОМ+ сервер, умеющий исполнять прикладной код на языке 1С. Использование СОМ+ обеспечивало нам готовый транспорт, позволяющий клиентским приложениям общаться с сервером по сети. Очень многое в архитектуре и клиент-серверного взаимодействия, и прикладных объектов, доступных разработчику 1С, проектировалось с учетом использования СОМ+.
В то время в архитектуру не было заложено отказоустойчивости, и падение сервера вызывало отключение всех клиентов. При падении серверного приложения СОМ+ поднимал его при обращении к нему первого клиента, и клиенты начинали свою работу с начала – с коннекта к серверу. В то время всех клиентов обслуживал один процесс.
1С:Предприятие 8.1
В следующей версии мы захотели:
- Обеспечить нашим клиентам отказоустойчивость, чтобы аварии и ошибки у одних пользователей не приводили авариям и ошибкам у других пользователей.
- Избавиться от технологии СОМ+. СОМ+ работала только на Windows, а в то время уже начала становиться актуальной возможность работы под Linux.
Так в версии 8.1 появился первый кластер. Мы реализовали свой протокол удаленного вызова процедур (поверх ТСР), который по внешнему виду выглядел для конечного потребителя-клиента практически как СОМ+ (т.е. нам практически не пришлось переписывать код, отвечающий за клиент-серверные вызовы). При этом сервер, реализованный нами на С++, мы сделали платформенно-независимым, способным работать и на Windows, и на Linux.
На смену монолитному серверу версии 8.0 пришло 3 вида процессов – рабочий процесс, обслуживающий клиентов, и 2 служебных процесса, поддерживающих работу кластера:
- rphost – рабочий процесс, обслуживающий клиентов и исполняющий прикладной код. В составе кластера может быть больше одного рабочего процесса, разные рабочие процессы могут исполняться на разных физических серверах – за счёт этого достигается масштабируемость.
- ragent – процесс агента сервера, запускающий все другие виды процессов, а также ведущий список кластеров, расположенных на данном сервере.
- rmngr – менеджер кластера, управляющий функционированием всего кластера (но при этом на нем не работает прикладной код).
Под катом – схема работы этих трёх процессов в составе кластера.
Клиент на протяжении сессии работал с одним рабочим процессом, падение рабочего процесса означало для всех клиентов, которых этот процесс обслуживал, аварийное завершение сессии. Остальные клиенты продолжали работу.
1С:Предприятие 8.2
В версии 8.2 мы захотели, чтобы приложения 1С могли запускаться не только в нативном (исполняемом) клиенте, а ещё и в браузере (без модификации кода приложения). В связи с этим, в частности, встала задача отвязать текущее состояние приложения от текущего соединения с рабочим процессом rphost, сделать его stateless. Как следствие возникло понятие сеанса и сеансовых данных, которые нужно было хранить вне рабочего процесса (потому что stateless). Был разработан сервис сеансовых данных, хранящий и кэширующий сеансовую информацию. Появились и другие сервисы — сервис управляемых транзакционных блокировок, сервис полнотекстового поиска и т.д.
В этой версии также появились несколько важных нововведений – улучшенная отказоустойчивость, балансировка нагрузки и механизм резервирования кластеров.
Отказоустойчивость
Поскольку процесс работы стал stateless и все необходимые для работы данные хранились вне текущего соединения «клиент – рабочий процесс», в случае падения рабочего процесса клиент при следующем обращении к серверу переключался на другой, «живой» рабочий процесс. В большинстве случаев такое переключение происходило незаметно для клиента.
Механизм работает так. Если клиентский вызов к рабочему процессу по какой-то причине не смог исполниться до конца, то клиентская часть способна, получив ошибку вызова, этот вызов повторить, переустановив соединение с тем же рабочим процессом или с другим. Но повторять вызов можно не всегда; повтор вызова означает, что мы отправили вызов на сервер, а результата не получили.
Мы стараемся повторить вызов, при этом при выполнении повторного вызова мы оцениваем, каков результат на сервере был у предшествующего вызова (информация об этом сохраняется на сервере в данных сеанса), потому что если вызов успел там «наследить» (закрыть транзакцию, сохранить сеансовые данные и т.п.) – то просто так повторять его нельзя, это приведет к рассогласованию данных. Если повторять вызов нельзя, клиент получит сообщение о неисправимой ошибке, и клиентское приложение придется перезапустить. Если же вызов «наследить» не успел (а это наиболее частая ситуация, т.к. многие вызовы не меняют данных, например, отчеты, отображение данных на форме и т.п., а те, которые меняют данные – пока транзакция не зафиксирована или пока изменение сеансовых данных не отправлено в менеджер – следов вызов не оставил) — его можно повторить без риска рассогласования данных. Если рабочий процесс упал или произошел обрыв сетевого соединения – такой вызов повторяется, и эта «катастрофа» для клиентского приложения происходит полностью незаметно.
Балансировка нагрузки
Задача балансировки нагрузки в нашем случае звучит так: в систему заходит новый клиент (или уже работающий клиент совершает очередной вызов). Нам надо выбрать, на какой сервер и в какой рабочий процесс направить вызов клиента, чтобы обеспечить клиенту максимальное быстродействие.
Это стандартная задача для кластера с балансировкой нагрузки. Есть несколько типовых алгоритмов её решения, например:
- Round-Robin (циклический) – серверам присваиваются порядковые номера, первый запрос отправляется на первый сервер, второй запрос – на второй и т. д. до достижения последнего сервера. Следующий запрос направляется на первый сервер и всё начинается с начала. Алгоритм прост в реализации, не требует связи между серверами и неплохо подходит для «легковесных» запросов. Но при балансировке по этому алгоритму не учитывается производительность серверов (которая может быть разной) и текущая загруженность серверов.
- Weighted Round Robin – усовершенствованный Round-Robin: каждому серверу присваивается весовой коэффициент в соответствии с его производительностью, и сервера с бо́льшим весом обрабатывают больше запросов.
- Least Connections: новый запрос передается на сервер, обрабатывающий в данный момент наименьшее количество запросов.
- Least Response Time: сервер выбирается на основе времени его ответа: новый запрос отдаётся серверу, ответившему быстрее других серверов.
Запрос от нового клиента адресуется на наиболее производительный на данный момент сервер.
Запрос от существующего клиента в большинстве случаев адресуется на тот сервер и в тот рабочий процесс, в который адресовался его предыдущий запрос. С работающим клиентом связан обширный набор данных на сервере, передавать его между процессами (а тем более между серверами) – довольно накладно (хотя мы умеем делать и это).
Запрос от существующего клиента передается в другой рабочий процесс в двух случаях:
- Процесса больше нет: рабочий процесс, с которым ранее взаимодействовал клиент, более недоступен (упал процесс, стал недоступен сервер и т.п.).
- Есть более производительный сервер: если в кластере есть сервер, отличающийся по производительности в два и более раза по сравнению с сервером, где запушен текущий рабочий процесс, то платформа считает, что даже ценой миграции клиентского контекста нам выгоднее выполнять запросы на более производительном сервере. Переноситься клиенты с одного сервера на другой будут постепенно, по одному, с периодической оценкой результата – что в плане производительности стало с серверами после переноса каждого из клиентских процессов. Цель этой процедуры – выравнивание производительности серверов в кластере (т.е. равномерная загрузка серверов).
Резервирование кластеров
Программные и аппаратные компоненты вычислительной сети
Вычислительной сетью называют совокупность взаимосвязанных и распределенных по некоторой территории ЭВМ.
Вычислительная сеть – вычислительный комплекс, включающий территориально распределенную систему компьютеров и их терминалов, объединенных в единую систему.
По степени географического распространения вычислительные сети подразделяются на локальные, городские, корпоративные, глобальные и др.
Вычислительная сеть состоит из трех компонент:
— сети передачи данных, включающей в себя каналы передачи данных и средства коммутации;
— компьютеров, связанных сетью передачи данных;
— сетевого программного обеспечения.
Вычислительная сеть – это сложный комплекс взаимосвязанных программных и аппаратных компонентов:
компьютеров (хост-компьютеры, сетевые компьютеры, рабочие станции, серверы), размещенных в узлах сети;
сетевой операционной системы и прикладного программного обеспечения, управляющих компьютерами;
коммуникационного оборудования – аппаратуры и каналов передачи данных с сопутствующими им периферийными устройствами; интерфейсных плат и устройств (сетевые платы, модемы); маршрутизаторов и коммутационных устройств.
Программные и аппаратные компоненты вычислительной сети
Вычислительная сеть, network — распределенная в пространстве система программных и аппаратных компонентов, связанных линиями компьютерной связи.
Среди аппаратных средств можно выделить компьютеры и коммуникационное оборудование. Программные компоненты состоят из операционных систем и сетевых приложений.
В настоящее время в сети используются компьютеры различных типов и классов с различными характеристиками. Это основа любой вычислительной сети. Компьютеры, их характеристики определяют возможности вычислительной сети. Но в последнее время и коммуникационное оборудование (кабельные системы, повторители, мосты, маршрутизаторы и др.) стало играть не менее важную роль. Некоторые из этих устройств, учитывая их сложность, стоимость и другие характеристики, можно назвать компьютерами, решающими сугубо специфические задачи по обеспечению работоспособности сетей.
Для эффективной работы сетей используются специальные сетевые операционные системы (сетевые ОС), которые, в отличие от персональных операционных систем, предназначены для решения специальных задач по управлению работой сети компьютеров. Сетевые ОС устанавливаются на специально выделенные компьютеры.
Сетевые приложения — это прикладные программные комплексы, которые расширяют возможности сетевых ОС. Среди них можно выделить почтовые программы, системы коллективной работы, сетевые базы данных и др.
В процессе развития сетевых ОС некоторые функции сетевых приложений становятся обычными функциями ОС.
Все устройства, подключаемые к сети, можно разделить на три функциональные группы:
1)рабочие станции;
2)серверы сети;
3)коммуникационные узлы.
1) Рабочая станция, workstation — это персональный компьютер, подключенный к сети, на котором пользователь сети выполняет свою работу. Каждая рабочая станция обрабатывает свои локальные файлы и использует свою операционную систему. Но при этом пользователю доступны ресурсы сети.
Можно выделить три типа рабочих станций:
• рабочая станция с локальным диском,
• бездисковая рабочая станция,
• удаленная рабочая станция.
На рабочей станции с диском (жестким или гибким) операционная система загружается с этого локального диска. Для бездисковой станции операционная система загружается с диска файлового сервера. Такая возможность обеспечивается специальной микросхемой, устанавливаемой на сетевом адаптере бездисковой станции.
Удаленная рабочая станция — это станция, которая подключается к локальной сети через телекоммуникационные каналы связи (например, с помощью телефонной сети).
2) Сервер сети, network server — это компьютер, подключенный к сети и предоставляющий пользователям сети определенные услуги, например хранение данных общего пользования, печать заданий, обработку запроса к СУБД, удаленную обработку заданий и т. д.
По выполняемым функциям можно выделить следующие группы серверов.
Файловый сервер, file server — компьютер, хранящий данные пользователей сети и обеспечивающий доступ пользователей к этим данным. Как правило, этот компьютер имеет большой объем дискового пространства. Файловый сервер обеспечивает одновременный доступ пользователей к общим данным.
Файловый сервер выполняет следующие функций:
• согласование изменений данных, выполняемых разными пользователями;
Сервер баз данных, database server — компьютер, выполняющий функции хранения, обработки и управления файлами баз данных (БД).
Сервер баз данных выполняет следующие функции:
• хранение баз данных, поддержку их целостности, полноты, актуальности;
• прием и обработку запросов к базам данных, а также пересылку результатов обработки на рабочую станцию;
• обеспечение авторизированного доступа к базам данных, поддержку системы ведения и учета пользователей, разграничение доступа пользователей;
• согласование изменений данных, выполняемых разными пользователями;
• поддержку распределенных баз данных, взаимодействие с другими серверами баз данных, расположенными в другом месте.
Сервер прикладных программ, application server — компьютер, который используется для выполнения прикладных программ пользователей.
Коммуникационный сервер, communications server — устройство или компьютер, который предоставляет пользователям локальной сети прозрачный доступ к своим последовательным портам ввода/вывода.
С помощью коммуникационного сервера можно создать разделяемый модем, подключив его к одному из портов сервера. Пользователь, подключившись к коммуникационному серверу, может работать с таким модемом так же, как если бы модем был подключен непосредственно к рабочей станции.
Сервер доступа, access server — это выделенный компьютер, позволяющий выполнять удаленную обработку заданий. Программы, инициируемые с удаленной рабочей станции, выполняются на этом сервере.
От удаленной рабочей станции принимаются команды, введенные пользователем с клавиатуры, а возвращаются результаты выполнения задания.
Факс-сервер, fax server — устройство или компьютер, который выполняет рассылку и прием факсимильных сообщений для пользователей локальной сети.
Сервер резервного копирования данных, backup server — устройство или компьютер, который решает задачи создания, хранения и восстановления копий данных, расположенных на файловых серверах и рабочих станциях. В качестве такого сервера может использоваться один из файловых серверов сети.
Следует отметить, что все перечисленные типы серверов могут функционировать на одном выделенном для этих целей компьютере.
3) К коммуникационным узлам сети относятся следующие устройства:
Протяженность сети, расстояние между станциями в первую очередь определяются физическими характеристиками передающей среды (коаксиального кабеля, витой пары и т. д.). При передаче данных в любой среде происходит затухание сигнала, что и приводит к ограничению расстояния. Чтобы преодолеть это ограничение и расширить сеть, устанавливают специальные устройства — повторители, мосты и коммутаторы. Часть сети, в которую не входит устройство расширения, принято называть сегментом сети.
Повторитель, repeater — устройство, усиливающее или регенерирующее пришедший на него сигнал. Повторитель, приняв пакет из одного сегмента, передает его во все остальные. При этом повторитель не выполняет развязку присоединенных к нему сегментов. В каждый момент времени во всех связанных повторителем сегментах поддерживается обмен данными только между двумя станциями.
Коммутатор, switch, мост, bridge — это устройство, которое, как и повторитель, позволяет объединять несколько сегментов. В отличие от повторителя, мост выполняет развязку присоединенных к нему сегментов, то есть одновременно поддерживает несколько процессов обмена данными для каждой пары станций разных сегментов.
Маршрутизатор, router — устройство, соединяющее сети одного или разных типов по одному протоколу обмена данными. Маршрутизатор анализирует адрес назначения и направляет данные по оптимально выбранному маршруту.
Шлюз, gateway — это устройство, позволяющее организовать обмен данными между разными сетевыми объектами, использующими разные протоколы обмена данными.
Основными аппаратными компонентами сети являются следующие:
1. Абонентские системы: компьютеры (рабочие станции или клиенты и серверы); принтеры; сканеры и др.
2. Сетевое оборудование: сетевые адаптеры; концентраторы (хабы); мосты; маршрутизаторы и др.
3. Коммуникационные каналы: кабели; разъемы; устройства передачи и приема данных в беспроводных технологиях.
Основными программными компонентами сети являются следующие:
1. Сетевые операционные системы, где наиболее известные из них это: MS Windows; LANtastic; NetWare; Unix; Linux и т.д.
2. Сетевое программное обеспечение (Сетевые службы): клиент сети; сетевая карта; протокол; служба удаленного доступа.
ЛВС (Локальная вычислительная сеть) – это совокупность компьютеров, каналов связи, сетевых адаптеров, работающих под управлением сетевой операционной системы и сетевого программного обеспечения.
В ЛВС каждый ПК называется рабочей станцией, за исключением одного или нескольких компьютеров, которые предназначены для выполнения функций серверов. Каждая рабочая станция и сервер имеют сетевые карты (адаптеры), которые посредством физических каналов соединяются между собой. В дополнение к локальной операционной системе на каждой рабочей станции активизируется сетевое программное обеспечение, позволяющее станции взаимодействовать с файловым сервером.
Компьютеры, входящие в ЛВС клиент – серверной архитектуры, делятся на два типа: рабочие станции, или клиенты, предназначенные для пользователей, и серверы, которые, как правило, недоступны для обычных пользователей и предназначены для управления ресурсами сети.
Рабочие станции
Рабочая станция (workstation) – это абонентская система, специализированная для решения определенных задач и использующая сетевые ресурсы. К сетевому программному обеспечению рабочей станции относятся следующие службы:
— клиент для сетей;
— служба доступа к файлам и принтерам;
-сетевые протоколы для данного типа сетей;
-контроллер удаленного доступа.
Рабочая станция отличается от обычного автономного персонального компьютера следующим:
-наличием сетевой карты (сетевого адаптера) и канала связи;
-на экране во время загрузки ОС появляются дополнительные сообщения, которые информируют о том, что загружается сетевая операционная система;
-перед началом работы необходимо сообщить сетевому программному обеспечению имя пользователя и пароль. Это называется процедурой входа в сеть;
-после подключения к ЛВС появляются дополнительные сетевые дисковые накопители;
появляется возможность использования сетевого оборудования, которое может находиться далеко от рабочего места.
Сетевые адаптеры
Для подключения ПК к сети требуется устройство сопряжения, которое называют сетевым адаптером, интерфейсом, модулем, или картой. Оно вставляется в гнездо материнской платы. Карты сетевых адаптеров устанавливаются на каждой рабочей станции и на файловом сервере. Рабочая станция отправляет запрос через сетевой адаптер к файловому серверу и получает ответ через сетевой адаптер, когда файловый сервер готов.
Сетевые адаптеры вместе с сетевым программным обеспечением способны распознавать и обрабатывать ошибки, которые могут возникнуть из-за электрических помех, коллизий или плохой работы оборудования.
Различные типы сетевых адаптеров отличаются не только методами доступа к каналу связи и протоколами, но еще и следующими параметрами:
-объем буфера для пакета;
-совместимость с различными микропроцессорами;
-использованием прямого доступа к памяти (DMA);
-адресация портов ввода/вывода и запросов прерывания;
Источник: megaobuchalka.ru
Сервера прикладного уровня (application gateways)
Все типы могут одновременно встретиться в одном брандмауэре.
Брандмауэры с пакетными фильтрами принимают решение о том, пропускать пакет или отбросить, просматривая IP-адреса, флаги или номера TCP портов в заголовке этого пакета. IP-адрес и номер порта — это информация сетевого и транспортного уровней соответственно, но пакетные фильтры используют и информацию прикладного уровня, т.к. все стандартные сервисы в TCP/IP ассоциируются с определенным номером порта.
Сервера прикладного уровня
Брандмауэры с серверами прикладного уровня используют сервера конкретных сервисов — TELNET, FTP и т.д. (proxy server), запускаемые на брандмауэре и пропускающие через себя весь трафик, относящийся к данному сервису. Таким образом, между клиентом и сервером образуются два соединения: от клиента до брандмауэра и от брандмауэра до места назначения.
Использование серверов прикладного уровня позволяет решить важную задачу — скрыть от внешних пользователей структуру локальной сети, включая информацию в заголовках почтовых пакетов или службы доменных имен (DNS). Другим положительным качеством является возможность аутентификации на пользовательском уровне (аутентификация — процесс подтверждения идентичности чего-либо; в данном случае это процесс подтверждения, действительно ли пользователь является тем, за кого он себя выдает). Немного подробнее об аутентификации будет сказано ниже.
При описании правил доступа используются такие параметры как название сервиса, имя пользователя, допустимый временной диапазон использования сервиса, компьютеры, с которых можно пользоваться сервисом, схемы аутентификации. Сервера протоколов прикладного уровня позволяют обеспечить наиболее высокий уровень защиты — взаимодействие с внешним миром реализуется через небольшое число прикладных программ, полностью контролирующих весь входящий и выходящий трафик.
Сервера уровня соединения
Сервер уровня соединения представляет из себя транслятор TCP соединения. Пользователь образует соединение с определенным портом на брандмауэре, после чего последний производит соединение с местом назначения по другую сторону от брандмауэра. Во время сеанса этот транслятор копирует байты в обоих направлениях, действуя как провод.
Как правило, пункт назначения задается заранее, в то время как источников может быть много (соединение типа один — много). Используя различные порты, можно создавать различные конфигурации.
Такой тип сервера позволяет создавать транслятор для любого определенного пользователем сервиса, базирующегося на TCP, осуществлять контроль доступа к этому сервису, сбор статистики по его использованию.
8.3. Сравнительные характеристики
Ниже приведены основные преимущества и недостатки пакетных фильтров и серверов прикладного уровня относительно друг друга.
К положительным качествам пакетных фильтров следует отнести следующие:
относительно невысокая стоимость
гибкость в определении правил фильтрации
небольшая задержка при прохождении пакетов
Недостатки у данного типа брандмауэров следующие:
локальная сеть видна (маршрутизируется) из INTERNET
правила фильтрации пакетов трудны в описании, требуются очень хорошие знания технологий TCP и UDP
при нарушении работоспособности брандмауэра все компьютеры за ним становятся полностью незащищенными либо недоступными
аутентификацию с использованием IP-адреса можно обмануть использованием IP-спуфинга (атакующая система выдает себя за другую, используя ее IP-адрес)
отсутствует аутентификация на пользовательском уровне
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Источник: studopedia.ru