Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Мирчук Дмитрий - Практическое применение shared memory

Мирчук Дмитрий - Практическое применение shared memory

Ilya Kaznacheev

October 19, 2019
Tweet

More Decks by Ilya Kaznacheev

Other Decks in Programming

Transcript

  1. Тезисы доклада Докладчик: Дмитрий Мирчук Руководитель группы разработки [email protected] •Что

    такое Shared memory •Как можно ее использовать •Какие у нее есть особенности •И как мы успешно ее применили в собственной разработке
  2. Что такое shared memory? Общая для апликейшн сервера область с

    разными буферами Работаем с конкретным paging buffer: • Кластеры данных - data cluster • Объекты общей памяти - shared memory object (начиная с версии 6.40)
  3. Что такое shared memory (2 часть) Data clusters Shared memory

    objects • Работают на старых версиях • Не поддерживают ссылки • Нет механизма блокировок • Отсутствуют удобные средства мониторинга и использования • Присутствуют только с 6.40 + • Сложнее в реализации
  4. Use cases User A Work process 1 Work process 2

    User B Work process 3 •Передача данных между разными программами •Обмен данными между разными пользователями без использования БД •Использование в качестве буфера для уменьшение нагрузки на БД и увеличения скорости чтения данных •Любые комбинации вышеуказанных вариантов DB Buffer (shared memory)
  5. Вход в приложение (Login) Подготовительны е операции ~10 секунд Дальнейшая

    работа с приложением … Функция 1 Функция 2 Функция 3 Функция 4 Функция N Начальный экран обязательны для Подготовительные операции: • Обязательны для большинства дальнейших операций • Время выполнения всех операций может доходить до 10-ти секунд • В будущем прогнозировалось увеличение времени выполнения Подробнее про приложение
  6. Дополнительные особенности: • Результат одинаков для любого пользователя • Результат

    не меняется в течение одного дня Вход в приложение (Login) Подготовительны е операции ~10 секунд Дальнейшая работа с приложением … Функция 1 Функция 2 Функция 3 Функция 4 Функция N Начальный экран User not depend Еще немного деталей
  7. Что получилось в итоге В итоге: • Операции запускаются новчью

    в фоновом задании • Результат сохраняется в атрибутах объекта shared memory • В процессе развития проекта вынесли туда еще больше алгоритмов Вход в приложение (Login) Shared memory object Дальнейшая работа с приложением … Функция 1 Функция 2 Функция 3 Функция 4 Функция N Начальный экран Подготовительн ые операции 30+ секунд
  8. Особенности Shared Memory. С чем столкнулись при разработке • (-)

    Ограничение по памяти • (-) Shared memory на каждой инстанции аппликейшн сервера – своя • (-) Скорость чтения атрибутов класса shared memory медленнее примерно 15-20 %, чем скорость чтения внутренних атрибутов классов (хэштаблиц) • (+) Возможность иметь несколько разных инстанций • (~) Устаревание версий • (~) Блокировки не кумулятивные • (~) Решение оказалось достаточно удачным, что некоторые алгоритмы сильно не оптимизировали • (~) Пришлось сделать свой монитор
  9. Другие особенности Shared Memory •(+) Есть своя система блокировок •(+)

    Версионность •(+) Есть возможность вносить изменения по commit work
  10. Выводы •Shared memory можно использовать для обмена данными между процессами,

    пользователями или в качестве хранения сложнодобываемых данных •C shared memory лучше работать с помощью объектов •Если правильно приготовить, Shared memory реально помогает •Готовьте Shared memory правильно!
  11. Краткая инструкция приготовления • Создаем область (shared memory area) –

    это класс, имя которого и будет именем области. Класс должен наследоваться от CL_SHM_AREA. • Создаем класс конструктор области – он должен содержать интерфейс IF_SHM_BUILD_INSTANCE и иметь реализацию метода построения IF_SHM_BUILD_INSTANCE~BUILD. • Создаем класс объекта shared memory – в его настройках ставим флажок «Использовать общую память». Атрибуты именно этого класса будут использоваться для хранения данных. Чаще всего этот класс совмещают с классом конструктора из предыдущего пункта. • Теперь можно получить shared memory c помощью методов класса области attach_for_read/attach_for_write/attach_for_update
  12. Ссылки, полезная литература и транзакции Ссылки: • http://www.kodyaz.com/sap-abap/abap-shared-memory-objects-tutorial.aspx • https://blogs.sap.com/2015/02/19/how-to-use-shared-object-memory-and-sap-memory-to-shar

    e-the-objects-for-processing-in-sap-with-an-example/ Литература: • Abap cookbook, chapter 15.3 “Working with Shared Memory Objects” Полезные транзакции: • shma – управление отдельной областью • shmm – монитор областей • se24 – построитель классов