AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Администрирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.08.2023, 01:39   #1  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 23.10.2012
? Как чистите глобальный кэш АОСов?
Привет.
Есть глобальный кэш сервера. Серверов N.
Он содержит некий закэшированный объект, крайне чувствительный к актуальности данных.
Данные имеют свойство обновляться M раз в неделю.
У каждого АОСа индивидуальный кэш (речь о 2009 версии Аксапты).
Какие способы актуализации кэша могут иметь место? При условии, что её выполнить сразу же после устаревания данных.

На уме 2 способа реализации:
1. мониторить специфическую таблицу (смысл от кэша немного теряется);
2. сделать все АОСы серверами пакетных заданий и для каждого создавать "событие" к обработке (здесь лаг по времени в пределах минуты с момента устаревания данных, оптимистический вариант).
Старый 25.08.2023, 08:49   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Речь о кеше с данными или о кеше исполнимого кода ?
Старый 25.08.2023, 11:22   #3  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 23.10.2012
Объект - код, экземпляр класса.

Последний раз редактировалось Товарищ ♂uatr; 25.08.2023 в 11:25.
Старый 25.08.2023, 12:02   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Если речь про данные, то п.1 делает ядро, правда, глючно. Периодически этот механизм синхронизации кешей аосов ломается и его чинят (аосы периодически пишут данные в SysLastValue - сообщения друг другу о необходимости сброса кеша). Можно другое ядро- неглючное подобрать.
Если класс аксапты кеширует данные, например как с курсами валют то мне больше всего нравится вот это вариант
О сломанных шестеренках в большом моторе

Если речь об исполнимом коде, то есть способ (первый раз увидел его в сообщении Maximin). После того как проект по живой накатили, запускаем специальную процедуру, она перебирает все аосы, подключается к каждому аосу (запускает клиента аксапты с параметром - имя проекта) и на каждом аосе перебирает узлы проекта и каждый узел компилирует и делает refresh + restore дважды (именно дважды). Это прочищает кеш исполнимого кода аоса.
Старый 25.08.2023, 17:43   #5  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Logger Посмотреть сообщение
Речь о кеше с данными или о кеше исполнимого кода ?
Как понимаю, речь про программные наборы кэша каких-то данных сделанные либо добрым старым стандартным SysGlobalCache, либо какими-то своими способами.

Тут даже кэш - это только частный случай. Основная задача - как-то сделать так, чтобы клиентские сессии знали что что-то такое серьезное изменилось.
Вроде универсальных способов для такого не существует.

Тут вся надежда на пользователей, которые знают, что когда им сказали "сбросьте кэш", воспользовались предложенным разработчиками механизмом.
На скринах с использованием TabAx и без него.[ATTACH]Нажмите на изображение для увеличения
Название: Сбросить кэш 2012.jpg
Просмотров: 34
Размер:	105.3 Кб
ID:	13603[/ATTACH]
Миниатюры
Нажмите на изображение для увеличения
Название: Сбросить кэш 4.jpg
Просмотров: 63
Размер:	45.2 Кб
ID:	13602  
Старый 25.08.2023, 18:22   #6  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Logger Посмотреть сообщение
После того как проект по живой накатили, запускаем специальную процедуру, она перебирает все аосы, подключается к каждому аосу (запускает клиента аксапты с параметром - имя проекта) и на каждом аосе перебирает узлы проекта и каждый узел компилирует и делает refresh + restore дважды (именно дважды). Это прочищает кеш исполнимого кода аоса.
Вроде для уж совсем гарантии, нужно в проекте не только "каждый узел компилирует", но и "инкрементно компилирует". Правда, если в проекте есть что-то подобное RunBase или в компании, в которой Вы работаете классы TSD, то этот сброс растянется на часы.

Ну и "запускает клиента аксапты" я уже видел - при нескольких АОСах это мультипликация на экране пользователя, который это запустил. Уж лучше, если Акса до 2009 включительно, то "втихую" powershell с использованием NET-Connectir.
За это сообщение автора поблагодарили: Logger (3).
Старый 25.08.2023, 18:34   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Опять же все эти способы помогают при "горячем изменении кода".

Как-то задачу "Уведомить клиентский процесс от том что что-то изменилось" они не решают.

Помню что был какой-то проект, который позволял из формы активных пользователей рассылать уведомления или прекращать работу, но это входит в то ,что указал автор топика "мониторить специфическую таблицу" и его же замечание. А в практике, это приводило к таким блокировкам, что ну его такой подход.
Старый 25.08.2023, 21:51   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Уж лучше, если Акса до 2009 включительно, то "втихую" powershell с использованием NET-Connectir.
Интересный способ. Но мы так не пробовали.
У вас работает ?

А с 2012-й не прокатывает ?
Мы в 12-ке тоже такой подходи применяем, но модифицировали. Вместо компиляции с восстановлением, делаем импорт xpo на каждом аосе. Нужного эффекта достигаем.
За исключением вот этой проблемы
Ax 2012 R2. Поле "не извлечено"
Но мы все неинтерактивные аосы (пакеты, web-сервисы) запускаем с опцией -INTERNAL=NOCURSORREUSE

Последний раз редактировалось Logger; 25.08.2023 в 22:02.
Старый 28.08.2023, 11:50   #9  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 23.10.2012
Привет.
Хотел выбрать простое и стабильное решение. Сложилось впечатление, что Pipe сюда идеально подходит.
Плюсом является нативная возможность его работы в асинхронном режиме.
Есть встроенный EventDrillDownPoller, обертка над PipeServer, который можно было слегка переработать для достижения целевого результата.
Вопрос остается только в отправке трафика (если бы) - для этих целей, по идее, подходит PipeClient.
Соответственно создаём pipeServer, pipeClient - отправляем трафик серверу и...ничего.
Читаем документацию по клиенту и поражаемся тем, насколько MS удалось придерживаться концепций "чистого кода":
https://learn.microsoft.com/en-us/do...-finops-dotnet)
Когда код настолько описывает себя, что даже и документация не нужна.
Самое полезное, что было в документации - имя сборки содержащей данный объект "Microsoft.Dynamics.AX.Xpp.Support.dll" (это помогло совершенно в ином вопросе).
Ну и не нашел ничего похожего в данной библиотеке, поэтому сделал необоснованный вывод, что PipeClient и PipeServer ничто иное как обертка над System.IO.Pipes.NamedPipeClientStream и System.IO.Pipes.NamedPipeServerStream соответственно.
Открываем тоже самое по серверу и видим чуть больше информации:
https://learn.microsoft.com/en-us/do...-finops-dotnet
Ну и получается, что MS ограничили возможность коммуникации на инкапсулированном от программиста уровне инициализации объекта.
Никто не запрещает подключить сборку System.Code.dll и отказаться от использования PipeServer и Client Аксапты в пользу аналогов из .Net и они работают - но речь уже не идёт о простом решении, чистов воды кастомизация.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ax2009 глобальный кэш (не по сессиям!) Pandasama DAX: Программирование 4 27.07.2016 11:58
Что сделать, чтобы сбросить кэш кода класса, который выполняется при вызове сервиса mazzy DAX: Программирование 19 29.06.2015 16:04
Кэш данных с двумя АОСами Paul_ST DAX: Администрирование 4 15.08.2007 11:39
Сколько АОСов "смотрят" на одно приложение? Ace of Database DAX: Администрирование 6 09.06.2005 16:45
Ax 3.0 Некорректное завершение - ошибка. Не лечится. Локальный кэш? dirigente DAX: Администрирование 4 20.11.2003 13:11
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:28.