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