
Программирование_распределенных_систем / Lec_1
.docxСпособы организации работы приложения в сети
-
Разделение приложения на части, выполняющиеся на разных компьютерах сети
-
Выделение специализированных серверов в сети, на которых выполняются некоторые общие для всех приложений функции
-
Способ взаимодействия между частями приложений, работающих на разных компьютерах
Разделение приложения на части
-
Средства представления данных на экране
-
Логика представления данных
-
Прикладная логика
-
Логика данных
-
Внутренние операции базы данных
-
Файловые операции
Двухзвенная архитектура
…
-
Недостаток масштабируемости и отсутствие отказоустойчивости (мейнфрейм)
-
Высокая сетевая нагрузка, высокая вычислительная мощность клиента (файловый сервер)
-
??? (сервер БД)
Трехзвенная архитектура
-
Слой логики обработки -> сервер приложений
-
Возможность установки нескольких серверов приложений
-
Упрощений разработки
-
Распределение нагрузки
-
Middleware (средства обработки сообщений, удаленный вызов процедур, брокеры запроса объектов)
Межпроцессное взаимодействие
-
Совместное использование одних и тех же данных
-
Передача друг другу сообщений
Сообщение – блок информации, отформатированный процессом-отправителем таким образом, чтобы он был понятен процессу получателю.
Заголовок: адрес, идентификатор сообщения, доп. информация
Транспортная система ОС
- экранирование деталей сложных сетевых протоколов
-
В самом простом случае: два примитива – send & receive
-
Модель OSI
-
Вопросы: гарантированная доставка, реакция на отказы узла, приоритет сообщений
Синхронизация
- блокирующие
- неблокирующие
Блокирующий send – процесс, выдавший запрос на его выполнение, приостанавливается до момента получения по сети сообщения-подтверждения о том, что приемник получил отправленное сообщение
Блокирующий receive – приостанавливает вызывающий процесс до момента, когда он получит сообщение
Тайм-аут при использовании блокирующего send
Неблокирующие примитивы
- управление возвращается вызывающему процессу немедленно
Способ уведомления о приходе сообщения:
- Опрос: наличие еще одного базового примитива test, с помощью которого процесс-получатель может анализировать буфер
- Прерывание: более эффективен, но сложнее при разработке
Буферизация в примитивах передачи сообщений
Не требуется:
-
При использовании блокирующих примитивов
-
Отсылка сообщения без ожидания ответа о приеме
Буфер в одно сообщение – при блокирующих примитивах
При асинхронных - всегда необходим буфер
Из-за ограниченного размера буфера необходим контроль за потоком сообщений
Прием сообщений, когда еще не создан буфер: отказ + прием и хранение некий тайм-аут