Предисловие редактора перевода | 11 |
Предисловие | 14 |
Предисловие к русскому изданию | 19 |
От автора | 21 |
|
Часть I. Основные понятия | 23 |
|
Глава 1. Распределённые системы | 25 |
|
1.1. Что такое распределённая система? | 27 |
1.1.1. Составные части распределённой системы | 27 |
1.1.2. Сравнение централизованных и распределённых систем | 29 |
1.2. Примеры распределённых систем | 32 |
1.2.1. «Видео по требованию» | 32 |
1.2.2. Управление конструированием самолётов | 34 |
1.2.3. Информационная инфраструктура банка | 36 |
1.2.4. Распределённая система управления футбольной лигой | 39 |
1.3. Требования к распределённым системам | 40 |
1.3.1. Масштабируемость | 42 |
1.3.2. Открытость | 43 |
1.3.3. Неоднородность | 44 |
1.3.4. Доступ к ресурсам и их разделение | 45 |
1.3.5. Отказоустойчивость | 47 |
1.4. Прозрачность в распределённых системах | 48 |
1.4.1. Прозрачность доступа | 49 |
1.4.2. Прозрачность местонахождения | 50 |
1.4.3. Прозрачность миграции | 51 |
1.4.4. Прозрачность репликации | 51 |
1.4.5. Прозрачность одновременного выполнения | 53 |
1.4.6. Прозрачность масштабируемости | 54 |
1.4.7. Прозрачность производительности | 55 |
1.4.8. Прозрачность отказов | 56 |
Ключевые моменты | 58 |
Вопросы для самопроверки | 58 |
Дополнительная литература | 59 |
|
Глава 2. Проектирование распределённых объектов | 61 |
|
2.1. Эволюция объектной технологии | 63 |
2.2. UML-представления для проектирования распределённых объектов | 68 |
2.2.1. Диаграммы вариантов использования | 69 |
2.2.2. Диаграммы последовательностей | 70 |
2.2.3. Диаграммы классов | 72 |
2.2.4. Объектные диаграммы | 75 |
2.2.5. Диаграммы состояний | 77 |
2.3. Метамодель распределённых объектов | 79 |
2.3.1. Объекты | 80 |
2.3.2. Типы | 83 |
2.3.3. Заявки | 85 |
2.3.4. Исключения | 86 |
2.3.5. Подтипы и множественное наследование | 88 |
2.3.6. Полиморфизм | 90 |
2.4. Сравнение локальных и распределённых объектов | 91 |
2.4.1. Жизненный цикл | 92 |
2.4.2. Объектные ссылки | 93 |
2.4.3. Задержка заявки | 93 |
2.4.4. Активизация объектов | 95 |
2.4.5. Одновременное выполнение | 97 |
2.4.6. Связь | 98 |
2.4.7. Обработка ошибок | 99 |
2.4.8. Безопасность | 100 |
Ключевые моменты | 101 |
Вопросы для самопроверки | 102 |
Дополнительная литература | 103 |
|
Часть II. Промежуточный слой для управления |
распределёнными объектами | 105 |
|
Глава 3. Принципы объектно-ориентированного промежуточного слоя | 107 |
|
3.1. Компьютерные сети | 109 |
3.1.1. Эталонная модель ISO/OSI | 109 |
3.1.2. Транспортный уровень | 111 |
3.2. Типы промежуточного слоя | 116 |
3.2.1. Транзакционно-ориентированный промежуточный слой | 118 |
3.2.2. Промежуточный слой ориентированный на посылку сообщений | 118 |
3.2.3. Удалённые вызовы процедур | 119 |
3.3. Объектно-ориентированный промежуточный слой | 124 |
3.3.1. Язык определения интерфейсов | 125 |
3.3.2. Реализация уровня представления | 126 |
3.3.3. Реализация уровня сессии | 126 |
3.4. Разработка с помощью объектно-ориентированного промежуточного |
слоя | 129 |
3.4.1. Определение интерфейсов | 131 |
3.4.2. Генерация стабов | 133 |
3.4.3. Реализация объектов клиентов | 134 |
3.4.4. Реализация объектов-серверов | 136 |
3.4.5. Регистрация сервера | 138 |
Ключевые моменты | 139 |
Вопросы для самопроверки | 140 |
Дополнительная литература | 141 |
|
Глава 4. CORBA, СОМ и Java/RMI | 143 |
|
4.1. CORBA | 145 |
4.1.1. Метаобъектная модель и определение интерфейсов | 147 |
4.1.2. Архитектура | 155 |
4.2. СОМ | 157 |
4.2.1. Метаобъектная модель и определение интерфейсов | 159 |
4.2.2. Архитектура | 169 |
4.3. Java/RMI | 172 |
4.3.1. Метаобъектная модель и определение интерфейсов | 174 |
4.3.2. Архитектура | 182 |
Ключевые моменты | 185 |
Вопросы для самопроверки | 186 |
Дополнительная литература | 187 |
|
Глава 5. Устранение неоднородности | 189 |
|
5.1. Неоднородность языков программирования | 191 |
5.1.1. Примеры неоднородности | 192 |
5.1.2. Связывания с языками программирования | 195 |
5 2. Неоднородность промежуточного слоя | 202 |
5.2.1. Примеры неоднородности | 204 |
5.2.2. Интероперабельность | 205 |
5.2.3. Межсистемное взаимодействие | 213 |
5.3. Неоднородность представления данных | 217 |
5.3.1. Примеры неоднородности | 217 |
5.3.2. Разрешение на уровне представления | 220 |
5.3.3. Разрешение на прикладном уровне | 224 |
5.3.4. Разрешение по платформе | 231 |
Ключевые моменты | 233 |
Вопросы для самопроверки | 234 |
Дополнительная литература | 235 |
|
Глава 6. Динамические объектные заявки | 237 |
|
6.1. Мотивирующие примеры | 239 |
6.1.1. Объектный браузер | 239 |
6.1.2. Универсальные мосты уровня заявок | 240 |
6.2. Динамические вызовы | 241 |
6.2.1. Общие принципы | 241 |
6.2.2. Динамические вызовы в CORBA | 242 |
6.2.3. Интерфейс IDispatch в СОМ | 244 |
6.3. Рефлексия | 248 |
6.3.1. Общие принципы | 248 |
6.3.2. Репозиторий интерфейсов CORBA | 250 |
6.3.3. Библиотека типов СОМ | 255 |
6.3.4. Выводы | 257 |
6.4. Разработка универсальных приложений | 258 |
Ключевые моменты | 262 |
Вопросы для самопроверки | 263 |
Дополнительная литература | 263 |
|
Часть III. Общие проблемы разработки | 265 |
|
Глава 7. Расширенное взаимодействие распределённых объектов | 267 |
|
7.1. Синхронизация заявок | 269 |
7.1.1. Общие принципы | 269 |
7.1.2. Односторонние заявки | 271 |
7.1.3 Отсроченные синхронные заявки | 275 |
7.1.4. Асинхронные заявки | 277 |
7.2. Множественность заявок | 281 |
7.2.1. Групповая связь | 281 |
7.2.2. Множественные заявки | 285 |
7.3. Надёжность заявок | 290 |
7.3.1. Одиночные заявки | 290 |
7.3.2. Групповые и множественные заявки | 292 |
Ключевые моменты | 294 |
Вопросы для самопроверки | 295 |
Дополнительная литература | 295 |
|
Глава 8. Определение местонахождения распределённых объектов | 297 |
|
8.1. Именование объектов | 299 |
8.1.1. Принципы именования | 299 |
8.1.2. Служба именования CORBA | 305 |
8.1.3. Псевдонимы СОМ | 312 |
8.1.4. Реестр Java/RMI | 314 |
8.2. Объектный трейдинг | 319 |
8.2.1. Принципы объектного трейдинга | 320 |
8.2.2. Служба трейдинга CORBA | 326 |
Ключевые моменты | 329 |
Вопросы для самопроверки | 330 |
Дополнительная литература | 331 |
|
Глава 9. Жизненный цикл распределённых объектов | 333 |
|
9.1. Жизненный цикл объектов | 335 |
9.1.1. Создание распределённых объектов | 335 |
9.1.2. Миграция объектов на удалённые хосты | 342 |
9.1.3. Удаление объектов | 349 |
9.2. Составные объекты | 354 |
9.2.1. Моделирование композиции распределённых объектов | 355 |
9.2.2. Реализация композиции распределённых объектов | 356 |
9.3. Жизненный цикл составных объектов | 364 |
9.3.1. Жизненный цикл составного объекта с точки зрения |
разработчика клиент | 365 |
9.3.2. Жизненный цикл составного объекта с точки зрения |
разработчика сервера | 366 |
Ключевые моменты | 366 |
Вопросы для самопроверки | 368 |
Дополнительная литература | 369 |
|
Глава 10. Долговечность объектов | 371 |
|
10.1. Принципы долговременного хранения | 373 |
10.1.1. Объекты с внутренним состоянием и без него | 373 |
10.1.2. Прозрачность долговременного хранения | 374 |
10.1.3. Службы долговременного хранения | 376 |
10.2. Использование службы долговременного хранения CORBA | 380 |
10.2.1. Язык определения состояний службы долговременного хранения | 382 |
10.2.2. Связывания с языками программирования | 383 |
10.2.3. Интеграция с объектным адаптером | 385 |
10.2.4. Выводы | 388 |
10.3. Архитектура службы долговременного хранения | 388 |
10.3.1. Компоненты архитектуры и их взаимодействия | 389 |
10.3.2. Генерация компонентов архитектуры | 391 |
10.4. Технологии долговременного хранения данных | 392 |
10.4.1. Долговременное хранение в файловых системах | 393 |
10.4.2. Долговременное хранение в реляционных базах данных | 398 |
10.4.3. Долговременное хранение в объектных базах данных | 402 |
10.4.4. Сравнение технологий долговременного хранения | 405 |
Ключевые моменты | 406 |
Вопросы для самопроверки | 407 |
Дополнительная литература | 407 |
|
Глава 11. Распределённые объектные транзакции | 409 |
|
11.1. Принципы транзакций | 411 |
11.1.1. Основные понятия | 411 |
11.1.2. Операции транзакций | 416 |
11.1.3. Плоские и вложенные транзакции | 417 |
11.2. Управление одновременным выполнением | 418 |
11.2.1. Мотивация | 419 |
11.2.2. Двухфазное блокирование | 422 |
11.2.3. Тупики | 426 |
11.2.4. Иерархическое блокирование | 428 |
11.2.5. Служба управления одновременным выполнением CORBA | 431 |
11.2.6. Выводы | 433 |
11.3. Протокол двухфазной фиксации | 434 |
11.3.1. Роли объектов в распределённых транзакциях | 434 |
11.3.2. Двухфазная фиксация плоских транзакций | 435 |
11.3.3. Открытая обработка распределённых транзакций | 440 |
11.4. Службы распределённых объектных транзакций | 442 |
11.4.1. Служба транзакций CORBA | 442 |
11.4.2. Сервер транзакций Microsoft | 444 |
11.4.3. Транзакции в Java | 446 |
Ключевые моменты | 449 |
Вопросы для самопроверки | 450 |
Дополнительная литература | 450 |
|
Глава 12. Безопасность в распределённых системах | 453 |
|
12.1. Атаки на безопасность 455 |
12.1.1. Уязвимость распределённых систем | 455 |
12.1.2. Угрозы безопасности | 456 |
12.1.3. Методы атак | 458 |
12.1.4. Проникновение | 461 |
12.2. Шифрование | 463 |
12.2.1. Шифрование с секретным ключом | 464 |
12.2.2. Шифрование с открытым ключом | 465 |
12.2.3. Распространение ключей | 467 |
12.2.4. Выводы | 469 |
12.3. Службы безопасности более высокого уpoвня | 470 |
12.3.1. Межсетевые экраны | 470 |
12.3.2. Аутентификация | 471 |
12.3.3. Управление доступом | 473 |
12.3.4. Неопровержимость | 477 |
12.3.5. Аудит безопасности | 479 |
12.4. Службы безопасности в объектно-ориентированном промежуточном |
слое | 480 |
12.4.1. Аутентификация | 481 |
12.4.2. Управление доступом | 482 |
12.4.3. Неопровержимость | 484 |
12.4.4. Аудит | 485 |
Ключевые моменты | 487 |
Вопросы для самопроверки | 488 |
Дополнительная литература | 489 |
|
Приложение. Полная реализация футбольного примера на CORBA IDL/C++ | 491 |
Литература | 499 |
Предметный указатель | 506 |