Книга: Программист-прагматик. Путь от подмастерья к мастеру
Архитектура
Архитектура
Несколько лет назад мы написали систему оперативной обработки транзакций (OLAP – on-line transaction processing). В простейшем варианте все, что должна была сделать система, – это принять запрос и обработать транзакцию в сравнении с БД. Но мы написали трехзвенное, многопроцессорное распределенное приложение: каждый компонент представлял собой независимую единицу, которая выполнялась параллельно со всеми другими компонентами. Хотя при этом возникает впечатление большой работы, это не так: при написании этого приложения мы использовали преимущество временной несвязанности. Рассмотрим этот проект более подробно.
Система принимает запросы от большого числа каналов передачи данных и обрабатывает транзакции в рамках БД.
Проект налагает следующие ограничения:
• Операции с БД занимают сравнительно большое время.
• При каждой транзакции мы не должны блокировать коммуникационные службы в момент обработки транзакции БД.
• Производительность базы ухудшается за счет слишком большого числа параллельных сеансов.
• Множественные транзакции осуществляются параллельно на каждой линии передачи данных.
Решение, обеспечивающее наилучшую производительность и самый четкий интерфейс, выглядит подобно представленному на рисунке 5.3.
РИС. 5.3. Общая схема архитектуры системы оперативной обработки транзакций
Каждый прямоугольник обозначает отдельный процесс; процессы связываются через очереди работ. Каждый входной процесс отслеживает состояние одного входного канала связи и осуществляет запросы к серверу приложения. Все запросы являются асинхронными: как только входной процесс осуществляет текущий запрос, он сразу же возвращается к отслеживанию канала на наличие трафика. Точно так же сервер приложения осуществляет запросы процесса БД [32] и уведомляется в момент завершения отдельной транзакции.
На этом примере также демонстрируется способ быстрого и грубого распределения нагрузки между множественными потребительскими процессами: это так называемая модель голодного потребителя.
В модели голодного потребителя центральный планировщик заменяется на несколько независимых задач потребителя и централизованную очередь работ. Каждая задача потребителя захватывает некий фрагмент очереди работ и продолжает заниматься своим делом – его обработкой. Как только задача заканчивает свою работу, она возвращается к очереди за новой порцией. В этом случае, если выполнение какой-либо задачи срывается, другие задачи могут «натянуть поводья» и каждый отдельный компонент может продолжаться в своем собственном темпе. Происходит временная несвязанность одного компонента с другими.
Подсказка 40: Проектируйте, используя службы
На самом деле, вместо компонентов мы создали службы – независимые, параллельные объекты, скрытые за четко определенными, непротиворечивыми интерфейсами.
- Классическая архитектура на Windows NT (Yaffil CS)
- 1.3 Архитектура Windows NT
- Глава 10 Архитектура клиент-сервер: складской учет
- Гибридная архитектура PKI
- Простая архитектура PKI
- Многоверсионная архитектура InterBase
- Ветвящиеся структуры – архитектура мира растений
- Архитектура активного каталога
- Архитектура корпоративной PKI
- Архитектура виртуальной файловой системы
- Базовая архитектура драйверов
- Архитектура терминального доступа