Классическая двухуровневая архитектура клиент-сервер
Термин "клиент-сервер" означает такую архитектуру программного комплекса, в которой его функциональные части взаимодействуют по схеме "запрос-ответ". Если рассмотреть две взаимодействующие части этого комплекса, то одна из них (клиент) инициирует запросы, а другая (сервер) на них отвечает.
Часть программного обеспечения - клиент - устанавливается на персональную рабочую станцию пользователя (система на базе ПК, Mac, Unix, OS/2). Клиент берет на себя выполнение некоторых функций, главным образом интерфейс с пользователем, установление соединений, а в некоторых случаях и тестирование.
Второй элемент - сервер - практически всегда является базой данных и устанавливается на предназначенный для этих целей компьютер. Он отвечает за доступ и работу с хранимыми данными.
Для эффективной работы системы необходимо установить также дополнительное программное обеспечение, такое как промежуточное ПО и инструменты управления защитой системы. По мере развития системы роли могут меняться, например некоторый программный блок будет одновременно выполнять функции сервера по отношению к одному блоку и клиента по отношению к другому.
Заметим, что любая информационная система должна иметь минимум три основные функциональные части - модули хранения данных, их обработки и интерфейса с пользователем. Каждая из этих частей может быть реализована независимо от двух других. Например, не изменяя программ, используемых для хранения и обработки данных, можно изменить интерфейс с пользователем таким образом, что одни и те же данные будут отображаться в виде таблиц, графиков или гистограмм. Не меняя программ представления данных и их хранения, можно изменить программы обработки, например, изменив алгоритм полнотекстового поиска. И, наконец, не меняя программ представления и обработки данных, можно изменить программное обеспечение для хранения данных, перейдя, например, на другую файловую систему.
В классической архитектуре клиент-сервер приходится распределять три основные части приложения по двум физическим модулям. Обычно ПО хранения данных располагается на сервере (например, сервере базы данных), интерфейс с пользователем - на стороне клиента, а вот обработку данных приходится распределять между клиентской и серверной частями. В этом-то и заключается основной недостаток двухуровневой архитектуры, из которого следуют несколько неприятных особенностей, сильно усложняющих разработку клиент-серверных систем.
Подходы «мощный сервер» и «мощный клиент».
При разбиении алгоритмов обработки данных необходимо синхронизировать поведение обеих частей системы. Все разработчики должны иметь полную информацию о последних изменениях, внесенных в систему, и понимать эти изменения. Это создает большие сложности при разработке клиент-серверных систем, их установке и сопровождении, поскольку необходимо тратить значительные усилия на координацию действий разных групп специалистов. В действиях разработчиков часто возникают противоречия, а это тормозит развитие системы и вынуждает изменять уже готовые и проверенные элементы.
Чтобы избежать несогласованности различных элементов архитектуры, пытаются выполнять обработку данных на одной из двух физических частей - либо на стороне клиента ("мощный" клиент), либо на сервере ("мощный" сервер).
На рисунке показан переход от подхода "мощный сервер" (слева) к подходу "мощный клиент" (справа).
В рамках подхода «мощный» сервер почти вся работа осуществляется на сервере. В рамках подхода «мощный» клиент все приложения находятся на клиентской стороне, а по сети к серверу могут посылаться лишь SQL-вызовы.
Достоинства «мощного» сервера:
1. Размещение программы максимально близко к данным значительно снижает объем пересылаемой информации.
2. Использование такого инструмента баз данных, как хранимые процедуры, повышает целостность и безопасность данных, в то же время уменьшая загруженность разработчика приложений.
3. Приложения показывают лучшую масштабируемость по производительности.
Недостатки "мощного" сервера:
• усложняется реализация, так как языки типа SQL не приспособлены для разработки распределенного ПО и нет хороших средств отладки;
• производительность программ, написанных на языках типа SQL, значительно ниже, чем созданных на других языках, что имеет важное значение для сложных систем;
• программы, написанные на СУБД-языках, обычно работают недостаточно надежно; ошибка в них может привести к выходу из строя всего сервера баз данных;
• получившиеся таким образом программы не полностью переносимы на другие системы и платформы.
Достоинства «мощного» клиентавытекают из принципов реинжиниринга, реализация которых приводит к необходимости использовать мощные рабочие станции.
1. Высокоразвитый графический интерфейс.
2. Возможностей одновременной работы с несколькими приложениями.
3. Высокая скорость работы.
Недостатки:
• сложность администрирования;
• сложность обновления ПО, поскольку его замену нужно производить одновременно по всей системе, иначе могут возникнуть ошибки или несогласованность данных;
• сложность распределения полномочий, так как разграничение доступа происходит не по действиям, а по таблицам;
• перегрузка сети вследствие передачи по ней необработанных, а значит, избыточных, данных;
• слабая защита данных, поскольку сложно правильно распределить полномочия.