Что такое архитектура программы

Первые разработчики создавали программное обеспечение без архитектуры. Сначала это казалось удобным: никаких издержек, связанных с планированием, и ускоренное прототипирование. Но мере усложнения ПО теряло гибкость и управляемость, а каждое новое изменение обходилось все дороже. Это мешало развивать проект за границы, определенные изначально. Такая система получила название Большой комок грязи (Big Ball of Mud).

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

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

Подробно рассмотрим каждую из них.

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

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

Что на самом деле представляет из себя монолит в архитектуре программы?

Архитектура делит ПО на следующие слои.

  • Слой представления (Presentation Layer) содержит пользовательский интерфейс и отвечает за обеспечение хорошего пользовательского опыта.
  • Слой бизнес-логики (Business Logic Layer) , как следует из названия, содержит бизнес-логику приложения. Он отделяет UI/UX от вычислений, связанных с бизнесом. Это позволяет с легкостью изменять логику в зависимости от постоянно меняющихся бизнес-требований, никак не влияя на другие слои.
  • Слой передачи данных (Data Link Layer) отвечает за взаимодействие с постоянными хранилищами, такими как базы данных, и прочую обработку информации, которая не связана с бизнесом.

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

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

Преимущества

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

Недостатки

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

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

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

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

#Архитектура приложения и кода

Одноуровневая система

В данном подходе единая система работает как на стороне сервера, так и клиента. Это обеспечивает простоту развертывания и отличную скорость связи, а также устраняет необходимость межсистемного взаимодействия (Inter-system communication — ISC).

Такая система подходит только для небольших однопользовательских приложений.

Двухуровневая система

Так выглядит двухуровневая архитектура

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

  • Клиент содержит слои презентации, бизнес-логики и передачи данных.
  • Сервер включает хранилища и базы данных.

Трехуровневая и n-уровневая системы

Так выглядит трехуровневая архитектура

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

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

Сервис-ориентированная архитектура (SOA)

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

Она состоит из 5 элементов:

  • сервисы (Services);
  • сервисная шина (Service Bus);
  • сервисный репозиторий (Service Repository catalogue of services );
  • безопасность SOA (SOA Security);
  • управление SOA (SOA Governance).

Клиент отправляет запрос с использованием стандартного протокола и формата данных по сети. Этот запрос обрабатывается ESB (enterprise service bus — сервисная шина предприятия), которая считается сердцем сервис-ориентированной архитектуры и отвечает за оркестровку и маршрутизацию. С помощью сервисного репозитория ESB направляет запрос в специальный сервис, который может взаимодействовать с другими сервисами и базами данных, чтобы составить полезную нагрузку (данные) ответа.

Полный вызов ответа на запрос согласуется с правилами управления и безопасности SOA для выполнения безопасной и корректной транзакции.

Читайте также:
Что получится в результате выполнения программы

Источник: dzen.ru

4 типа архитектуры программного обеспечения

4 типа архитектуры программного обеспечения

Первые разработчики создавали программное обеспечение без архитектуры. Сначала это казалось удобным: никаких издержек, связанных с планированием, и ускоренное прототипирование. Но мере усложнения ПО теряло гибкость и управляемость, а каждое новое изменение обходилось все дороже. Это мешало развивать проект за границы, определенные изначально. Такая система получила название Большой комок грязи (Big Ball of Mud).

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

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

Подробно рассмотрим каждую из них.

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

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

Архитектура делит ПО на следующие слои.

  • Слой представления (Presentation Layer) содержит пользовательский интерфейс и отвечает за обеспечение хорошего пользовательского опыта.
  • Слой бизнес-логики (Business Logic Layer), как следует из названия, содержит бизнес-логику приложения. Он отделяет UI/UX от вычислений, связанных с бизнесом. Это позволяет с легкостью изменять логику в зависимости от постоянно меняющихся бизнес-требований, никак не влияя на другие слои.
  • Слой передачи данных (Data Link Layer) отвечает за взаимодействие с постоянными хранилищами, такими как базы данных, и прочую обработку информации, которая не связана с бизнесом.

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

Преимущества

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

Недостатки

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

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

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

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

Одноуровневая система

В данном подходе единая система работает как на стороне сервера, так и клиента. Это обеспечивает простоту развертывания и отличную скорость связи, а также устраняет необходимость межсистемного взаимодействия (Inter-system communication — ISC).

Такая система подходит только для небольших однопользовательских приложений.

Двухуровневая система

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

  • Клиент содержит слои презентации, бизнес-логики и передачи данных.
  • Сервер включает хранилища и базы данных.

Трехуровневая и n-уровневая системы

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

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

Сервис-ориентированная архитектура (SOA)

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

Она состоит из 5 элементов:

  • сервисы (Services);
  • сервисная шина (Service Bus);
  • сервисный репозиторий (Service Repository catalogue of services );
  • безопасность SOA (SOA Security);
  • управление SOA (SOA Governance).

Клиент отправляет запрос с использованием стандартного протокола и формата данных по сети. Этот запрос обрабатывается ESB (enterprise service bus — сервисная шина предприятия), которая считается сердцем сервис-ориентированной архитектуры и отвечает за оркестровку и маршрутизацию. С помощью сервисного репозитория ESB направляет запрос в специальный сервис, который может взаимодействовать с другими сервисами и базами данных, чтобы составить полезную нагрузку (данные) ответа.

Полный вызов ответа на запрос согласуется с правилами управления и безопасности SOA для выполнения безопасной и корректной транзакции.

Как правило, сервисы делятся на два вида.

  1. Атомарные сервисы (Atomic services) предоставляют функциональности, которые не подлежат дальнейшей декомпозиции.
  2. Композиционные сервисы (Composite services) сочетают в себе несколько атомарных сервисов, чтобы предоставлять сложную составную функциональность.

Типы сервисов

  • Организационные сервисы (Entity service).
  • Доменные сервисы (Domain Service).
  • Вспомогательные сервисы (Utility Service).
  • Интегрированный сервис (Integrated Service).
  • Сервис приложений (Application Service).
  • Сервис безопасности (Security Service).

Mикросервисная архитектура

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

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

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

Состав микросервисов

Архитектура состоит из изолированных компактных микросервисов, способных расширяться независимо друг от друга. Она включает 5 следующих компонентов:

  • сервисы (Services);
  • сервисная шина (Service Bus);
  • внешняя конфигурация (External configuration);
  • шлюз API (API Gateway);
  • контейнеры (Containers).

Характеристики микросервисов

Микросервисная архитектура должна включать следующие характеристики.

  • Компонентизация через сервисы.
  • Организация вокруг бизнес-возможностей.
  • Ориентирована на продукты, а не проекты.
  • Умные конечные точки и глупые каналы (Smart endpoints and dumb pipes).
  • Децентрализованное управление.
  • Децентрализованное управление данными.
  • Автоматизация инфраструктуры.
  • Защита от сбоев.
  • Эволюционное проектирование.

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

Преимущества

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

Недостатки

  • Повышенный риск сбоя при обмене данными между сервисами.
  • Большим количеством сервисов трудно управлять.
  • Требует решения таких проблем, как задержки в сети, балансировка нагрузки и прочих трудностей, свойственных распределенной архитектуре.
  • Нуждается в комплексном тестировании в распределенной среде.
  • На реализацию потребуется гораздо больше времени.
  • Мы снова написали самый быстрый JS-фреймворк UI
  • 3 совета, как стать мастером Йода по JavaScript
  • 10 полезных инструментов для фронтенд-разработчика
  • ТЭГИ
  • Software Architecture

Источник: nuancesprog.ru

Часть 2. Поговорим немного об архитектуре ПО

Часть 2. Поговорим немного об архитектуре ПО - 1

Этот материал — часть цикла “ Введение в Enterprise-разработку ”. Первая часть о сети — здесь. Архитектура программного обеспечения — структура, на базе которой создается приложение, взаимодействуют модули и компоненты всей программы.

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

Архитектурный шаблон — это уже придуманный способ решения какой-то задачи по проектированию программного обеспечения. Ты уже наверняка сталкивался с такими паттернами проектирования как фабричный метод (Factory Method), абстрактная фабрика (Abstract Factory), строитель (Builder), прототип (Prototype), одиночка (Singleton) и, возможно, другими. Они используются при простом написании кода, создании классов и планировании их взаимодействия. Архитектурные шаблоны задействуют на более высоком уровне абстракции — при планировании взаимодействия пользователя приложения с сервером, данными и другими компонентами проекта. Давай сразу рассмотрим некоторые шаблоны и то, как их использовать.

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

Часть 2. Поговорим немного об архитектуре ПО - 2

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

Здесь возможен простой вариант — вы отправляете сообщение друг другу напрямую через интернет по IP-адресам, которые вы знаете: Поначалу может показаться, что все отлично работает, пока не появляется еще один ваш друг с вопросом: “А почему вы не добавите меня в свой чат?”. И вот когда ты решаешь добавить общего друга в чат, ты сталкиваешься с архитектурной проблемой: каждому пользователю чата нужно обновить информацию о количестве пользователей, добавить IP-адрес нового юзера.

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

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

Составляющие клиент-серверной архитектуры

Давай разберемся, что она представляет из себя. Клиент-серверная архитектура — шаблон проектирования, основа для создания веб-приложений. Данная архитектура состоит из трех компонентов: Часть 2. Поговорим немного об архитектуре ПО - 3

  1. Клиент — из названия становится понятно, что это пользователь сервиса (веб-приложения), который обращается к серверу для получения какой-то информации.
  2. Сервер — место, где располагается твое веб-приложение или его серверная часть. Он владеет необходимой информацией о пользователях или может ее запрашивать. Также при обращении клиента сервер возвращает ему запрашиваемую информацию.
  3. Сеть — все просто: обеспечивает обмен информацией между клиентом и сервером.
Читайте также:
Что находится в папке программ дата

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

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

Часть 2. Поговорим немного об архитектуре ПО - 4Когда мы хотим посмотреть полезную (или не очень полезную) информацию в интернете, мы открываем браузер, в строке поиска вводим запрос, и в ответ получаем информацию от поисковика. В этой цепочке браузер — это наш клиент. Он отправляет запрос с информацией о том, что мы ищем, серверу. Сервер обрабатывает запрос, находит наиболее релевантные результаты, упаковывает их в понятный для браузера (клиента) формат и отправляет назад. В таких сложных сервисах как поисковики серверов может быть много. Например, сервер авторизации, сервер для поиска информации, сервер для формирования ответа. Но клиент об этом ничего не знает: для него сервер является чем-то единым. Клиент знает только о точке входа, то есть, адресе сервера, которому нужно отправить запрос. Вспомним о приложении, которое мы рассматривали в предыдущей части — для мониторинга средней температуры воздуха во всех странах в режиме реального времени. Его архитектура будет выглядеть примерно так: Часть 2. Поговорим немного об архитектуре ПО - 5Наше приложение располагается на сервере. Скажем, каждые пять секунд оно отправляет запросы на серверы локальных гидрометцентров, получает у них информацию о температуре в конкретной стране, сохраняет эту информацию. Когда клиент обращается к нам с запросом “посмотреть текущую температуру воздуха в мире”, мы возвращаем последнюю сохраненную информацию, рассортированную по странам. Таким образом наше приложение одновременно и сервер (когда обрабатывает запросы юзеров), и клиент (когда получает информацию у других серверов).

Важно: понятие сервер — не о конкретном компьютере, а о взаимоотношениях абонентов сети .

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

Трехуровневая архитектура

Это архитектурный шаблон, в котором появляется третий участник — хранилище данных . При использовании этого шаблона, три уровня принято называть слоями: Часть 2. Поговорим немного об архитектуре ПО - 6

  1. Клиентский слой — интерфейс пользователя. Это может быть веб-браузер, которому отправляются HTML-страницы, или графическое приложение, написанное с помощью JavaFX. Главное, чтобы с его помощью пользователь мог отправлять запросы на сервер и обрабатывать его ответы.
  2. Слой логики — сервер, на котором происходит обработка запросов/ответов. Часто его еще называют серверным слоем. Также здесь происходят все логические операции: математические расчеты, операции с данными, обращения к другим сервисам или хранилищам данных.
  3. Слой данных — сервер баз данных: к нему обращается наш сервер. В этом слое сохраняется вся необходимая информация, которой пользуется приложение при работе.

Таким образом, наш сервер принимает на себя все обязательства по обращению к данным, не давая возможности юзеру обратиться к ним напрямую. Часть 2. Поговорим немного об архитектуре ПО - 7

Преимущества трехуровневой архитектуры

  1. Возможность построить защиту от SQL-инъекций — это атака на сервер, при которой передается SQL-код, и при выполнении этого кода злоумышленник может воздействовать на нашу базу данных.
  2. Разграничение данных, к которым мы хотим регулировать пользовательский доступ.
  3. Возможность модифицировать данные перед отправкой клиенту.
  4. Масштабируемость — возможность расширить наше приложение на несколько серверов, которые будут использовать одну и ту же базу данных.
  5. Меньшие требования к качеству соединения пользователя. Формируя ответ на сервере, мы часто берем из базы данных много различной информации, форматируем ее, оставляя только то, что нужно юзеру. Таким образом мы сокращаем объем информации, который отправим в качестве ответа клиенту.

Как часто нужно использовать архитектурные шаблоны?

Если ты знаком, скажем, с паттерном проектирования Фабричный метод, ты наверняка задумывался, когда его стоит использовать. Иногда трудно определиться, что делать: создать объект с помощью оператора new или использовав фабричный метод. Но со временем понимание приходит. С архитектурными шаблонами дела обстоят немного иначе.

Enterprise-фреймворки рассчитаны на то, что программист с их помощью создает проект на основе какого-то общепринятого паттерна. Поэтому перед изучением Spring Framework тебе обязательно нужно понимать, что такое клиент-серверная архитектура, трехуровневая архитектура и MVC-архитектура. Не переживай: об MVC-архитектуре мы еще поговорим. Часть 1. Что нужно знать перед изучением Spring и JavaEE Часть 3. Протоколы HTTP/HTTPS Часть 4.Основы Maven Часть 5. Сервлеты. Пишем простое веб-приложение Часть 6. Контейнеры сервлетов Часть 7. Знакомство с паттерном MVC (Model-View-Controller) Часть 8. Пишем небольшое приложение на spring-boot

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

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