Рис. 1.2 Модель взаимодействия клиент-сервер
Обычно нет четкого различия разделения функций системы между клиентом и сервером. Например, сервер распределенной БД может выступать клиентом, передающим запросы на файловые серверы, отвечающие за хранение таблиц этой БД.
Рассмотрим некое типичное приложение, которое в соответствие с современными представлениями может быть разделено на следующие логические уровни (рис.1.3).
Рис. 1.3 Логические уровни приложения
Уровень интерфейса обычно реализуется на клиенте, что вполне естественно.
На уровне обработки обычно реализуется основная бизнес-логика приложения (функциональность).
Уровень данных содержит программы, которые предоставляют данные обрабатывающим их приложениям. Особым свойством этого уровня является требование сохранности (persistence). Это означает, что когда приложение не работает, данные должны сохраняться в определенном месте (файле или БД) для последующего использования. Этот уровень обычно реализуется на сервере.
Кроме хранения данных, уровень данных обеспечивает поддержку целостности данных для разных приложений. Для БД поддержание целостности означает, что схемы БД, специфические условия приложений (триггеры БД), хранимые процедуры и прочее также хранятся на этом уровне.
Обычно уровень данных реализуется в форме реляционной БД. Это обеспечивает независимость данных от приложений. Применение реляционных баз данных в модели клиент-сервер помогает отделить уровень обработки от уровня данных, рассматривая данные и их обработку независимо друг от друга.
Варианты архитектуры клиент-сервер
Разделение системы на три логических уровня приводит к проблеме физического распределения приложений по отдельным компьютерам в модели клиент-сервер. Самая простая организация предполагает использование двух типов машин:
1. Клиентские машины (рабочие станции), на которых устанавливаются программы-клиенты, реализующие интерфейс.
2. Серверы, реализующие все остальное, то есть уровни обработки и данных.
Проблема такой организации состоит в том, что система не является распределенной, все происходит на сервере, а клиент используется как простой терминал.
Поскольку на практике разных пользователей системы обычно интересует доступ к одним и тем же данным, наиболее простым разнесением функций системы между несколькими компьютерами будет разделение логических уровней приложения между одной серверной частью приложения, отвечающей за доступ к данным, и находящимися на нескольких компьютерах клиентскими частями, реализующими интерфейс пользователя. Логика приложения может быть отнесена к серверу, клиентам или разделена между ними.
Таким образом, программные решения варьируются от минимизации функций интерфейса пользователя на клиенте (тонкий клиент) до передачи клиенту всей работы с пользовательским интерфейсом (толстый клиент). В обоих случаях мы отделяем от приложения графический внешний интерфейс, связанный с остальной частью приложения (находящейся на сервере) с помощью конкретного для данного приложения протокола. В этом подходе внешний интерфейс делает только то, что нужно для предоставления интерфейса приложения.
Архитектуру построенных по такому принципу называют клиент-серверной или двухзвенной (two-tiered architecture) (рис. 1.4). Хотя подобные системы часто не относят к классу распределенных, но формально они могут считаться простейшими представителями распределенных систем.
Поделитесь с Вашими друзьями: |