Распределенные системы обработки информации.
Недашковский Вячеслав Михайлович
Язык Java, среда Eclipse.
Лекция 3.09.04
Литература
1. Кен А., Госменг Дж., Холлез Д. Язык программирования Java, 3-е
изд. пер. с. англ. –М: изд. дом «Вильямс», 2001-624 с.
2. Таренбаум Э., ван Стен М. Распределенные системы. Принципы и
парадигмы.-СПб: Питер, 2003 – 877с.
3. Эммерих В. Конструирование распределенных объектов. Методы и
средства программирования интероперабельных объектов в архитектурах
OMG/CORBA, Microsoft/Com и Java/RMI.
4. Изимбал А. А., Анишина М.Л. Технология создания распределенных
систем для профессионалов – СПб:
Цель: привести основные сведения о языке Java а также общие
сведения о РС, и технологиях создания РС; дать первичные навыки
программирования на языке Java.
Задачи.
5. Познакомить студентов с основами языка Java (с учетом знания
C++)
6. Дать общие сведения о РС.
7. Познакомить с некоторыми технологиями, используемыми при
создании РС (RMI, CORBA).
8. Дать первичные навыки программирования на языке Java.
Язык программирования Java
История и предпосылки
· сделать машинонезависимый язык и не зависимый от процессоров. Для
этого программы преобразуются в промежуточный код, а он к
конкретному… · Собрались C++-ры. Оттуда и основа. Язык был готов
1999 г. Пытались продать… · и сделали они браузер.
Архитектура Java
Модификаторы и функция main нужны, чтобы класс был приложением.
String[] – массив. Так как в метод main не передается адрес
объекта, то он объявлен… Пример 2. class Fib { /** Вывод на экран
последовательности чисел Фибоначчи,… Таблица 1.2. Типы
Обозначение типа
размер, bit
byte
знаковый
…
Именованные константы
static final int MAX = 50;
Классы и объекты
Создание объектов – отличие:
1. объекты создаются только в динамической памяти – в куче
2. new
3. доступ посредством ссылок. Выделяется ячейка памяти под ссылку и
с ней мы можем работать и писать туда разные значения. Если ссылка
не назначена (показывает) – null.
4. Передавая объект – передается ссылка, а не копия объекта.
Пример 3. class Point { public double x, y; }
Point LT = new Point(); Point BR = new Point(); LT.x = 0.0;
При объявлении выделяется место для массива ссылок на объект. У
массив есть номер… Исполнительная среда контролирует вход за
пределы массива. Если создать объект типа String, его можно только
читать.
Комментарии
/*..*/ - C – style
//.. – C++ - style
/** ..*/ - for javadoc tool
Лекция 21.09.04
- equals
- public int hashCode()
protected Object cline() throws CloneNotSupportedException
public final class getClass();
protected void finalize throws Throwabble
Класс Object
public String toString(); - дает строковое представление
объекта
Класс Class
В runtime JRE осуществляет проверку типов объектов " класса.
getClass() возвращает экземпляр типа Class
Emp e; e = new Emp();
Class cl = e.getClass();
getName();
forName()
Class cl = Class.forName(className);
if (e.getClass() = Emp.class)
newInstance
Object m = Class.forName(S).newInstance();
Object.clone()
1. Обеспечивает простое клонирование путем копирования всех
компонентов объекта
2. поддержка клонирования – Clonable clone – не должен
предусматривать испоключения
3. Составные части тоже допускают клонирование.
public clad IntStack implements
{
private int[] buffer;
// еще есть хитрый непонятный наворот с внутренними классами.
public Object clone{
IntStack nObj = (IntStack) super.cloe();
nObj.buffer = (int []) buffer.clone();
return nObj;
}
}
Проверка типов
instanceOf
if(i instanceOf int)
final – класс, нельзя осуществить производные методы, нельзя
переписать.
abstract – если предполагается, что метод будет определяться в
производных классах, то можно поставить этот тмодификатор.
Идентификаторы
public interface X{…
class newClass implements X {…}
Обратный вызов
class TmerPrinter
Вложенные классы и интерфейсы
1. Класс может быть добавлен в объявление " класса внутри блока
2. Вложенный тип является частью вышестоящего типа
3. Внешние и вложенные типы находятся во взаимном доверии друг к
другу с т. з. области видимости.
4. Вложенные классы могут быть именованными и неименованными.
Объекты внутренних классов неявно несут и ссылку на внешний
класс.
Исключения
Пример 4.
try – catch finally(вызывается после основного обработчика)
class BadDataSetException extends Exception {}
class my{
public double[] g DataSet(String qname) throws
BadDataSetException
{
String file = …
try {
} catch (IOException e) {throw BadDatSetException();}
finally {
try {
if (m = null)…
Многопоточность
Определение 1.1 Процесс – программа, которая выполняется на одном
из процессоров виртуальной системы.
Блокировки
Объекты используют признаки блокировки.
1. Создание потоков контролируется объект класса ‘поток’ Thread t =
new Thread
2. start – порожден новый поток автоматически JVM вызывает метод,
который делает поток активным
3. рассмотрен Thread, Runnable
4. Создание объектов public class PingPing extends Thread { private
String word; private int delay; public PingPong (String whatToSay,
int Delay) { word = whatToSay; delay = Delay; } public void run(){
try { for (;;) { System.out.print(word); Thread.Sleep(delay); }
catch (IOException e) { return } } public static void main (String
[] args) { new PingPong(“ping1”, 33).start(); new PingPong(“ping2”,
100).start(); } }
Интерфейс Runable с единственным методом oublic void Run().
Куча примеров…
Синхронизация
Критические секции. Право доступа к свойству (?) блокировки может
быть приобретено и возвращено посредством методов и инструкций,
помеченных как Synchtonized.
Плохой скан. Дальше, похоже, 2 примера.
Пример 5.Synchronized для методов public synchronized void some
method() { … }
Пример 6.Synchronized для инструкций void some method() {
Synchronized(values) { … } }
Взаимодействие потоков
notifyAll();
notify();
InputStream
public abstract int read() throws IOException – читает 1 байт,
возвращается в виде целого числа.
public abstract int read(byte[] buf, int offset, int count) throws
IOException
class CountBytes{
public static void main(Strings args) throws Exception
{
..
}
}
OutputStream
public abstract int write(int b) throws IOException – выводит 8
младших битов.
public abstract int write(byte[] buf, int offset, int count) throws
IOException…
???
Библиотека Swing
AWT-Abstract Window Tolkit
Набор инструментальных средств для создания машинонезависмого(???)
интерфейса.
Frame
В библиотеке AWT-Frame
В библиотеке Swing – JFrame.
import javax.swing.*;
<пример из книжки Simple_Frame Frame/>
<куча заклинаний>
Панели
.
Рис. .1.1
Служебные панели
· Корневая панель
· Слоеная панель
· Прозрачная панель
Нужны для создания меню(?) и панели содержимого
(?)ContentPanel.
Обработка событий
Чтобы подписаться на событие:
ОбъектИсточника.addСобытиеListner(объект слушателя события).
Пример 8. ActionListner listner = JButton button = new
JButton(“Ok”);… Слушатель – класс, реализующий специализированный
интерфейс слушателя, например, ActionListner. У такого
интерфейса…
Превращение компонентов в слушателей событий
class ButtonPanel extends JPanel implements ActionListner { …
public ButtonPanel() { btnYellow.addActionListner(this);
btnBlue.addActionListner(this); } public void
actionPerformed(ActionEvent event){ // действие по событию }
Для распознавания источника события используется
event.getSource.
1.1.1.7. Классы – адаптеры
WindowAdapter class Terminators extends WinodwAdapter{ pubic void
WindowClosing(WindowEvent e) { System.exit(0); } } WindowListner
listner = new Terminator(); frame.addWindowListner(listner);
Иерархия событий библиотеки awt
Иерархия событий библиотеки awt.
Рис. 1.2.
Пакет java.awt.event включает 14 интерфейсов слушателей, к которым
есть соответствующие адаптеры.
Общие сведения о распределенных системах
Понятие распределенной системы
2. Определение 2.1 Хост – компьютер, на котором размещены
компоненты вычислительной системы: аппаратура и сетевая ОС.
Взаимодействие компонентов РС.
Требования к системе
· Нефункциональные - относятся к качеству системы – носят
глобальный характер и оказывают существенное влияние на выбор общей
архитектуры системы… § Масштабируемость – способность системы
адоптироваться к будущему росту… § Открытость – систему можно легко
расширять и модифицировать (интеграция новых компонентов,
отвечающих новым…
Прозрачность системы
1. Прозрачность масштабируемости (обеспечивается 4, 5)
2. Прозрачность производительности (обеспечивается 4, 5)
3. Прозрачность отказа (обеспечивается 5, 6)
Общие сведения о промежуточном слое
Модель ISO OSI:
§ Прикладной уровень
§ Представительный
§ Системный
§ Транспортный
§ Сетевой
§ Канальный
§ Физический
Уровень сессии устанавливает и поддерживает соединение между
компонентами распределенной системы.
Представительный уровень устраняет различия в представлении
данных.
Прикладной уровень – распределение объектов. Объектный тип
определяется в соответствии с объектно-ориентированным
промежуточным слоем.
Язык программирования интерфейсов позволяет выразить понятия модели
объектов промежуточного слоя.
Типы промежуточного слоя
Приложение сложной структуры:
§ Сложная структура – потоки объектов
§ Объект-клиент и объект-сервер
§ Безопасность
§ Работа с ссылками на объект
§ Разные арг типов на разных машинах
§ Синхронизация
Сетевой объект – поток байтов.
1. ориентир на логику сообщений
2. объектно-ориентированные
Клиентский компонент посылает сообщение заявки на обслуживание,
содержащей параметры запрашиваемые окружением. Взаимодействие
клиент-сервер асинхронно. Отказоустойчивость можно обеспечить путем
организации определенных ???
Удаленный вызов процедур
count = read(fd, buf, bytes);
Таблица 2.1. Стек при вызове процедуры
bytes
buf
… Передавать параметры по значению просто, а вот по ссылке –
проблема. Вызов через клонирование восстановлением.
Передача параметров
1. Формируется пакет, содержащий имя процедуры и ее параметры.
2. Сообщение принимается заглушкой-сервером
3. Заглушка на сервере формирует вызов процедуры (как
локальной)
Передача параметров по значению.
Рис. 2.5.
Клиентский процесс когда ос осуществляет вызов он приостанавливает
свою работу, ждет возвращение результата. Когда он получает
результат, он продолжает свою работу. Проблемы, возникающие при
этом были достаточно успешно решены.
Передача параметров по ссылке.
Передать копию ссылки не представляется возможным, так как ссылка –
это указатель в адресном пространстве, бессмысленно передавать ее
копию. Вариант… Надо понимать, что заглушки должны использовать
один протокол, как они будут… Чтобы облегчить работу по созданию
заглушек, используется язык определения интерфейсов.IDL – Interface
Definition…
Расширение модели RPC. Асинхронный вызов.
Держать блокированного клиента нет никакого смысла. Для этого
используется асинхронный вызов. Поступило сообщение, управление
сразу возвращается и пускается ответ, что сообщение принял.
Или когда клиент запрос передает серверу и он (ему ответ не очень
нужен) и сервер неспешно может выполнить этот запрос и в
асинхронном режиме вернуть результат.
Асинхронный RPC.
Рис. 2.6.
Вызов удаленной процедуры. Как только сервер его получит, он сразу
же возвращает подтверждение, а клиент продолжает свое дело и когда
сервер выполнит свою процедуру, он возвращает результат, клиент
приостанавливается, получает подтверждение, и оба продолжают свое
дело.
Общие сведения об объектно-ориентированном промежуточном слое.
Обращение к удаленным объектам.
Надо сказать… Обращение к удаленным объектам – это право преемник,
когда основательно поработали с RPC, поняли, что его можно
перенести на ООП. И тут всплывает понятие распределенный
объект.
Состав объекта.
Рис. 3.1.
Корректный способ обращения к данным – это только через интерфейсы
объекта. Это прототипы объекта. Мы с вами говорили, что можно
сделать, так чтобы в объект переадрисовывалось несколько
интерфейсов. Эта идея (что есть объект и есть его интерфейс)
является ключевой. Эту простую идею я вам сейчас нарисую.
Обращение к удаленным объектам.
Рис. 3.2.
Есть серверная машина, есть клиентская. Есть на клиентской машине
нечто. На серверной машине есть сервер, на сервере есть клиент.
Клиент содержит состояние, то есть данные, объект содержит методы.
Должно быть нечто, которое упаковывает и формирует сообщение,
называют заместителем, то есть на клиентской части замещает объект
и клиент обращается через интерфейс как удаленная служба.
На клиентской машине формируется сообщение и передается на
серверную. Часть, которая его получает, называют скелетоном. Тоже
вызывается через интерфейс. Объект на сервере не знает, что к нему
удаленно обращаются. И рис. 3.2 – это обобщенная организация
распределенных объектов. И мы теперь видим, что входит в понятие
распределенного объекта: сам объект на с.м., интерфейсы, через
которые идет обмен, скелетон и заместитель.
Привязка клиента к распределенному объекту.
Адресное пространство клиент выполняется заместителем и размещение
заместителя в адресном пространстве клиента и называют привязкой к
объекту.
В общем функциональность заместителя понятна. Он выполняет
упаковку(маршалинг), выполняющийся при обращении, также выполняет
распаковку, сообщений содержащих обращение к методам и передач
результатов клиента.
И обращение к методу объекта через интерфейс. Объекту на сервере в
этом сечении все равно – он не знает, кто к нему обращается. Также
скелетон упаковывает результат вызова метода и заглушкой
возвращается заместителю на клиенте.
Удаленный объект – это распределенный объект, состояние которого
хранится на одном компьютере(т.е. не распределено).
Объекты времени компиляции и объекты времени выполнения
(раздел)
1. Объекты времени компиляции – объект является экземпляром класса.
Под него выделяется место. Будем такими объектами пользоваться. Во
время компиляции формируются части УО. Но ограниченность этого
подхода – все делается на одном языке. Если используется несколько
языков, то здесь это не всегда хорошо.
2. Или объект создается непосредственно во время выполнения.
Пример 12.Есть библиотека на C. Ее набор функций хотелось бы
превратить в объект и работать с ними, как с методами объекта. В
такой постановке один из вариантов решения – адаптера объекта,
который выполняет роль оболочки реализации библиотеки и у него
задача – создать видимость объекта. Этот вариант удачней решается,
когда используется 2 – объект времени исполнения.
Использование библиотеки на C.
Рис. 3.3.
Заранее скомпилировать наверно можно.
Сохранные и не резидентные объекты.
Из термина сохранные – объект продолжает существовать, даже не
находясь постоянно в адресном пространстве серверного процесса. То
есть, объект всегда можно воссоздать из памяти независимо от
наличия процесса.
Нерезидентный объект – объект, который существует, пока им
управляет сервер. Когда сервер завершает работу, это объект
прекращает существование.
Привязка клиента к объекту.
А за этим стоит:
1. Заместитель должен знать, где находится объект.
2. Разрешение ссылки – это как раз обозначение процесса поиска
объекта в РС, где он находится. При…
Реализация ссылок на объект
Ссылка должна содержать информацию, которая должна позволять
осуществить привязку к объекту. Нужен адрес машины, адрес процесса,
адрес объекта.
Лекция 9.11.04
1. Сетевой адрес
2. Конечная токчка
3. Объект
На сервере создать «Локакльный демон», который будет отселживать
конечные точки и соотве-ие им объекты. Посл привязки клиента(ему
нужна ссылка на объект), он будет запрашивать конечную точку у
локального демона. Итак эту задачу решили. Ссылка должна содержат
1, 3 и через локального демона можно спрашивать конечную точку.
Сетевой адрес прописывается в ссылке.
Захотели перенести объект на др. сервер. Идея та же. Вводится
сервер-локализация, которая отслеживает, на каких компах находится
сервер с объектом. Вместо сетевого адреса конр. компа мы имеем
ссылки сервера локализации, который будет содержать инфо о
конкретном объекте на некотором компе.
Теперь используется понятие «идентификатор».
Идентификатор сервера. Об именовании. Имена, идентификаторы,
адреса.
Идентификатор сервера
Чтобы общаться с сущности необходимо иметь к ней доступ через точку
доступа. Имя точки доступа называют адресом.
Пример 13.Адрес сервера – IP +адр. факта.
Точка доступа может с течением времени изменятся. Перенесли ноут и
в новом месте у него новый IP.
Статическое и динамическое удаленное обращение к методу.
О языке определения интерфейсов
1.1.1.11. Удаленное обращение к методу – Remote Method Invocation
(RMI)
Напоминает RPC(Рассмотрено ранее). Есть различия - поддержка RMI
удаленных… Пример 14.Описание интерфейса футболиста.
Динамическое обращение
Иногда удобнее собрать параметры обращения к методу в процессе
исполнения. Этот процесс – динамическое обращение. Когда
неизвестно, к какому методу будет обращение.
invoke (object, method, input inparam, out outparam);
Передача параметров
Используются ссылки на объекты, как параметры, которые передаются
при обращении к удаленному объекту: по значению. Если ссылка
возвращается: клиент получил ссылку, прежде чем обратится, он
осуществляет привязку. Есть нюанс. Объект, ссылка на который
передается:
1. находится в адресном пространстве клиента
2. находится удаленно
Они реализуются по-разному. Ссылка передается только для удаленных
объектов. А если объект локальный, то передается копия объекта.
Передача объектов.
Рис. 3.4.
При удаленном вызове фигурирует ссылки O1, O2 и при этом
осуществляется копирование O1 и передачи ссылки на O2. Это все
спрятано.
Сервер объектов
~ - это сервер, ориентированный на поддержку распределенных
объектов. Он предоставляет конкретной службы. Конкретные службы
реализуются на сервере, реализуемые объектами. Сервер предоставляет
только средства обращения к локальным объектам на основе запросов
от удаленных клиентов. Фактически сервер выступает как место для
хранения объектов. Как следствие, то легко добавлять новые службы:
добавляется новый объект.
Адаптер объекта
2. Эта предварительная подготовка для разных объектов разная.
Необходимо как-то сгруппировать объекты в соответствии с политикой
активизации. Это… 3. Адаптер объектов является общедоступным для
разработчиков распределенных… Если несколько объектов с разной
политикой активизации, то на каждую группу с одинаковой политикой
активизации надо…
Перенос кода
Идет процесс. Принимается решение системы: взять исполняемый код и
перенести его на другой компьютер. Задача дорогостоящая. И должны
быть причины,… 1. Одна из них – распределение выполняемых задач при
большой загрузке для… 2. Коммуникационный трафик. Это даже более
веская причина.
Модели переноса кода
При переносе процесса должно также переноситься состояние
программы, получившей сигналы и другие элементы среды
исполнения.
Шаблон:
1. Сегмент кода
2. Сегмент исполнения
3. Сегмент ресурсов (ссылка на внешние ресурсы необходимы
процессу)
Модели:
1. модель слабой мобильности(Applet)
· простота
· единственное требование – чтобы машина могла выполнить
2. модель сильной мобильности
· перенос 1+2 (можно переносить работающую программу)
· Инициатор переноса:
- отправитель - (поиск программы напрямую)
- получатель
Где запускать полученную программу?
· процесс – приемник (Java applet загружен в броузер)
· в отдельном процессе – более ???
Можно не передавать, а сделать копию.
Перенос и локальные ресурсы
1.1.1.13. 3 типа связи процесса с ресурсом:
1. Процесс передает в точности тот ресурс, на который ссылаются
аргументы – ссылка на локальную конечную точку (наиболее сильная
связь)
2. Более слабая связь процессу нужно только значение (libs)
3. наиболее слабая форма связи – процесс указывает на использование
ресурса определенного типа (принтер «номер»)
Связь ресурса с машиной
1. ??? ресурсы (могут быть перенесены с машины на машину) Например,
файлы данных
2. Свободные ресурсы локальные
3. фиксированные ресурсы
Перенос кода в неоднородных системах
Все упрощается, если применяется модель слабой мобильности. На
сегодняшний день ряд языков обладает высокой степенью
переносимости, например Java. Недостаток - ???
О программных агентах
Определение 3.1 Программный агент – автономный процесс, способный
реагировать на среду исполнения, вызывать изменения в среде
исполнения, возможно в кооперации с другими агентами.
1. Автономность
2. инициатива
3. кооперация
Классификация агентов
Мобильные
Могут перемещаться с машины на машину
3.8.2 Модель – клиент-сервер
Соотношение клиент-сервер.
Рис. 3.6.
Определение 3.2 Процессы, реализующие службы и предоставляющие к
ним доступ, называются серверами.
Определение 3.3 Процессы, запрашивающие службы – клиенты.
Режимы установления соединения:
1. не требует – клиент не получает результат выполнения запроса
может использоваться только для очень надежных систем
2. требует TCP/IP
Разделение приложений по уровням
Есть задача, как разделить на 2 уровня? Пока универсального решения
нет. Рассмотрим ситуацию доступа к БД.
Можно выделить 3 уровня:
1. Уровень пользователя интерфейсом – содержит все, что необходимо
для обмена с пользователем
2. Уровень обработки – средний уровень
3. Уровень данных – содержит данные – БД
Вариант разделения приложения модели клиент-сервер.
1-3 можно разбить по физическим объектам.
Разбиение на уровни.
Рис. 3.7.
Таблица 3.1. Утолщение клиента
1.
можно разбить пользователей интерфейса
2. БД на сервере, клиент – у клиента
3. Часть приложения + клиент
4. пользователь интерфейса + приложение
5. Часть БД на клиенте
тонкий клиент толстый клиент
Трехзвенная архитектура.
Рис. 3.8.
Приложение выступает в роли клиентосервера.
Реализация технологии клиент-сервер на Java (работа с сетями)
import java.io.*;
import java.net.*;
public class SocketTest {
Клиентская часть
В ней нужно установить менеджер обеспечения безопасности, так как
обращаемся к удаленным объектам и не известно, что они нам
преподнесут. Для этого есть RMISecurityManager. Его нужно
устанавливать.
Пример 18.Вот пример для использования удаленных объектов: import
java.rmi.*; import java.server.*; public class ProductClient{
public static void main(string[] args){ // Устанавливается служба
безопасности System.setSecurityManager(new RMISecurityManager); //
Формируем URL String URL = “rmi://localhost/”; //Далее суть rmi
try{ Product c1 = (Product)Naming.lookup(url+”toaster”); // Это
ссылка на заместителя на клиентской части в адресном пространстве
клиента. //Вот на сколько спрятано от программиста в механизме rmi:
создание заглушек, заместителей по описанию интерфейса, обращение к
службе Naming. Product c2 =
(Product)Naming.lookup(url+”microwave”);
System.out.println(c1.getDescription()); // А здесь нужно
проиллюстрировать как идет обращение к методу удаленного объекта и
этой строчки для этого не достаточно. Аналогично: (Можно объяснять
и диаграммой и словами) System.out.println(c2.getDescription()); }
cathc{..} } }
Объяснение в виде диаграммы последовательности
Последовательность вызовов.
Рис. 3.9.
На стороне сервера есть класс ProductImpl – класс – удаленный
объект.
1. Клиент обращается к службе именования за информацией об
уделенном объекте по имени – связывание. Результат – создание
заглушки.
2. Клиент обращается к заглушке в процессе обращения к методу.
3. Заглушка формирует запрос: упаковывает параметры, осуществляет
маршашинг и обращается к серверной части.
4. Получатель осуществляет демарш-г и действительно обращается
локально к методу Description и возвращает результат обращения.
Если обращение не удачно, то исключение – передается на клиентскую
сторону.
5. Получатель осуществляет маршалиг этого результата. Свернутое,
значит подвергнутое маршалингу. Результат – строка или
исключение.
Вот что стоит за 2 командами клиентской части. Каждый раз
выполняется на 1 команду.
Дополнительные сведения rmi.java
В RMI распределенные объекты используются в виде модели удаленных
объектов, это значит, что распределенный объект не будет хранится
на одном компьютере, а доступ к нему через удаленный интерфейс.
Один удаленный интерфейс реализован на клиенте, а другой на сервере
в виде заместителя.
Разница между удаленными и локальными объектами.
Рассмотрим клонирование локальных и удаленных объектов. Для
локальных создается копия с теми же состояниями. А для удаленного:
клонирование должно состоять еще и в клонировании составных частей
– заглушек. Этого разработчик RMI не осилит. Разработчики
ограничились клонированием только серверной части, а если клиент
хочет обратится к клону, то он должен осуществить связывание, то
есть создать на клиентской части заместителя в адресном
пространстве.
Блокировка объектов
Локальный объект: делаем методы синхронизированными и
осуществляется блокировка и синхронизация.
Удаленный объект: синхронизировать обращение к нему значит:
Если хотим обращаться к синхронизированным методам: разработчики
RMI ограничились синхронизацией только серверной части. Это не
всегда обеспечивает защиту от одновременного доступа.
Вопрос удаленных объектов
В качестве параметров могут выступать простые и объектные типы. При
передаче объектов есть нюансы: при передаче локального объекта
передается копия (см. ранее рис), при передаче удаленного – ссылка
на объект, значит она должна быть сериализуема, так как
подвергается маршалингу. Ссылка должна содержать сетевой адрес
удаленного объекта, конечную точку сервера, локальный идентификатор
объекта и еще передается стек протоколов, т. е с помощью какого
протокола осуществляется сетевое общение.
При обращении к удаленному объекту есть разделение: заглушка знает,
где находится удаленный объект, а заместители тоже сериализуются,
то есть могут быть переданы с компьютера на компьютер. В качестве
ссылки на удаленный объект можно взять заглушку(заместителя -
синонимы), потому что в ней есть вся информация и ее можно
передать. В будущем будем это использовать.
4. Последний раздел языка Java: интерфейс JDBC при работе с БД
JDBC - Java Data Base Connectivity.
Этот интерфейс с 1996 г. позволяет с помощью SQL обращаться к БД
разных производителей. Причем на Java программы от платформы не
зависят. Этот интерфейс основан на модели ODBC Microsoft. Вот
суть:
JDBC.
Рис. 4.1.
Есть сечение – с ним работает пользователь. Это JDBC API. И есть
наборы драйверов. Основная вещь – менеджер драйверов, который
переадресовывает запросы к конкретным драйверам и теперь можно
нарисовать трехуровневую архитектуру.
Трехуровневая архитектура.
Рис. 4.2.
Есть клиентская часть (внутреннее представление), Есть
промежуточный уровень – бизнес-логика, JDBC и сервер БД. В основе
лежит SQL запрос у бизнес-логики.
Есть лаба.
Определение местонахождения распределенных объектов
Есть способы идентификации объектов на сервере:
1. именование
2. трейдинг
Именование
Основное назначение службы именования – управление пространствами
имен, представляющими собой наборы связей между именами и
объектными ссылками.
Клиент отправляет в службу именования имя, а в ответ получает
объектную ссылку, а дальше уже знает где объект и общается с
ним.
Трейдинг
Нужно связывать объект с определенным именем – некоторая
последовательность идентификаторов и она может быть разрешена в
ссылку на объект.
Пример 19.Продолжение проги с футбольными командами
Надо объект зарегистрировать на сервере именований с использованием
официального названия команды. А дальше посылаем…
Пример 20.
Перепад команд.
Рис. 4.4.
Перепад команд: Англия – Германия. Команды дописать самим.
Пример 21.Составное имя: (“UEFA”, “England”, “Prmier”).
Теперь нас интересует размещение мобильной сущности, то есть, те
которые гуляют по распределенной сети. Содержание контекста
имен:
-адреса
-идентификаторы
-имена, которые для восприятия человеком
В целях реализации пространства имен удобно разбить на 3
уровня:
1. глобальные
2. административные
3. управленческие
Имена 1 и 2 изменяются не часто, то есть их содержимое относительно
постоянно, то можно воспользоваться кэшированием путей. Это
добавляет эффективности. А в 3 есть динамика смены имен, связей,
перемещение объектов и кэширование уже не эффективно. И здесь имена
связывают с идентификаторами. А идентификаторы привязаны к ресурсу.
А второй механизм – связь идентификатор: адрес. Это служба
локализации.
Место службы локализации.
Рис. 4.5.
Лекция 7.12.04
Есть объект в каком-то адресном пространстве. Он может перемещаться
по адресным пространствам: оставляет заместитель, а в новом АП
формируется ссылка на объект. Такая схема в общем-то прозрачна для
клиента: он не знает, что происходили перемещения. При получении
запроса ответ может пойти по прямой схеме, так как известен путь и
кто запросил сервис этого удаленного объекта.
Перемещение сущности.
Рис. 4.6.
Есть «Но» в этой схеме. Завис процесс в цепочке – цепочка
оборвалась: добраться к удаленному объекту больше невозможно.
Бороться с этим можно с помощью базовой точки.
Та машина, на которой сначала создавался объект, назовем базовой
точкой. Обеспечим, чтобы эта машина всегда имела информацию о
текущем местоположении созданного ею объекта. Тогда прослеживается
следующая схема: если не удается по цепочке указателей добраться до
объекта, то есть какой-то промежуточный процесс завис, то
происходит обращение к базовой точке. Нужно только позаботится о
том, чтобы БТ этот адрес не утеряла.
Иерархические подходы в службах локализации.
Каждый домен имеет ассоциированный с ним направляющий узел –
dir(D). Вот направляющий узел отслеживает сущности доменов. А
поскольку домены – некая… Рассмотрим эту идею.
Структура домена.
Кэширование указателей
Будут говорится для нас очевидные вещи. Если мобильность объектов
отсутствует или мала, то если клиент обратился к сущности, прошел
по иерархической цепочке, получил инфо, то может ее кэшировать. При
повторных обращениях кэш ускоряет поиск сущности.
Есть различные варианты перемещения сущности:
1. только в пределах листового узла, тогда в вышестоящих узлах инфо
стабильна.
2. если в пределах листовых узлов, то через уровень инфо
стабильна.
Масштабирование
Когда сеть разрастается до больших размеров, то корневой узел –
узкое место: к нему постоянно идут запросы и от него идут
запросы.
Загрузка сети пакетами, транзакциями.
Тогда надо корневой узле надо разбить на несколько компьютеров, и
распределяем нагрузку по ним. Если на более низких уровнях
начинаются перегрузки, то там выполняется эта же процедура.
Объектный трейдинг.
Идентификация через поставщика.
Рис. 4.8.
Просматривается инфо обмена.
Типы сервиса определяют функциональный состав и качество
сервиса.
Функциональный состав определяется операциями, которые этот сервис
экспортирует. В рассмотренном примере это покупка и продажа
акций.
Качество сервиса
Свойство представляют пару: (<name>, <value>). Эта пара
описывает характеристику сервиса. В примере – это процентная ставка
от сделки. Важно чтобы импортер и экспортер понимали свойство
одинаково.
Синхронизация
Рассмотрим однопроцессорную систему. Таймер и центральный
процессор.
В распределенных системах гораздо сложнее. У каждого компьютера
свой уникальный кварц. Проблема синхронизации часов.(Windows Time
service – и ее нет).
Если будем привязываться к физическим часам, то у нас в идеальном
случае:
(4.1)
где Cp(t) – показываемое время
t – реальное время
Тогда для синхронизации надо наложить ограничения на производные.
Например, так:
(4.2).
Тогда эта величина будет характеризоваться величиной 2ρ.
Алгоритм Крестиана
Одна из машин имеет приемник коротких импульсов в начале каждой
секунды от радиостанции с позывными wwv(штат Колорадо, США). Такие
приемники – wwv-приемники. Эту машину называют сервером времени. А
машины, работающие в рамках 2ρ запрашивают периодически сервер
времени за метками времени. И здесь есть 2 момента:
1. Чтобы запросить нужно время. Но один из вариантов приема:
поделить время на ответ пополам и прибавить к полученному.
2. Если часы отстают, то мы их доставляем. А вот если часы спешат,
то мы их должны ставить назад. А это не допустимо. Тогда мы не
одномоментно подстраиваем часы, а растягиваем это во времени,
просто замедляя их ход.
Алгоритм Беркли
Там сервер на рассылает эти метки времени. А у него есть демон
времени, который периодически в фоновом режиме опрашивает все
машины о времени. Дальше вычисляет среднее и когда его спрашивают о
времени, он его и выдает. В такой машине wwv-приемника нет.
Логические часы. Алгоритм Лампорта.
Лампорт определил отношение: «Происходит раньше». Оно обозначается:
a à b. Это значит, что все процессы согласны, что событие а
происходит… Если процесс посылает сообщение, а второй процесс это
сообщение принимает, то… Будем передавать сообщения.
Жизненный цикл объекта
Жизненный цикл объекта.
Рис. 4.10.
Фабрика классов.
Рис. 4.11.
Найти фабрику можно с помощью искания (?) фабрики.
Поиск фабрик классов.
Рис. 4.12.
Служба именования получа(?)ет и на исх.(?) ему говорят «Найти Team
Factory».
1. 1.
2. Инициализация vars.
Брокер объектных заявок .
Функции фабрики выполняет переносимый объектный адаптер. В
Java-интерфейсы активации (naming – bind()).
Универсальные фабрики.
Миграция объектов на удаленный хост
Под объектной миграциейпонимаемкопирование/перемещение
объекта-сервера с одной машины на другую. При копировании создается
новый объект, создается новая ссылка. При перемещении ссылка
сохраняется.
Пример полезности- перемещение объектов - перераспределение
нагрузки.
Как можно представить последовательность действий:
Hite(?)CycleObject
Транспорт. объект -> найти с помощью исх. фабрики хост, на
котором надо разместить новый объект. Затем удалить себя. (см. ?)
Ссылка остается прежней.
Когда клиент обращается по ссылке – см. предыдущую лекцию.
Размещение объекта.
Рис. 4.13.
Для клиента перемещение прозрачно. Но для разраб…
Есть так называемые ? системы, в которых все это уже реализовано. ?
объекта – см. сборку мусора.
OMG и CORBA
1989 – Object Management Group – общество. Задача: создание
технологии, позволяющей объединить приложения, выполняемые на
различных программных и аппаратных платформах, выполняемые в разных
потоках, написанных на различных языках программирования, созданных
в разных уголках мира.
1. Результат: набор спецификаций, а не готовый продукт.
2. В качестве идеологии решено было использовать ООП-подход.
OMG занимается только стандартами и принципиально не разрабатывает
готовые продукты.
OMG не навязывает свои стандарты, они сделали такой стандарт,
который использовать удобно.
Распределенные системы обработки информации
176
0
19 минут
Темы:
Понравилась работу? Лайкни ее и оставь свой комментарий!
Для автора это очень важно, это стимулирует его на новое творчество!