Программа клиент сервер это

Этот курс рассчитан на новичков, потому что проектировать архитектуру серьезного приложения ты не будешь еще долго. Но не надо расстраиваться, хорошая архитектура – это скорее исключение, чем правило. Очень сложно выбрать правильную архитектуру приложения до создания приложения.

Примеры популярных архитектур больших серверных приложений:

  • Многослойная архитектура (Layered Architecture).
  • Многоуровневая архитектура (Tiered Architecture).
  • Сервис-ориентированная архитектура (Service Oriented Architecture – SOA).
  • Микросервисная архитектура (Microservice Architecture).

Каждая из них имеет свои плюсы и свои минусы. Но изучение их тебе ничего не даст. Архитектура – это ответ на вопрос «как организовать взаимодействие тысяч объектов внутри системы». И пока ты на своем опыте не почувствуешь всю сложность проблемы, ты не сможешь понять и всю многогранность решения.

Все приложения используют какую-нибудь архитектуру или или хотя бы делают вид. Поэтому знание популярных подходов к проектированию приложений позволит тебе быстрее и лучше понимать, как приложение устроено. А значит вносить изменения именно в те места, куда нужно.

Клиент-серверная архитектура в картинках

А что значит «вносить изменения куда нужно?». Есть места, куда не нужно вносить изменения? Именно.

Чтобы добавить конкретики, давай предположим, что ты работаешь над средним backend-проектом. Он пишется вот уже 5 лет командой из 20 человек. На проект потрачено 100 человеко-лет, в нем около 100 тысяч строк кода. Суммарно он состоит из двух тысяч классов, которые разбиты на 10 модулей разного размера.

И добавим суровой реальности. Логика некоторых задач размазана по нескольким модулям. Также бизнес-логика может быть во фронтенде (написанном на JavaScript) и/или записана в виде stored procedure прямо в базе данных. Ты все еще уверен, что сразу сможешь определить место, куда именно вносить изменения?

Это не какой-то кошмар, который я придумал, чтобы вас напугать. Это типичнейший проект. Бывает еще и похуже. Почему же так происходит? Причин может быть сколько угодно, но почти всегда присутствуют такие:

  • На проекте работает куча людей – каждый из них видит его немного по-своему.
  • За 5 лет в проекте сменилось 10 человек, новички не стали сильно в нем разбираться.
  • Создание софта – это постоянное внесение изменений, которые постоянно все меняют.
  • Пять лет назад, когда определялись с архитектурой, задумка проекта была несколько иной.

Но главное, что независимо от архитектуры проекта, все работающие над ним программисты, придерживались одного и того же понимания, как этот проект устроен. Начнем с самого простого понятия – клиент-серверной архитектуры.

1.2 Концепция взаимодействия клиент-сервер

Сейчас мы разберемся с концепцией, которая лежит в основе архитектуры клиент-сервер и позволит вам лучше понять как организовано взаимодействие миллионов программ в сети интернет.

Как понятно из названия, в данной концепции участвуют две стороны: клиент и сервер. Здесь все как в жизни: клиент – это заказчик той или иной услуги, а сервер – поставщик услуг. Клиент и сервер физически представляют собой программы, например, типичным клиентом является браузер .

В качестве сервера можно привести следующие примеры:

  • Веб-сервера, например Tomcat.
  • Сервера баз данных, например, MySQL.
  • Платежные шлюзы, например Stripe.

Клиент с сервером обычно общаются через интернет (хотя могут работать и в одной локальной сети и вообще в любых других типах сетей). Общение происходит по стандартным протоколам, таким как HTTP, FTP или более низкоуровневым, таким как TCP или UDP.

Протокол обычно выбирается под тип услуги, которую оказывают сервера. Например, если это видеосвязь, то обычно используется UDP.

Помните, как работает Tomcat и его сервлеты? Сервер получает HTTP-сообщение, распаковывает его, достает оттуда всю нужную информацию и передает сервлету на обработку. Затем результат обработки упаковывает обратно в HTTP-response и отсылает клиенту.

Это и есть типичное взаимодействие клиент-сервер. Браузер – это веб-клиент, а Tomcat – это веб-сервер. Tomcat даже так и называется – веб-сервер.

Но если подумать, то важно не название, а суть – распределение ролей между программами. Твой JS-скрипт, работающий в HTML-странице, вполне можно назвать клиентом, а твой сервлет – сервером. Ведь они работают в паре в рамках концепции клиент-сервер.

1.3 Важный нюанс

Еще стоит отметить, что в основе взаимодействия клиент-сервер лежит принцип того, что такое взаимодействие начинает клиент: сервер лишь отвечает клиенту и сообщает о том может ли он предоставить услугу клиенту и если может, то на каких условиях.

Не имеет значения, где физически находится клиент и где сервер. Клиентское программное обеспечение и серверное программное обеспечение обычно установлено на разных машинах, но также они могут работать и на одном компьютере.

Данную концепцию разработали как первый шаг в сторону упрощения сложной системы. У нее есть такие сильные стороны:

  • Упрощение логики: сервер ничего не знает о клиенте и как он будет использовать его данные в дальнейшем.
  • Могут быть слабые клиенты: все ресурсоемкие задачи можно перенести на сервер.
  • Независимое развитие кода клиентов и кода сервера.
  • Множество различных клиентов, пример – Tomcat и разные браузеры.

Самый базовый вариант взаимодействия клиента и сервера представлен на картинке:

клиент-сервер

Тут важно отметить две детали. Во-первых, из картинки видно, что к одному серверу могут обращаться множество клиентов. Во-вторых, они могут к нему обращаться одновременно. Это тоже важная часть работы сервера.

Читайте также:
На телевизоре mi пропало изображение звук есть надпись аудио программы

Один клиент обычно взаимодействует с одним пользователем, поэтому там часто даже авторизация не нужна. Однако сервер обрабатывает запросы тысяч клиентов и разрабатывая для него код нужно уметь отличать авторизацию от аутентификации.

Еще важно, что сервер обрабатывает тысячи запросов параллельно. А это значит, что, разрабатывая код бэкенда, тебе постоянно нужно будет думать над задачей одновременного доступа к ресурсам. Также у кода сервера очень высокая вероятность race condition (гонки потоков), deadlock (взаимная блокировка потоков).

Жизненный цикл важных объектов нужно обязательно контролировать:

Ты не можешь просто так запустить на сервере новый поток через new Thread().start() . Вместо этого тебе нужно иметь ThreadPool, который будет шариться между всеми сервисными потоками.

Также нельзя просто так запустить асинхронную задачу, они ведь тоже выполняются в отдельных потоках. Создавая такую задачу, ты всегда должен знать, какой пул-потоков ее выполняет и что произойдет, если такой пул переполнится.

Все работы с файлами и директориями нужно делать через try-with-resources. Если в обычном приложении ты забыл закрыть поток или файл – разве это проблема? Закроется сам при выходе из программы. А вот если ты где-то в коде забыл закрыть файл на сервере, и ваш сервер работает месяцами… Скоро таких незакрытых файлов накопятся тысячи и ОС перестанет открывать новые файлы на чтение (работу с файлами контролирует ОС). Тимлид вас по головке не погладит…

1.4 Архитектура «клиент-сервер»

еще один важный момент. Архитектура клиент-сервер определяет лишь общие принципы взаимодействия между компьютерами, детали взаимодействия определяют различные протоколы.

Данная концепция (клиент-сервер) говорит нам, что нужно разделять машины в сети на клиентские, которым всегда что-то надо и на серверные, которые дают то, что надо. При этом взаимодействие всегда начинает клиент, а правила, по которым происходит взаимодействие описывает протокол.

Существует два вида архитектуры взаимодействия клиент-сервер: первый получил название двухуровневая архитектура клиент-серверного взаимодействия, второй – многоуровневая архитектура клиент-сервер (иногда его называют трехуровневая архитектура или трехзвенная архитектура, но это частный случай).

Принцип работы двухуровневой архитектуры взаимодействия клиент-сервер заключается в том, что обработка запроса происходит на одном сервере без обращения к другим серверам в процессе этой обработки.

Двухуровневую модель взаимодействия клиент-сервер можно нарисовать в виде простой схемы.

двухуровневой архитектуры взаимодействия клиент-сервер

Тут видно, что первый уровень – это все, что касается клиента, а второй уровень – это все, что касается сервера.

Источник: javarush.com

1.3 Понятие клиент-серверных систем

Клиент-сервер – это вычислительная или сетевая архитектура, в которой задания или сетевая нагрузка распределены между поставщиками услуг, называемыми серверами, и заказчиками услуг, называемыми клиентами. Фактически клиент и сервер – это программное обеспечение. [4, с. 46] Пример двухуровневой архитектуры изображен на рисунке 1.1.

Рисунок 1.1 ­– Двухуровневая архитектура клиент-сервера

Обычно эти программы расположены на разных вычислительных машинах и взаимодействуют между собой через вычислительную сеть посредством сетевых протоколов, но они могут быть расположены также и на одной машине. Программы-серверы ожидают от клиентских программ запросы и предоставляют им свои ресурсы в виде данных (например, загрузка файлов посредством HTTP, FTP, BitTorrent, потоковое мультимедиа или работа с базами данных) или в виде сервисных функций (например, работа с электронной почтой, общение посредством систем мгновенного обмена сообщениями или просмотр web-страниц во всемирной паутине).

Поскольку одна программа-сервер может выполнять запросы от множества программ-клиентов, её размещают на специально выделенной вычислительной машине, настроенной особым образом, как правило, совместно с другими программами-серверами, поэтому производительность этой машины должна быть высокой. Из-за особой роли такой машины в сети, специфики её оборудования и программного обеспечения, её также называют сервером, а машины, выполняющие клиентские программы, соответственно, клиентами.

Любая программа, компьютеризирующая выполнение той или иной прикладной задачи, должна обмениваться информацией с пользователем, осуществлять собственно обработку этой информации в рамках автоматизации того или иного процесса, и, наконец, хранить данные используемые в программе.

Для локальных приложений, полностью работающих на персональной электронно-вычислительной машине (например, Word или Excel), все эти компоненты собраны вместе и не могут быть распределены между различными компьютеры. Такая программа является монолитной и использует для выполнения ресурсы только того компьютера, на котором выполняется.

В файл-серверных приложениях часть компоненты хранения переносится на файловый сервер, однако, все манипуляции со структурами данных выполняются на клиентской машине, и код пользовательской программы тоже работает только на ней.

Критерием, позволяющим отнести прикладную программы к архитектуре клиент-сервер является то, что хотя бы один из трех ее компонентов полностью выполняется на другом компьютере, и взаимодействие между компонентами на разных компьютерах осуществляется через ту или иную сетевую среду посредством передачи запросов на получение того или иного ресурса.

Поскольку архитектура клиент-сервер является частным случаем технологии клиент-сервер, в ней обязательно есть клиент и сервер. Соответственно, выделяют клиентскую и серверную стороны приложения. Клиентская сторона приложения функционирует на рабочем месте пользователя, в роли которого в подавляющем числе случаев выступает персональный компьютер. Серверная сторона функционирует на специализированном комплексе, включающем в себя мощные аппаратные средства, требуемый набор стандартного программного обеспечения, систему управления базами данных и собственно структуры данных.

Взаимодействие клиентской и серверной частей приложения осуществляется через сеть – локальную или глобальную. При этом с точки зрения клиента и сервера взаимодействие осуществляется прозрачно, соответственно сетевой компонент здесь включает в себя совокупность необходимого сетевого оборудования, набор программных технологий, обеспечивающих передачу данных между узлами сети, а также собственно протокол или протоколы для обмена запросами и результатами их выполнения.

Читайте также:
Большая азиатская программа николая 2 определение

Компонент визуализации прикладной задачи осуществляет ввод информации пользователем с помощью тех или иных средств, а также вывод информации на экран и печать. Компонент визуализации для архитектуры клиент-сервер всегда исполняется на рабочем месте пользователя (поскольку должен же он наблюдать какие-либо результаты работы программы).

Компонент прикладной логики решает собственно ту или иную задачу, связанную с обработкой данных в той или иной предметной области. Этот компонент может быть распределен между клиентской и серверной частью различным образом в зависимости от применяемой модели.

С точки зрения количества составных частей клиент-серверные системы делятся на двухуровневые и трехуровневые. Двухуровневые системы состоят только из клиента и сервера. В трехуровневых же между пользовательским клиентом и сервером, осуществляющим хранение и обработку базы данных появляется третий, промежуточный слой, являющийся для пользователя сервером, а для системы управления базами данных — клиентом. Такая архитектура позволяет более гибко распределять функции системы и нагрузку между компонентами программно-аппаратного комплекса, а также может снизить требования к ресурсам рабочих мест пользователей. Необходимой платой за это является то, что подобные системы намного сложнее в разработке, внедрении и эксплуатации и требуют значительных затрат и высококвалифицированного персонала.

Компьютеризация промышленного предприятия может достаточно долго проходить в рамках описанных ранее локальных рабочих мест или архитектуры файл-сервер. Тем не менее, рано или поздно может наступить момент, когда единственным вариантом для дальнейшего развития автоматизированных систем управления предприятием станет архитектура клиент-сервер.

Во-первых, архитектура клиент-сервер становится жизненно необходимой, когда число пользователей одновременно активно пользующихся одними и теми же данным превышает 10-15 человек. В силу принципиальных ограничений, присущих файл-серверным приложениям, 15 параллельно работающих пользователей такие системы переносят с трудом, а на 20 пользователях часто разваливаются. Таким образом, если перед предприятием встает задача построения системы, в которых число мест, одновременно активно работающих с данными, превышает 20, практически единственным вариантом для него является клиент-сервер.

Справедливости ради следует заметить, что большие Электронно-вычислительные машины тоже способны справиться с десятками или даже сотнями пользователей. Однако, из-за высокой стоимости аппаратных средств, дороговизны разработки, и, что немаловажно, немалыми затратами на эксплуатацию подобной техники и программ для нее, вариант использования централизованной архитектуры при внедрении новых систем в нашей стране почти никогда не рассматривается.

Другим критическим моментом для перехода к архитектуре клиент-сервер является переход к решению задач масштаба предприятия и управление предприятием в целом. Автоматизация отдельных рабочих мест может быть с успехом выполнена даже без использования сетевых технологий, с задачами масштаба отдела может справиться и файл-сервер, но построение интегрированной автоматизированной системы охватывающей все предприятие или, по крайней мере, какую-либо из подсистем управления возможно только с использованием технологий клиент-сервер.

Еще одной ситуацией, когда клиент-сервер – единственный способ построения системы, является наличие в автоматизированной системе удаленных пользователей, с которыми необходимо обмениваться информации в реальном масштабе времени. Под реальным масштабом времени здесь имеются ввиду секунды-минуты. Обмен данными на дискетах в таком случае не пригоден принципиально, а архитектура файл-сервер потребует очень высоких скоростей обмена, а это может быть либо принципиально невозможно, либо очень дорого. Отдельные примеры обеспеченных организаций, которые строили файл-серверные системы в масштабах города (например, российский «Инкомбанк») являются исключениями, подтверждающими правило.

И так же архитектура клиент-сервер необходима тогда, когда задача обеспечения целостности информации становится критической. Под критической подразумевается ситуация, в которой цена ошибки в данных может быть сопоставима со стоимостью создания системы клиент-сервер. Прежде всего, это актуально для финансовых служб предприятий.

Попытка решить в рамках компьютеризации промышленного предприятия любую из проблем, перечисленных выше, обязательно повлечет за собой появление системы клиент-сервер. Помимо этого, эта архитектура может появиться в ходе естественного развития автоматизированных систем управления производством, даже если ограничения предыдущих архитектур на данном предприятием еще не стали критическим. Этот вариант является самым предпочтительным, поскольку при этом, с одной стороны, внедрение получает поддержку изнутри, а, с другой стороны, есть время для подготовки плавной смены архитектуры информационных приложений.

Из преимуществ клиент-серверной архитектуры можно отметить:

– отсутствие дублирования кода программы-сервера программами-клиентами;

– так как все вычисления выполняются на сервере, то требования к компьютерам, на которых установлен клиент, снижаются;

– все данные хранятся на сервере, который, как правило, защищён гораздо лучше большинства клиентов. На сервере проще организовать контроль полномочий, чтобы разрешать доступ к данным только клиентам с соответствующими правами доступа.

К недостаткам можно отнести:

– неработоспособность сервера может сделать неработоспособной всю вычислительную сеть (неработоспособным сервером следует считать сервер, производительности которого не хватает на обслуживание всех клиентов, а также сервер, находящийся на ремонте, профилактике и так далее);

– поддержка работы данной системы требует отдельного специалиста – системного администратора;

– высокая стоимость оборудования.

Прежде всего, для отечественных промышленных предприятий критическим является фактор стоимости. В отличие от западных предприятий, где речь, как правило идет о замене довольно-таки дорогих централизованных систем на клиент-серверные, прямые затраты на которых меньше, отечественные предприятия почти никогда не имели достаточно средств для внедрения у себя больших централизованных систем. Очень часто имеющиеся на предприятии информационные системы построены на устаревших аппаратных средствах, которые требуют полной замены при переходе к архитектуре клиент-сервер.

Следующим большим «но» является большой объем собственно технологических изменений, возникающих при попытке внедрения архитектуры клиент-сервер. Клиент-серверная система требует другого уровня технической грамотности со стороны, как сотрудников информационных служб, так и конечных пользователей. Расходы на переподготовку пользователей и эксплуатационного персонала, перестройка структуры автоматизации предприятия составляют большую часть айсберга, чем ясно видимые прямые затраты на модернизацию аппаратуры, закупку и/или разработку требуемого обеспечения.

Читайте также:
Упорядочить файлы на рабочем столе можно с помощью программы которая называется

И, наконец, самым большим подводным камнем на пути создания клиент-серверной системы на предприятии является необходимость менять структуру управления и связанные с этим организационные издержки.

Попытка внедрить новые технологические решения ничего не меняя в сути автоматизируемых бизнес-процессов может закончиться безрезультатно. При этом предприятие понесет прямые материальные убытки из-за большого объема дорогостоящего аппаратного и программного обеспечения, лежащего мертвым грузом, а также из-за отвлечения сотрудников от выполнения основных служебных обязанностей. В лучшем случае будут внедрены отдельные участки клиент-серверной система, при этом фактически новое программное обеспечение будет использоваться на старом идейном уровне.

Если, взвесив все за и против, предприятие все-таки решилось на создание клиент-серверной система, то перед ним встает задача выбора компонентов для построения этой системы. В любом случае необходимым компонентом является тот или иной сервер баз данных корпоративного уровня. Остальные компоненты зависят от пути, избранного предприятием для дальнейшего развития автоматизированной системы управления.

Если предприятие решилось разрабатывать систему самостоятельно, то перед ним стоит, прежде всего, задача выбора средств разработки. Если предприятие размещает заказ на создание системы у конкретной фирмы-разработчика, то аналогичная задача стоит перед ней.

В том случае, если принято решение не разрабатывать систему самим, а использовать одно из имеющихся на рынке решений, то главной составляющей выбора является готовая (в той или иной степени) система автоматизации предприятия.

Источник: studfile.net

Что такое технология клиент–сервер

миниатюра Что такое технология клиент–сервер

Технология клиент-сервер – это способ соединения между клиентом (компьютером пользователя) и сервером (мощным компьютером или оборудованием, предоставляющем данные), при котором они взаимодействуют между собой напрямую.

Что такое “клиент-сервер”?

Общие принципы передачи данных между компонентами вычислительной сети устанавливаются сетевой архитектурой. Технология “клиент-сервер” представляет собой такую систему, в которой хранение информации и ее обработка осуществляются на серверной части, а формирование запроса и получение данных предоставляется клиентской стороне. В отличие от клиент-серверной технологии, где данные извлекаются из файлов, в сетях “клиент-сервер” данные хранятся на той машине, где установлено серверное приложение сетевой базы данных.

При этом клиент-серверные технологии предусматривают наличие специального программного обеспечения – клиентского и серверного. Эти программы взаимодействуют с помощью специальных сетевых протоколов передачи данных. Как правило, клиент и сервер установлены на разных компьютерах, но иногда могут быть установлены и на одну машину.

Серверное программное обеспечение настроено на получение и обработку запросов от пользователя, предоставляя ему результат в виде данных или функций (электронная почта, общение или просмотр страниц в интернете). Компьютер, на который устанавливается эта программа, должен иметь высокую производительность и высокие технические параметры.

Как функционирует клиент-серверная архитектура

Программное обеспечение со стороны клиентской машины отправляет запрос на сервер, где он обрабатывается и готовый результат отправляется клиенту. Подобная технология работает по такому же принципу, как и база данных: запрос – обработка – передача результата.

Сервер выполняет следующие функции:

  • хранение данных;
  • обработка запроса от клиента с помощью процедур и триггеров;
  • отправка результата клиенту.

Функции, которые реализуются клиентской частью:

  • формирование и отправка запроса к серверу;
  • получение результатов и отправка дополнительных команд (запросов на добавление, удаление или обновление информации).

картинка Что такое технология клиент–сервер

Достоинства и недостатки

Клиент-серверная архитектура обладает следующими преимуществами:

  • высокая скорость обработки данных;
  • низкая нагрузка на сетевую инфраструктуру;
  • возможность быстрой работы с большим количеством клиентов;
  • разделение программного кода серверных и клиентских приложений.

Несколько пользователей могут одновременно работать с данными за счет транзакций (последовательность операций, представляемых в виде единого блока) и блокировок (изоляция данных от редактирования другими пользователями).

Недостатки клиент-серверной технологии:

  • высокие требования к аппаратно-программным характеристикам серверного оборудования за счет того, что обработка данных происходит на стороне сервера;
  • потребность в системном администраторе, контролирующем бесперебойность работы серверного оборудования.

Многоуровневая клиент-серверная архитектура

Многоуровневая технология “клиент-сервер” предусматривает выделение отдельного серверного оборудования для обработки данных. Операции хранения, обработки и вывода данных производятся на разных серверах. Благодаря этому распределению обязанностей повышается эффективность работы сети.

Примером многоуровневой архитектуры является трехуровневая технология. В такой сети, помимо клиента и сервера приложений, есть дополнительный сервер базы данных.

Предусматриваются следующие три уровня:

  1. Нижний. Это звено включает клиентское программное обеспечение с пользовательским интерфейсом и системой взаимодействия со следующим уровнем обработки данных.
  2. Средний. Запросы от клиентских программ обрабатываются сервером приложений, на котором осуществляются операции по обработке и подготовке информации для передачи между сервером верхнего уровня и клиентом. Он позволяет разгрузить хранилище данных от лишней нагрузки и распределить запросы от разных пользователей.
  3. Верхний. Это независимый сервер базы данных, на котором хранится вся информация. Он получает подготовленный запрос от сервера приложений и предоставляет ему необходимую информацию без непосредственного взаимодействия с клиентскими приложениями.

Сеть с выделенным сервером

Архитектура с выделенным сервером представляет собой такую локальную сеть, в которой все взаимодействующие устройства находятся под управлением одного или нескольких серверов. При этом клиенты (рабочие станции) отправляют запрос к ресурсам через серверное программное обеспечение. Выделенный сервер не имеет клиентской части и функционирует только как сервер для обработки запросов от клиентов и защиты данных. При наличии нескольких серверов, функции между ними могут распределяться с определением для каждого отдельных обязанностей.

Источник: glav-inform.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru