Enterprise Cache Protocol Федоров Вадим «Школа Инноваций InterSystems 2007» План Кое-что о Caché Что такое Enterprise Cache Protocol (ECP) Как работает ECP Как настраивать ECP Восстановление после сбоев Что.

Download Report

Transcript Enterprise Cache Protocol Федоров Вадим «Школа Инноваций InterSystems 2007» План Кое-что о Caché Что такое Enterprise Cache Protocol (ECP) Как работает ECP Как настраивать ECP Восстановление после сбоев Что.

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

Run Number CPUs

1 2 3 4 5 8

16

16 24 24

Compiler Optimizations

Нет Нет Нет Нет

UltraSparc III

Users

2935 5545 6650 9325 10255

Caché Version

4.1.4

4.1.4

5.0

5.0

5.0

Database References per econd

115,000 204,000 235,000 315,000 348,000

Idle

18 17 11 15 13

Enterprise Cache Protocol

• 3 сервера по 8 процессоров – Одно и то же приложение – Одна и та же нагрузка – Больше свободных ресурсов 8 CPUs 50% Idle DB Server App Server 8 CPUs 5000 Users 20% Idle App Server 8 CPUs 5000 users 20% Idle

План

Кое-что о Caché

Что такое Enterprise Cache Protocol (ECP)

Как работает ECP Как настраивать ECP Восстановление после сбоев Что учитывать при разработке приложений Примеры использования ECP

Архитектура ECP

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 ECP-сервер Считываем x=3 x ECP-клиент 1 Обновление 1 (Прибавить 1 к «x») Пишем x x=4 Пишем x x=5 ECP-клиент 2 Обновление 2 (Прибавить 2 к «x»)

Обновления с блокировками

• Блокировки обеспечивают работу с «правильными» данными Lock x Считываем x x=3 ECP-сервер Lock x Считываем x x=4 ECP-клиент 1 Обновление 1 (Прибавить 1 к «x») Пишем x x=4 Unlock x Пишем x x=6 Unlock x ECP-клиент 2 Обновление 2 (Прибавить 2 к «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

– Соединение отключено системным администратором – «Демонов» нет – Приложения, использующие это соединение, получают ошибку

Состояния 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-клиента ожидают данные, они получат ошибку – Следующий запрос ECP-клиента заново установит соединение с ECP-сервером

Ограничение ECP

• Если транзакция затрагивает данные, которые хранятся на нескольких ECP-серверах, то существует возможность, что если произойдет сбой на вовлеченном в транзакцию ECP-сервере, и если этот ECP-сервер не восстановится за заданное время (20 минут), то транзакции будут завершены некорректно (ни commit, ни rollback) • Вывод – Использовать один ECP-сервер для данных – Размещать данные так, чтобы в транзакции попадали данные только одного ECP-сервера

План

Кое-что о Caché Что такое Enterprise Cache Protocol (ECP) Как работает ECP Как настраивать ECP Восстановление после сбоев

Что учитывать при разработке приложений

Примеры использования ECP

Разработка приложений с учетом ECP

• ECP – это прежде скорее технология развертывания приложения, которая позволяет менять конфигурацию работающего приложения • Для того чтобы наиболее эффективно использовать ECP необходимо учесть ряд моментов во время проектирования и разработки приложений

Производительность – функция $Data

• Функция $Data над неопределенной глобалью всегда требует запроса к ECP-серверу, чтобы проверить есть ли такая глобаль • Выполнение $Data над неопределенным узлом глобала не требует обращения к ECP-серверу, если глобал находится в кэше ECP-клиента

Производительность – «Большие» строки

• Существует особенность обработки в ECP «больших строк» (755 символов для 2 k БД и 1996 символов для 8 k БД (используется в Caché по умолчанию)) • Узлы глобалов, содержащие «большие» строки не хранятся в кеше ECP-клиента • Каждый запрос «большой строки» требует обращения к ECP-серверу

Производительность – функция $Increment

• $Increment автоматически увеличивает счетчик без блокировки на уровне приложения – Функция $Increment реализована на уровне ядра Caché • Каждый $Increment требует обращения к ECP-серверу • Иногда имеет смысл переделать приложение так, чтобы $Increment использовал данные, которые хранятся на ECP клиенте

Производительность - дополнительно

• Временные глобалы должны по возможности находиться на сервере приложений ECP • Распределение нагрузки между серверами приложения ECP и кеширование данных • Дополнительная память в кеше данных для системных структур ECP

Настройка производительности ECP

• Сервера Caché должны быть правильно настроены • Производительность ECP очень сильно зависит от производительности сети – Необходимо осуществлять мониторинг сети • Производительность зависит от многих факторов – Как приложение использует данные – Как приложение использует блокировки – Использование «больших» строк • Кеширование – Размер кеша данных и программ на сервере данных и сервере приложений ECP-сервере

Настройка производительности ECP

• • Кеширование – очень сильно увеличивает производительность ECP Кеш данных – Желательно, чтобы кэш ECP-сервера содержал все данные, которые запрашивают ECP-клиенты. Иначе, к времени доставки на ECP клиент добавится время доступа к диску ECP-сервера – Кеш ECP-клиента должен достаточным для данных, с которыми работают приложения. Иначе, данные придется часто убирать из кеша ECP-клиента и повторно запрашивать с ECP-сервера • Кеш программ – Если ECP-клиент запрашивает программы у ECP-сервера, то для них нужно сконфигурировать буфер программ и на ECP- сервере и на ECP-клиенте

Обработка ошибки

• • • • Если ECP не может восстановить соединение возникает ошибка Желательно, чтобы приложения умели обрабатывать эту ошибку Основная идея обработки – откатить транзакцию и попробовать выполнить её заново Некоторые операции ($Data или $Order) можно попробовать повторить, не откатывая транзакцию

План

Кое-что о Caché Что такое Enterprise Cache Protocol (ECP) Как работает ECP Как настраивать ECP Восстановление после сбоев Что учитывать при разработке приложений

Примеры использования ECP

НОВАТЭК. Опыт использования ECP

• ОАО «НОВАТЭК» занимается разведкой, добычей и переработкой природного газа и жидких углеводородов • На Caché разработана система финансового учета • Распределенная конфигурация: – 1 ECP-сервер – 5 ECP-клиентов в России, Великобритании, Швейцарии

ЛЕТОГРАФ. Опыт использования ECP

• ЛЕТОГРАФ – партнер-разработчик InterSystems • Система ЛЕТОГРАФ – портальная система для автоматизации документооборота и бизнес-процессов • Для увеличения производительности, масштабируемости и доступности система может развертываться на ECP-кластере

ЛЕТОГРАФ. Опыт использования ECP

Настройка ECP-конфигурации для CSP приложения

Настройка ECP-конфигурации для CSP приложения

Архитектура ECP

ECP-клиент ECP-клиент ECP-клиент

Приложение Приложение Приложение Приложение Приложение Приложение Приложение Приложение Приложение

Итог по ECP

• ECP позволяет создавать много серверные конфигурации Caché • Прозрачен для большинства приложений • Позволяет добиться высокой производительности и масштабируемости • Гарантирована согласованность данных • ECP восстанавливается после сбоев • ECP легко настраивать и сопровождать • ECP может объединять сервера Caché на разных платформах

Дополнительная информация по ECP

• Документация СУБД Caché • Документация по администрированию Caché 5.2 на русском языке • Документация системных классов ECP

Спасибо за внимание! Вопросы?

Вадим Федоров ([email protected]) «Школа Инноваций InterSystems 2007»