SlideShare a Scribd company logo
ECP и API управления 
процессами 
Алексей Маслов, СП.АРМ
Терминология ECP 
• ECP – протокол распределённого кэширования. 
• Собственность InterSystems 
• Серверы приложений: обращаются к данным. 
• Серверы данных: хранят данные. 
^a=4 
Код: 
write ^a 
set ^b 
Сервер приложе- 
ний (клиент ECP) 
Запрашивает и 
изменяет данные 
^b=8 
Сервер данных 
Хранит данные 
Сервер данных 
Хранит данные
Горизонтальное масштабирование : плюсы 
• Распределение значительной вычислительной 
мощности по десяткам недорогих серверов. 
• 1 сервер с 128 ядрами или 8 серверов по 16 ядер CPU? 
• Распределённый кэш базы данных. 
• 1 сервер с 1 TB RAM или 8 серверов по 128 GB RAM? 
• Распределённая обработка данных. 
• Промежуточные данные не покидают серверов 
приложений (БД CACHETEMP локальны)
ECP: достоинства для программиста 
• При переносе программы в сетевую среду синтаксис 
операций с данными не меняется. 
• Иллюзия локальности базы данных. 
• Синхронные операции ($GET(), $ORDER(), …) не ждут 
завершения асинхронных операций (SET, KILL), 
инициированных тем же сервером приложений. 
• Короткие операции (LOCK, LOCK Release, Block Purge,…) 
объединяются в один TCP-пакет. 
• Эффективное использование сети
ECP: ограничения 
• Длинные строки (>~ ½ размера блока) не кэшируются на 
серверах приложений. 
• Для 8 KB-блоков: > 3992 B 
• Синхронные операции (LOCK, $INCREMENT, …) дороги: 
они всегда передаются на сервер данных. 
• Команда LOCK ждёт завершения записи данных, начатой 
предыдущим хозяином блокировки. 
• Истечение таймаута LOCK не гарантирует, что 
блокировкой владеет кто-то другой. 
• Обработка ошибок <NETWORK> 
• Правильно: откатить транзакцию и начать заново
ECP: прикладные проблемы 
• Номера процессов не уникальны в сети 
• $JOB 
• Нет доступа к таблице процессов другого сервера 
• ^$JOB, $zjob(), … 
• Нет доступа к свойствам процессов другого сервера 
• Class %SYS.ProcessQuery 
• Нет управления процессами другого сервера 
• Class SYS.Process
Util.Proc API: ответ на прикладные проблемы ECP 
• Дескрипторы процессов, уникальные в сети. 
• Общесетевая таблица процессов. 
• Доступ к свойствам процессов другого сервера. 
• Управление процессами другого сервера.
Дескрипторы процессов, уникальные в сети 
• Уникальность адреса в локальной сети. 
• Использование с минимальными преобразованиями. 
• Легко читаемый формат. 
Дескриптор как децимальный номер: 
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"
Общесетевая таблица процессов 
• Глобал в централизованной БД 
• Индекс – дескриптор процесса 
• ^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)
Доступ к свойствам процессов другого сервера 
• Доступ к свойствам процесса: 
• ##class(Util.Proc).GetProcProp("192.168.10.119.1972.9724", 
"NameSpace") 
• Доступ к переменным процесса: 
• ##class(Util.Proc).GetProcVar("192.168.10.119.1972.9724", 
$name(qARM("User")))
Управление процессами другого сервера 
• Полномочия администратора! 
• Удалить процесс на другом сервере: 
• ##class(Util.Proc).KillProc("192.168.10.119.1972.9724") 
• Обновляет общесетевую таблицу процессов.
Пример кода: удаление всех процессов, кроме 
текущего 
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) 
} 
}
Немного о реализации 
• Выбор способа взаимодействия с процессами на других 
серверах: 
 Сlass %SYSTEM.Event 
• Официально не работает в сети. 
 Cобственный TCP-сервер 
• Необходим дополнительный TCP-порт (кроме 1972). 
• Дополнительные усилия по настройке. 
 Web-сервисы 
 Class %Net.RemoteConnection 
• Работает через порт супер-сервера (умолчание – 1972). 
• Не требует дополнительных настроек.
Немного о реализации (2) 
• Что считать сетевой работой? 
1. Основная БД области является удалённой 
• Справедливо только на сервере приложений (СП). 
• Исключает работу на сервере данных (СБД). 
2. СБД: 1 + {Не смонтировал ли кто-то нашу БД как 
удалённую?} 
• Дорого. 
• Ненадёжно из-за динамичной природы ECP. 
3. СБД: 1 + {Не выполнил ли кто-то проверку 1 на СП?} 
• Нет: работаем с локальными адресами: 127.0.0.1.Port.PID 
• Да: переходим на сетевые адресацию: 192.168.1.1.Port.PID
Нужно ли универсальное макро-API? 
// Cписок процессов во всех областях 
set proc = "" 
for { 
set proc = $$$ZJOB(proc) quit:proc="" 
write proc, ?30 // дескриптор процесса 
write $$$ZU(67,6,proc), ! // область (namespace) 
}
Перспективы развития реализации Util.Proc 
• Опрос серверов приложений идёт медленно, если их 
много. 
=> Параллельные запросы к серверам. 
=> Возможно, пересмотр способа взаимодействия в 
пользу собственного протокола обмена сообщениями.
Спасибо за внимание!

More Related Content

PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PPTX
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PDF
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
PDF
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
PPTX
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
PPTX
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...

What's hot (20)

PPTX
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
PDF
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
PDF
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PDF
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
PPTX
мониторинг производительности Web приложений на python
PDF
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
PDF
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
PDF
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
RootConf 2015
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PDF
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
PDF
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
PDF
Семь тысяч Rps, один go
PDF
Streaming replication in practice
PDF
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
PDF
Дмитрий Новиков - Tarantool в Badoo
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Современная операционная система: что надо знать разработчику / Александр Кри...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
мониторинг производительности Web приложений на python
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
RootConf 2015
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Семь тысяч Rps, один go
Streaming replication in practice
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Дмитрий Новиков - Tarantool в Badoo
Ad

Viewers also liked (7)

PPTX
основные подходы к информатизации здравоохранения на региональном уровне на ...
PDF
Intersystems technology for healthcare
PDF
Примеры использования iknow в медицине - InterSystems Meetup Sankt-Peterburg ...
PPT
АИС "Дом-интернат"
PPTX
Johns Hopkins Medicine & the Healthcare Content Conundrum: Aligning Business ...
PPTX
Leading the Way for Responsive Web Design for Mobile Information & Mapping at...
PDF
Social Media In Healthcare: Coming of Age
основные подходы к информатизации здравоохранения на региональном уровне на ...
Intersystems technology for healthcare
Примеры использования iknow в медицине - InterSystems Meetup Sankt-Peterburg ...
АИС "Дом-интернат"
Johns Hopkins Medicine & the Healthcare Content Conundrum: Aligning Business ...
Leading the Way for Responsive Web Design for Mobile Information & Mapping at...
Social Media In Healthcare: Coming of Age
Ad

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

PDF
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
PPTX
Service Discovery. More that it seems
PDF
Другая виртуализация
PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PPTX
Надежность World of Tanks Server
PPTX
Developing highload servers with Java
PDF
МАИ, Сети ЭВМ, Лекция №2
PPTX
Опыт использования NoSQL-хранилищ (Андрей Новиков)
PPTX
Опыт внедрения OpenStack
PDF
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
PDF
Облако в Badoo год спустя
PDF
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
PDF
Анатомия веб-сервиса, Андрей Смирнов
PDF
Анатомия веб-сервиса (РИТ-2014)
PPTX
Система обработки бизнес-логики server-side приложения на Groovy
PPTX
Создание и развитие отечественной платформы с открытым программным кодом для ...
PPTX
Доклад в Mail.ru 01.11.12
PDF
Производительность MySQL для DevOps
PPTX
Высокоуровневый параллелизм
PDF
AVITO. Решардинг Redis без даунтайма. DevConf 2012
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Service Discovery. More that it seems
Другая виртуализация
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Надежность World of Tanks Server
Developing highload servers with Java
МАИ, Сети ЭВМ, Лекция №2
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт внедрения OpenStack
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса (РИТ-2014)
Система обработки бизнес-логики server-side приложения на Groovy
Создание и развитие отечественной платформы с открытым программным кодом для ...
Доклад в Mail.ru 01.11.12
Производительность MySQL для DevOps
Высокоуровневый параллелизм
AVITO. Решардинг Redis без даунтайма. DevConf 2012

More from InterSystems (20)

PDF
InterSystems Developers Community Update Global Summit 2019
PDF
InterSystems IRIS Data Platfrom: Sharding and Scalability
PDF
DeepSee Web: Angular Render for InterSystems DeepSee Dashboards
PDF
InterSystems Caché REST Forms
PDF
InterSystems Caché Localization Manager
PDF
Source Control Addon for InterSystems Caché with UDL support
PDF
DeepSee SYSMON - InterSystems Caché System Monitoring Analytics
PDF
InterSystems Community and Projects in CIS November 2015
PDF
Caché github continuous intergration
PDF
InterSystems news Meetup Sankt-Peterburg2015
PDF
Web and mobile development for intersystems caché, Eduard Lebedyuk
PDF
InterSystems Healthshare +DeepSee. Hospitalization queue
PDF
Deep see mobile meetup красноярск
PDF
InterSystems High Availability and Mirroring solutions
PDF
Enterprise Serial Bus on InterSystems Ensemble
PDF
Интеграционная шина на базе InterSystems Ensemble
PDF
Перевод базы Caché из 8 бит в Unicode
PDF
Caché Native Access. InterSystems Meetup 2014
PPTX
Управление изменениями и коллективная разработка в Caché. InterSystems Meetup...
PDF
Статический анализатор кода для InterSystems Caché Object Script
InterSystems Developers Community Update Global Summit 2019
InterSystems IRIS Data Platfrom: Sharding and Scalability
DeepSee Web: Angular Render for InterSystems DeepSee Dashboards
InterSystems Caché REST Forms
InterSystems Caché Localization Manager
Source Control Addon for InterSystems Caché with UDL support
DeepSee SYSMON - InterSystems Caché System Monitoring Analytics
InterSystems Community and Projects in CIS November 2015
Caché github continuous intergration
InterSystems news Meetup Sankt-Peterburg2015
Web and mobile development for intersystems caché, Eduard Lebedyuk
InterSystems Healthshare +DeepSee. Hospitalization queue
Deep see mobile meetup красноярск
InterSystems High Availability and Mirroring solutions
Enterprise Serial Bus on InterSystems Ensemble
Интеграционная шина на базе InterSystems Ensemble
Перевод базы Caché из 8 бит в Unicode
Caché Native Access. InterSystems Meetup 2014
Управление изменениями и коллективная разработка в Caché. InterSystems Meetup...
Статический анализатор кода для InterSystems Caché Object Script

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

  • 1. ECP и API управления процессами Алексей Маслов, СП.АРМ
  • 2. Терминология ECP • ECP – протокол распределённого кэширования. • Собственность InterSystems • Серверы приложений: обращаются к данным. • Серверы данных: хранят данные. ^a=4 Код: write ^a set ^b Сервер приложе- ний (клиент ECP) Запрашивает и изменяет данные ^b=8 Сервер данных Хранит данные Сервер данных Хранит данные
  • 3. Горизонтальное масштабирование : плюсы • Распределение значительной вычислительной мощности по десяткам недорогих серверов. • 1 сервер с 128 ядрами или 8 серверов по 16 ядер CPU? • Распределённый кэш базы данных. • 1 сервер с 1 TB RAM или 8 серверов по 128 GB RAM? • Распределённая обработка данных. • Промежуточные данные не покидают серверов приложений (БД CACHETEMP локальны)
  • 4. ECP: достоинства для программиста • При переносе программы в сетевую среду синтаксис операций с данными не меняется. • Иллюзия локальности базы данных. • Синхронные операции ($GET(), $ORDER(), …) не ждут завершения асинхронных операций (SET, KILL), инициированных тем же сервером приложений. • Короткие операции (LOCK, LOCK Release, Block Purge,…) объединяются в один TCP-пакет. • Эффективное использование сети
  • 5. ECP: ограничения • Длинные строки (>~ ½ размера блока) не кэшируются на серверах приложений. • Для 8 KB-блоков: > 3992 B • Синхронные операции (LOCK, $INCREMENT, …) дороги: они всегда передаются на сервер данных. • Команда LOCK ждёт завершения записи данных, начатой предыдущим хозяином блокировки. • Истечение таймаута LOCK не гарантирует, что блокировкой владеет кто-то другой. • Обработка ошибок <NETWORK> • Правильно: откатить транзакцию и начать заново
  • 6. ECP: прикладные проблемы • Номера процессов не уникальны в сети • $JOB • Нет доступа к таблице процессов другого сервера • ^$JOB, $zjob(), … • Нет доступа к свойствам процессов другого сервера • Class %SYS.ProcessQuery • Нет управления процессами другого сервера • Class SYS.Process
  • 7. Util.Proc API: ответ на прикладные проблемы ECP • Дескрипторы процессов, уникальные в сети. • Общесетевая таблица процессов. • Доступ к свойствам процессов другого сервера. • Управление процессами другого сервера.
  • 8. Дескрипторы процессов, уникальные в сети • Уникальность адреса в локальной сети. • Использование с минимальными преобразованиями. • Легко читаемый формат. Дескриптор как децимальный номер: 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"
  • 9. Общесетевая таблица процессов • Глобал в централизованной БД • Индекс – дескриптор процесса • ^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)
  • 10. Доступ к свойствам процессов другого сервера • Доступ к свойствам процесса: • ##class(Util.Proc).GetProcProp("192.168.10.119.1972.9724", "NameSpace") • Доступ к переменным процесса: • ##class(Util.Proc).GetProcVar("192.168.10.119.1972.9724", $name(qARM("User")))
  • 11. Управление процессами другого сервера • Полномочия администратора! • Удалить процесс на другом сервере: • ##class(Util.Proc).KillProc("192.168.10.119.1972.9724") • Обновляет общесетевую таблицу процессов.
  • 12. Пример кода: удаление всех процессов, кроме текущего 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) } }
  • 13. Немного о реализации • Выбор способа взаимодействия с процессами на других серверах:  Сlass %SYSTEM.Event • Официально не работает в сети.  Cобственный TCP-сервер • Необходим дополнительный TCP-порт (кроме 1972). • Дополнительные усилия по настройке.  Web-сервисы  Class %Net.RemoteConnection • Работает через порт супер-сервера (умолчание – 1972). • Не требует дополнительных настроек.
  • 14. Немного о реализации (2) • Что считать сетевой работой? 1. Основная БД области является удалённой • Справедливо только на сервере приложений (СП). • Исключает работу на сервере данных (СБД). 2. СБД: 1 + {Не смонтировал ли кто-то нашу БД как удалённую?} • Дорого. • Ненадёжно из-за динамичной природы ECP. 3. СБД: 1 + {Не выполнил ли кто-то проверку 1 на СП?} • Нет: работаем с локальными адресами: 127.0.0.1.Port.PID • Да: переходим на сетевые адресацию: 192.168.1.1.Port.PID
  • 15. Нужно ли универсальное макро-API? // Cписок процессов во всех областях set proc = "" for { set proc = $$$ZJOB(proc) quit:proc="" write proc, ?30 // дескриптор процесса write $$$ZU(67,6,proc), ! // область (namespace) }
  • 16. Перспективы развития реализации Util.Proc • Опрос серверов приложений идёт медленно, если их много. => Параллельные запросы к серверам. => Возможно, пересмотр способа взаимодействия в пользу собственного протокола обмена сообщениями.