700 likes | 1.01k Views
Enterprise Cache Protocol. Федоров Вадим «Школа Инноваций InterSystems 2007». План. Кое-что о Caché. Что такое Enterprise Cache Protocol (ECP). Как работает ECP. Как настраивать ECP. Восстановление после сбоев. Что учитывать при разработке приложений. Примеры использования ECP.
E N D
Enterprise Cache Protocol Федоров Вадим «Школа Инноваций InterSystems 2007»
План Кое-что о Caché Что такое Enterprise Cache Protocol (ECP) Как работает ECP Как настраивать ECP Восстановление после сбоев Что учитывать при разработке приложений Примеры использования ECP
План Кое-что о Caché Что такое Enterprise Cache Protocol (ECP) Как работает ECP Как настраивать ECP Восстановление после сбоев Что учитывать при разработке приложений Примеры использования ECP
Устройство Caché • Caché хранит данные и программы в базах данных • База данных состоит из одного или нескольких файлов (cache.dat + extent-ы), которые хранятся на сервере • Сервер Caché управляет несколькими базами данных (до 256 баз данных у одного сервера)
Устройство Caché • Каждый сервер Caché управляет кешом базы данных, в который поднимаются данные, которые запрашивают приложения, работающие с Caché • Каждый сервер Caché управляет кешом программ, в который «поднимаются» программы, запускаемые приложениями, работающими с Caché • Данные и программы остаются в кеше пока они не вытесняются новыми данными и программами • При перезагрузке Caché кеш данных и программ очищается • Кеширование значительно увеличивает производительность Caché
Устройство Caché • Приложения работают с данными и программами через области (Namespace) • Область – логическое объединение данных и программ, которые хранятся в одной или нескольких базах данных • В Caché можно гибко настраивать, какие глобалы и программы будут включены в область
Устройство Caché • Область может объединять данные из нескольких баз данных и несколько областей могут использовать данные из одной базы данных: • Приложения работают с данными и программами через области независимо от того, где они физически находятся • Администратор Caché может прозрачно для приложений и пользователей быстро менять физическое местоположение данных и программ • Enterprise Cache Protocol позволяет располагать данные и программы и на других серверах
Как увеличить масштабируемость • Увеличение мощности сервера • SMP • NUMA • Кластерные конфигурации • OpenVMS, Unix • Enterprise Cache Protocol
Тестирование совместно с SUN • Sun UltraSPARC III optimized with the Forte[tm] Developer 6 Update 2 C++ compiler (now the Sun ONE Studio product line) running the Solaris Operating Environment and InterSystems' Caché 5 supported 10,255 simulated users on a single server. • http://wwws.sun.com/software/sundev/success/intersystems.html
DB Server 8 CPUs 50% Idle App Server App Server 8 CPUs 5000 Users 20% Idle 8 CPUs 5000 users 20% Idle Enterprise Cache Protocol • 3 сервера по 8 процессоров • Одно и то же приложение • Одна и та же нагрузка • Больше свободныхресурсов
План Кое-что о Caché Что такое Enterprise Cache Protocol (ECP) Как работает ECP Как настраивать ECP Восстановление после сбоев Что учитывать при разработке приложений Примеры использования ECP
Архитектура ECP ECP-сервер ECP Server ECP-клиент ECP-клиент ECP-клиент Приложение Приложение Приложение Приложение Приложение Приложение Приложение Приложение Приложение
Компоненты ECP • ECP-сервер-сервер Caché, который предоставляет данные для одного или нескольких ECP-клиентов (до 254) • ECP-клиент - сервер Caché, использующий данные одного или нескольких ECP серверов (до 254) Сервер Caché может быть одновременно и ECP-сервером, и ECP-клиентом • Приложение – информационная система, которая работает с Caché
Использование ECP • Приложение работает с ECP-клиентом так же как и с обычным сервером Caché. Можно работать с: • Классами Caché • SQL • Глобалами • Программами Caché Object Script и Caché BASIC • CSP, SOAP • Интерфейсами к Java, С++, COM и т.д. • Разница в том, что • Некоторые данные приходят с ECP-сервера • Некоторые программы приходят с ECP-сервера
План Кое-что о Caché Что такое Enterprise Cache Protocol (ECP) Как работает ECP Как настраивать ECP Восстановление после сбоев Что учитывать при разработке приложений Примеры использования ECP
Рассмотрим работу ECP ECP-сервер ECP-клиент Приложение Приложение Приложение
ECP и операция чтения • Приложение читает узел глобала • $Get,$Order,$Data … • ECP-клиент запрашивает узел глобала у ECP-сервера и ждет ответа. • ECP-клиент запрашивает блоки данных синхронно • Точно так же идет работа Caché с локальным диском • ECP-сервер обрабатывает запрос ECP-клиента • ECP-сервер посылает узел глобала и блок, в котором содержится этот узел • Узел глобала посылается на ECP-клиент как можно быстрее • Блок может быть послан позже • ECP-клиент работает с узлом глобала точно так же, как если бы он поступил с локальной базы данных
ECP и операция записи • Приложение записывает узел глобала • Set, Kill, $Increment, … • ECP-клиент проверяет есть ли записываемое значение в кеше ECP-клиента • Если блок есть и изменение происходит в рамках этого блока, то он обновляется • Если в результате изменения произойдет разделение блока (block split), то блок помечается как устаревший (discarded)и информация об этом посылается на ECP-сервер • ECP-клиент асинхронно посылает изменения узла глобала на ECP-сервер • Клиентский процесс не останавливается так как процесс уведомления ECP-сервера асинхронный • Процесс записи аналогичен записи в локальный кэш сервера Caché • ECP-сервер получит и обработает изменение узла глобала • Если измененный блок используют другие ECP-клиенты, то ECP-сервер уведомляет их том, что блоки, которые хранятся в их кеше, устарели
ECP и операция блокировки • ECP-клиент хочет заблокировать узел глобала • ECP-клиент посылает синхронный запрос на ECP-сервер • ECP-клиент ждет ответа • ECP-сервер получает запрос • Все асинхронные операции с узлом глобала, на который накладывается блокировка завершаются • Все данныена ECP-клиенте, на котором выполняется блокировка, приводятся в согласованное состояние • Если ECP-сервер может заблокировать узел глобала, то он его блокирует и отвечает ECP-клиенту • ECP-клиент продолжает работать • ECP-сервер координирует относящиеся к немублокировки всех ECP-клиентов
Блокировки защищают данные от одновременных обновлений Считываем x x=3 Считываемx x=3 Пишем x x=4 Пишем x x=5 Обновления без блокировок ECP-сервер ECP-клиент 1 ECP-клиент 2 Обновление 2 (Прибавить 2 к«x») Обновление 1 (Прибавить 1 к«x»)
Блокировки обеспечивают работу с «правильными» данными Lock x Считываем x x=3 Lock x Считываем x x=4 Пишем x x=4 Unlock x Пишем x x=6 Unlock x Обновления с блокировками ECP-сервер ECP-клиент 1 ECP-клиент 2 Обновление 2 (Прибавить 2 к«x») Обновление 1 (Прибавить 1 к«x»)
Оптимизация блокировок • ECP-сервер координирует блокировки • ECP-сервер может на короткое время делегировать управление блокировками ECP-клиенту • Если запрашиваемой блокировки не существует на ECP-сервере, то она создается и управление этой блокировкой передается на ECP-клиент • Если запрашиваемая блокировка существует на ECP-сервере, но она может быть создана, то управление этой блокировкой передается на ECP-клиент • Если на ECP-сервере есть локальная блокировка или блокировкой управляет другой ECP-клиент, то ECP-клиент ожидает ответа • ECP-клиент управляет блокировкой (аналогично локальному серверу Caché) пока • Есть очередь на эту блокировку, порожденную локальными процессами • Количество операций с этой блокировкой меньше заданной (максимум 60) • Управление передается обратно на ECP-сервер и может быть передано другим ECP-клиентам
ECP и транзакции • Транзакция начинается на ECP-клиенте • Если затрагиваются данные, которые находятся на ECP-сервере, то • В таблицу ECP-транзакций попадает информация о изменяемых данных • На ECP-сервер посылается сообщение о старте транзакции • ECP-сервер получает информацию о транзакции на ECP-клиенте и стартует соответствующую транзакцию • ECP-сервер поддерживает таблицу локальных транзакций, созданных по запросам ECP-клиентов • ECP-клиент посылает сообщение о завершении транзакции • ECP-сервер завершает соответствующую локальную транзакцию и стирает запись о ней в таблице локальных транзакций • Поддержка транзакций устойчива с сбоям ECP-сервера • Рекомендуемая конфигурация – один ECP-сервер и любое количество ECP-клиентов
Оптимизация производительности • Для оптимизации и ECP-сервер, и ECP-клиент объединяют небольшие ECP-сообщения (запрос на блокировку, освобождение блокировки, информация о том, что блок устарел и т.д.) в одно сообщение • ECP минимизирует количество сообщений, избегая длительной задержки сообщений • Синхронные и асинхронные сообщения обрабатываются по-разному
Кеширование блоков • ECP кэширует блоки на ECP-клиенте • Так же как локальный сервер кеширует используемые блоки в памяти • Блок, который содержит запрашиваемый узел глобала может быть направлен на ECP-сервер сразу же вместе с узлом глобала или через некоторое время • ECP-клиент поддерживает кэш блоков, который используют приложения, работающие с ECP-клиентом
Согласованность данных в ECP-системе • Необходимо поддерживать согласованность данных в ECP-системе • Записи на ECP-клиентепередаются асинхронно на ECP-сервер • ECP-сервер поддерживает таблицу ECP-клиентов • В таблице хранится список кешированных блоков на ECP-клиентах • Когда ECP-сервер записывает блок он он проверяет есть ли этот блок в кэше • Если есть, то ECP-сервер посылает информацию о том, что блок «устарел» на соответствующие ECP-клиенты • ECP следит за порядком блокировок, записей и устареванием блоков • Гарантируется когерентность данных в ECP-системе
План Кое-что о Caché Что такое Enterprise Cache Protocol (ECP) Как работает ECP Как настраивать ECP Восстановление после сбоев Что учитывать при разработке приложений Примеры использования ECP
Настройка ECP • Для настройки ECP в Портале управления системой есть закладка «ECP настройки» ([Домашняя страница] > [Конфигурация] > [ECP настройки])
Конфигурация ECP-сервера • Включите сервис %Service_ECP ([Домашняя страница] > [Управление безопасностью] > [Сервисы] > [Редактировать сервис] ) • Перезапустите Caché • ECP-сервер готов устанавливать соединения с ECP-клиентами
Ограничение доступа ECP-клиентов • В Портале управления системой можно ограничить доступ ECP-клиентов к ECP-серверу • Можно указать: • Допустимые IP-адреса ECP-клиентов • Роли для соединениякаждого ECP-клиента с ECP-сервером • Обратите внимание на соответствие привилегий ролей соединения и ролей на ECP-клиенте (сервере приложений)!
Конфигурация ECP-клиента • В Портале управления системой ECP-клиента (сервера приложений ECP)необходимо добавить информацию о ECP-сервере ([Домашняя страница] > [Конфигурация] > [ECP настройки]) • Нужно указать: • Имя ECP-сервера • Адрес сервера(IP-адресили имя DNS) • Номер порта
Конфигурация ECP-клиента • Перезапустите Caché для активации изменений • ECP-клиент сконфигурирован • ECP-клиент установит соединение с ECP-сервером, когда это будет необходимо
Настройка удаленной базы данных сервера приложений ECP • Сервер приложений ECP (ECP-клиент) должен быть настроен на работу с сервером данных ECP (ECP-сервером) • Создайте новую удаленную базу данных на сервере приложений ECP (база данных физически расположена на сервере данных ECP) • На сервере приложений ECP создайте область, данные и программы которой хранятся в удаленной базе данных на сервере данных ECP
Настройка удаленной базы данных сервера приложений ECP • В портале управления системой ([Домашняя страница] > [Конфигурация] > [Удаленные базы данных]) создайте новую удаленную базу данных • Выберите сервер данных ECP • Выберите каталог БД на сервере данных ECP • Укажитеимя удаленной БД на сервере приложений ECP
Состояния ECP-соединения • Каждое ECP-соединение может иметь различный статус: • Not connected • Normal • Disabled • Trouble • Connection in Progress
Состояния ECP-соединения • Not Connected • Соединение определено, но еще не используется • ECP «демоны» для соединения не запущены. Если клиентский процесс обращается к серверу, «демоны» создаются для этого соединения и соединение переходит в состояние Connection In Progress
Состояния ECP-соединения • Connection in Progress • В процессе установки соединения • Сетевые «демоны» существуют и активно пытаются установить новое соединение • Это переходное состояние, которое существует пока соединение не установлено
Состояния ECP-соединения • Normal • Соединение функционирует нормально и недавно использовалось • «Демоны» на ECP-клиенте существуют и активно посылают запросы и получают ответы по сети • Состояние существует пока соединение не станет неработающим или будет закрыто
Состояния ECP-соединения • Disabled • Соединение отключено системным администратором • «Демонов» нет • Приложения, использующие это соединение, получают ошибку <NETWORK>
Состояния ECP-соединения • Trouble • Соединение встретилось с проблемой • Соединение пытается автоматически исправить ситуацию • После исправления соединение переходит в состояние Not ConnectedилиNormal
План Кое-что о Caché Что такое Enterprise Cache Protocol (ECP) Как работает ECP Как настраивать ECP Восстановление после сбоев Что учитывать при разработке приложений Примеры использования ECP
Восстановление после сбоев • ECP может автоматически восстанавливать разорванное соединение между ECP-клиентом и ECP-сервером • Состояние соединения устанавливается «Trouble» • ECP-клиент пытается заново установить соединение с ECP-сервером
Соединение восстанавливается • Состояние соединения переводиться в«Normal» • Все блокировки восстанавливаются в состояние перед разрывом соединения • Все транзакции восстанавливаются в состояние перед разрывом соединения
Соединение не восстанавливается • Соединение переводится в состояние «Not Connected» • Все блокировки на сервере, которые относятся к потерянному ECP-клиенту, освобождаются • Все открытые транзакции, которые относятся к потерянному ECP-клиенту, откатываются
Восстановление ECP-соединения • В Портале управления системой задаются параметры восстановления ECP • Интервал времени на «проблемное» состояние (Server side wait interval) – сколько времени соединение будет в состоянии «Trouble»перед тем, как ECP-серверобъявит его мертвым (По-умолчанию, 60 секунд) • Интервал попыток восстановить соединение (по-умолчанию, 5 секунд) • Продолжительность ожидания на клиенте серверного восстановления (Client side wait interval)(по-умолчанию, 20 минут)
Восстановление ECP-соединения • ECP-сервер и ECP-клиент ожидают восстановления связи разное время: по-умолчанию, 60 секунд и 20 минут • ECP-сервер «сдается» быстрее, чтобы освободить ресурсы • ECP-клиент ждет дольше, пытаясь увеличить шансы успешного восстановления соединения
Восстановление ECP-соединения • При сбое сервера при перезагрузке ECP-сервер: • Пытается переустановить активные соединения • Разрешает восстановление блокировок, которые запрашивались ECP-клиентами • Заново обрабатывает запросы, которые поступили на ECP-сервер, но о которых не уведомили ECP-клиент • Объявить, что соединения «мертвыми» для всех клиентов, которые не отвечают и откатить транзакции, которые относятся к этим клиентам
Восстановление ECP-соединения • При сбое на ECP-клиенте • ECP-сервер объявляет соединение «мертвым» • Все открытые транзакции, относящиеся к клиенту откатываются, и все блокировки освобождаются • Во время восстановления ECP-клиент еще раз передает информацию о транзакциях и блокировках на ECP-сервер • Процессы ECP-клиент обрабатываются как обычно, за исключением небольшой задержки
Восстановление ECP-соединения • При проблемах с сетью • ECP-сервер ждет 60 секунд и объявляет соединение мертвым • ECP-клиент пытается восстановить соединение с ECP-сервером заданное время (20 минут), если это невозможно, объявляет соединение «мертвым»
Восстановление ECP-соединения • Если ECP-клиент объявляет соединение «мертвым»: • Соединение не может быть восстановлено • ECP-клиент откатит все транзакции и освободит все блокировки, которые имеют отношение к ECP-серверу • Если клиенты ECP-клиента ожидают данные, они получат ошибку <NETWORK> • Следующий запрос ECP-клиента заново установит соединение с ECP-сервером