17
ECP и API управления процессами Алексей Маслов, СП.АРМ

ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Embed Size (px)

DESCRIPTION

API for process management in ECP. InterSystems Meetup Sankt-Peterburg 2014

Citation preview

Page 1: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

ECP и API управления процессамиАлексей Маслов, СП.АРМ

Page 2: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Терминология ECP• ECP – протокол распределённого кэширования.

• Собственность InterSystems

• Серверы приложений: обращаются к данным.

• Серверы данных: хранят данные.

^a=4

Код:write ^aset ^b

Сервер приложе-ний (клиент ECP)Запрашивает и

изменяет данные

^b=8

Сервер данныхХранит данные

Сервер данныхХранит данные

Page 3: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Горизонтальное масштабирование : плюсы

• Распределение значительной вычислительной мощности по десяткам недорогих серверов.• 1 сервер с 128 ядрами или 8 серверов по 16 ядер CPU?

• Распределённый кэш базы данных.• 1 сервер с 1 TB RAM или 8 серверов по 128 GB RAM?

• Распределённая обработка данных.• Промежуточные данные не покидают серверов

приложений (БД CACHETEMP локальны)

Page 4: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

ECP: достоинства для программиста

• При переносе программы в сетевую среду синтаксис операций с данными не меняется.• Иллюзия локальности базы данных.

• Синхронные операции ($GET(), $ORDER(), …) не ждут завершения асинхронных операций (SET, KILL), инициированных тем же сервером приложений.

• Короткие операции (LOCK, LOCK Release, Block Purge,…) объединяются в один TCP-пакет.• Эффективное использование сети

Page 5: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

ECP: ограничения• Длинные строки (>~ ½ размера блока) не кэшируются на

серверах приложений.• Для 8 KB-блоков: > 3992 B

• Синхронные операции (LOCK, $INCREMENT, …) дороги: они всегда передаются на сервер данных.

• Команда LOCK ждёт завершения записи данных, начатой предыдущим хозяином блокировки.

• Истечение таймаута LOCK не гарантирует, что блокировкой владеет кто-то другой.

• Обработка ошибок <NETWORK>• Правильно: откатить транзакцию и начать заново

Page 6: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

ECP: прикладные проблемы

• Номера процессов не уникальны в сети• $JOB

• Нет доступа к таблице процессов другого сервера• ^$JOB, $zjob(), …

• Нет доступа к свойствам процессов другого сервера• Class %SYS.ProcessQuery

• Нет управления процессами другого сервера• Class SYS.Process

Page 7: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Util.Proc API: ответ на прикладные проблемы ECP

• Дескрипторы процессов, уникальные в сети.

• Общесетевая таблица процессов.

• Доступ к свойствам процессов другого сервера.

• Управление процессами другого сервера.

Page 8: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Дескрипторы процессов, уникальные в сети

• Уникальность адреса в локальной сети.

• Использование с минимальными преобразованиями.

• Легко читаемый формат.

Дескриптор как децимальный номер:

xx.yy.zz.uu.Port.PID, где

xx.yy.zz.uu – IPv4 адрес сервера Caché,Port – tcp-порт суперсервера Caché,PID – номер процесса на сервере Caché.

• e.g.: "192.168.10.119.1972.9724"

Page 9: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Общесетевая таблица процессов

• Глобал в централизованной БД

• Индекс – дескриптор процесса• ^zzzzzzJob("proc","127.0.0.1.56774.12632")

• Данные – основные свойства процесса• $LB("IVANOV","tdv","192.168.1.2","QTEST","READ","qARM.exe“,

• Обновление таблицы – не чаще, чем 1 раз в 10 секунд• Снижение нагрузки на сеть

• Доступ только через API:• Set proc = ##class(Util.Proc).NextProc("")

Set Nsp = ##class(Util.Proc).GetProcProp(proc)

Page 10: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Доступ к свойствам процессов другого сервера

• Доступ к свойствам процесса:• ##class(Util.Proc).GetProcProp("192.168.10.119.1972.9724",

"NameSpace")

• Доступ к переменным процесса:• ##class(Util.Proc).GetProcVar("192.168.10.119.1972.9724",

$name(qARM("User")))

Page 11: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Управление процессами другого сервера

• Полномочия администратора!

• Удалить процесс на другом сервере:• ##class(Util.Proc).KillProc("192.168.10.119.1972.9724")

• Обновляет общесетевую таблицу процессов.

Page 12: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Пример кода: удаление всех процессов, кроме текущего

set (proc,res)="", curNS=$NAMESPACE

for {

set proc = ##class(Util.Proc).NextProc (proc)

quit:proc=""

if '$$$PROCISMY(proc) &&

(curNS = ##class(Util.Proc).GetProcProp(proc, "NameSpace") )

{

set res= ##class(Util.Proc).KillProc(proc)

}

}

Page 13: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Немного о реализации• Выбор способа взаимодействия с процессами на других

серверах:

Сlass %SYSTEM.Event• Официально не работает в сети.

Cобственный TCP-сервер• Необходим дополнительный TCP-порт (кроме 1972).• Дополнительные усилия по настройке.

Web-сервисы

Class %Net.RemoteConnection• Работает через порт супер-сервера (умолчание – 1972).• Не требует дополнительных настроек.

Page 14: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Немного о реализации (2)

• Что считать сетевой работой?

1. Основная БД области является удалённой• Справедливо только на сервере приложений (СП).• Исключает работу на сервере данных (СБД).

2. СБД: 1 + {Не смонтировал ли кто-то нашу БД как удалённую?}• Дорого.• Ненадёжно из-за динамичной природы ECP.

3. СБД: 1 + {Не выполнил ли кто-то проверку 1 на СП?}• Нет: работаем с локальными адресами: 127.0.0.1.Port.PID• Да: переходим на сетевые адресацию: 192.168.1.1.Port.PID

Page 15: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Нужно ли универсальное макро-API?

// Cписок процессов во всех областях

set proc = ""

for {

set proc = $$$ZJOB(proc) quit:proc=""

write proc, ?30 // дескриптор процесса

write $$$ZU(67,6,proc), ! // область (namespace)

}

Page 16: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Перспективы развития реализации Util.Proc

• Опрос серверов приложений идёт медленно, если их много.

=> Параллельные запросы к серверам.

=> Возможно, пересмотр способа взаимодействия в пользу собственного протокола обмена сообщениями.

Page 17: ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014

Спасибо за внимание!