06.04.2021, 17:36 | #21 |
Участник
|
Цитата:
Сообщение от AlexMoskvichev
В нашем случае (в пике 50К сообщений по 2Кб) затраты на брокера (Apache ActiveMQ 5) вообще не ощущаются на общем фоне.Все время уходит на формирование сообщений и их обработку при приемке.
Причем если отправку еще можно ускорить, например запустив несколько потоков, то приемку нет. Единственные средства улучшения для приемки - пакетные сообщения и замена железа. При этом пакетные сообщения усложняют отправку и не ускоряют ее никак (в одном потоке) Цитата:
я вроде написал "коллекция - список/массив/мап/контейнер/таблица" В мире аксапты элементы коллекций это максимум размер страницы MS SQL = 8Кб Очень-очень редко мемо поля до 4Гб. Но про это я бы обязательно сказал. все-таки для мира аксапты хорошие допущения: = размер элемента до 8кб = размер буфера рабочего окна 64Кб (максимальный размер XML в WCF по умолчанию) = размер коллекции более 100500 элементов Цитата:
вопрос про количество элементов, которое гарантировано не помещается в одно сообщение. Цитата:
Сообщение от AlexMoskvichev
Или вообще,
Write CSV -> 7zip -> SFTP -> 7zip ->Read CSV Или более современно, в parquet Может оказаться вполне быстро и автоматизировать не сложно. Через WCF можно управляющие команды подать, с метаданными файла Последний раз редактировалось mazzy; 06.04.2021 в 18:13. |
|
06.04.2021, 17:44 | #22 |
Участник
|
Цитата:
Сообщение от Vadik
Нет, не считаю, действия действительно разные. Я считаю что это не царское (издателя) дело пихать (передавать) данные во всех подписчиков число которых в общем случае может превышать единицу. Иногда может быть оправдано, но в общем предпочел бы чтобы этим сам подписчик или брокер занимался.
Нет, я не имел в виду транспортный уровень. Да, надо было использовать глагол "отправить" вопрос звучал бы "как правильно отправить". Я имел в виду, что Аксапта (как endpoint) инициирует процесс подготовки и отправки данных в другую Аксапту (другой endpoint). В WCF это означает Аксапта должна заполнить коллекцию с элементами и вызвать какой-нибудь осмысленный метод для этой коллекции. для какого-нибудь другого брокера это будет нечто похожее. Аксапта готовит данные в специальном формате и вызывает что-нибудь осмысленное для этих данных. И WCF, и другие брокеры, насколько я знаю, все имеют ограничение на размер сообщения. Размер сообщения меньше, чем размер всех элементов. вопрос - как правильно готовить, чтобы отправить (передать) свои данные другому endpoint. современный правильный ответ - использовать потоки. но в Аксапте нет потоков. какой способ отправить много элементов коллекции является правильным для Аксапты? |
|
06.04.2021, 17:56 | #23 |
Модератор
|
Не только. Более того, продажами софта я не занимаюсь. Я за всеобщую цифровую грамотность.
упомянутые мною решения, как платные так и open source, делают одно - он реплицируют данные из системы А в систему В. В режиме, близком в режиму реального времени, хотя временной лаг все равно есть. Да, и это требует включения режима расширенного логирования, так как они читают логи, что BDA не всегда по нраву. И, некоторые, установки агента, что уже не по нраву и безопасникам.
Какое именно решение считать "правильным" зависит от задачи и от критичности скорости изменений. Да, еще есть критерий гарантированной доставки сообщений и двухсторонней репликации / разруливания конфликтов репликации, но это за рамками обсуждения, иначе еще про шины данных придется рассказывать, такие как IBM WebSphere. С Уважением, Георгий |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
06.04.2021, 18:12 | #24 |
Участник
|
Цитата:
- пойдем простым логическим путём - пойдем вместе! https://www.youtube.com/watch?v=wK1fq2QZbRk Цитата:
во-вторых, я не зря упомянул ax2009 и ax2012 в ax2012 (в той самой, где перехерачили главную книгу) перехерачили очень много других таблиц. в результате ОЧЕНЬ много таблиц в ax2012 не совпадают с ax2009 взять тривиальную таблицу единиц измерения. в единицах измерения разное все - количество таблиц, количество полей, ограничения на поля. даже одинаковые по смыслу enum'ы разные! Да, я понял что ты хотел сказать про синхронизацию баз данных. я не считаю этот способ правильным ни для Аксапт, ни для других разнородных клиентов. Цитата:
Сообщение от George Nordic
Какое именно решение считать "правильным" зависит от задачи и от критичности скорости изменений. Да, еще есть критерий гарантированной доставки сообщений и двухсторонней репликации / разруливания конфликтов репликации, но это за рамками обсуждения, иначе еще про шины данных придется рассказывать, такие как IBM WebSphere.
да, я тоже за грамотность. но если зависит, то скажи как и на что. про гарантированность - отдельный вопрос. реализаутся за счет отправки специальных подтверждений в той же самой передаваемой коллекции я думаю, что для аксапты не актуально горячее копирование. я думаю, что для аксапты актуальны эти варианты: Цитата:
Сообщение от George Nordic
инкремент за dDOS'ит системы нафиг. Для аксапты характерны таблицы, в которых поля обновляются часто. Какая-нибудь последняя себестоимость в карточках номенклатуры, например. Последний раз редактировалось mazzy; 06.04.2021 в 18:19. |
|
06.04.2021, 18:42 | #25 |
Модератор
|
Цитата:
Цитата:
Цитата:
С Уважением, Георгий |
|
06.04.2021, 18:49 | #26 |
Участник
|
Цитата:
Сообщение от George Nordic
а насколько нужно ее часто реплицировать? Это и брокера убьет нафик. Плюс возможны будут варианты, когда изменение со старой себестоимостью придет позже сообщения с новой себестоимостью - не факт что брокер будет успевать доставить все по очереди(!). Значит, еще и версионность вводить и проверять. Оно точно надо?
а какие есть варианты решений? как технарь со знанием, можешь выделить важные параметры и граничные значения и как они влияют? повторю, вопрос, в котором я постарался зафиксировать действительно важные на мой взгляд параметры: ax2012,ax2009: как правильно передать 100500 элементов коллекции через WCF? готов послушать для вариантов, где используется не WCF. но все остальные слова остаются в вопросе. готов принять вводные характерные для аксапты. например, это точно не "горячее копирование". например, нормальная скорость 1 изменение в секунду. например, размер элемента в коллекции до 8кб, а число элементов измеряется скорее сотнями тысяч, но никак не сотнями миллионов. и другие характерные для аксапты вводные. Последний раз редактировалось mazzy; 06.04.2021 в 18:55. |
|
06.04.2021, 18:53 | #27 |
Модератор
|
|
|
06.04.2021, 18:56 | #28 |
Участник
|
Цитата:
если кому-то хочется другую границу - вводите в свое обсуждение и вперед. хотя, конечно, 1000 проводок в секунду для аксапты легко. ну, пусть будет 1 (одна). не принципиально для данного обсуждения, на мой взгляд. |
|
07.04.2021, 10:22 | #29 |
Модератор
|
Давай немного переформулирую. В основном затык происходит не на стороне брокера или CDC, а на стадии обработки принятого сообщения.
Давай уточню сначала по CDC: из БД 2009 в БД 2012 скорость репликации будет очень высокой, если RecID будет выделяться самой БД. Но если Rec будет выделять AOS, то он станет бутылочным горлышком, а если еще и номерные серии надо заполнять... То же самое и с брокерами. В принципе, за счет распараллеливания и оптимизации размера пакетов - то хоть 1К в секунду, хоть миллион. Но с какой скоростью будет его разбирать пакетный сервер если мы говорим по DAX? И параллельно запускать обработку вряд ли получится, так как есть вероятность что сообщение с новой себестоимостью в данном случае будет обработано до сообщения со старой себестоимостью. Абстрагируясь от DAX, то если мы говорим про надежную доставку, то это - запись на диск. Таким образом надо смотреть на пропускную способность сети и скорость записи на диск. Например, для AWS это 40 000 IOPS составляет при пакете в 16 КБ и 20 000 IOPS при 32 КБ Таким образом, я не вижу проблемы в передаче 100500 сообщений. Я вижу проблему в их парсинге, если будет задействованы механизмы DAX - тот же АОS, которые будут заполнять служебные поля. Если доверить эту задачу БД, а служебные поля заполнять автоматом по некому шаблону механизмами БД, то данная проблема снимается. Но вряд ли этим снимается проблема последовательной обработки сообщений. С Уважением, Георгий |
|
07.04.2021, 10:34 | #30 |
Модератор
|
Bingo!
__________________
-ТСЯ или -ТЬСЯ ? |
|
07.04.2021, 10:42 | #31 |
Участник
|
Цитата:
т.е. ты тоже как и Vadik передать/отправить сводишь к "запросить" и к принимающей стороне. все понимаю про принимающую сторону. поэтому в вопросе сформулировано о передать/отправить. принимающая сторона в части парсинга и валидации входящих данных - отдельный вопрос. но хотелось бы все-таки получить ответ на свой вопрос - как правильно передавать/отправлять много элементов коллекции в Аксапте, где нет встроенных стримов. Цитата:
По-моему, не принципиально для заданного вопроса. |
|
07.04.2021, 10:58 | #32 |
Модератор
|
Цитата:
Извини, но твой вопрос Цитата:
С Уважением, Георгий |
|
07.04.2021, 11:18 | #33 |
Участник
|
можно я еще раз повторю свое первое предложение в первом сообщении этой ветки?
Цитата:
Цитата:
=============================== итак, всё ещё надеюсь услышать мнения по вопросу: ax2012,ax2009: как правильно передать 100500 элементов коллекции через WCF? дополнительные вводные, которые были уточнены по ходу ветки и в личной переписке: * "передать" в смысле "отправить" * в аксапте есть recId и нумераторы * в аксапте нет встроенной поддержки потоков (stream). * аксапта 2009 работает на .net 3.5 * аксапта 2012 работает на .net 4.0 (не 4.5) * размер элемента коллекции в Аксапте до 8Кб * размер коллекции до 100500 элементов, но вряд ли больше 2^32 * вместо WCF можно обсуждать любой другой брокер/транспорт * предполагаем, что middlware отсутствует. но мы можем сделать любой * для простоты предполагаем, что все компоненты под нашим контролем и вопросы безопасности решены что беспокоит в первую очередь - накладные расходы на передачу каждого сообщения. лично я не вижу, как брокер/транспорт может принципиально повлиять на принимающую сторону. парсинг и валидация на принимающей стороне будут плюс-минус одинаковыми. поэтому сознательно вывел за рамки данного обсуждения вопросы парсинга и валидации на принимающей стороне. и вообще, вывел за рамки обсуждения принимающую сторону. но если вы знаете способ передачи, который существенно повлияет на принимающую сторону, то можно обсудить и её. вводите свои вводные в свое сообщение и вперед. с удовольствием послушаю. Добавлено: огромное спасибо всем участникам обсуждения, что заставили задуматься и сформлировать ограничения и вводные. В результате получается вопрос, который становится похож на правильно сформулированный. Последний раз редактировалось mazzy; 07.04.2021 в 11:36. |
|
|
За это сообщение автора поблагодарили: sukhanchik (4). |
21.04.2021, 02:01 | #34 |
MCTS
|
Я так полагаю, вопрос "ax2012,ax2009: как правильно передать 1 элемент через WCF?" уже успешно решен?
__________________
Dynamics AX Experience |
|
21.04.2021, 14:28 | #35 |
Участник
|
Цитата:
Цитата:
Сообщение от mazzy
дополнительные вводные, которые были уточнены по ходу ветки и в личной переписке:
* "передать" в смысле "отправить" * в аксапте есть recId и нумераторы * в аксапте нет встроенной поддержки потоков (stream). * аксапта 2009 работает на .net 3.5 * аксапта 2012 работает на .net 4.0 (не 4.5) * размер элемента коллекции в Аксапте до 8Кб * размер коллекции до 100500 элементов, но вряд ли больше 2^32 На тему проектирования интеграций есть хорошая статья у Дениса Трунина, где он предлагает для начала определиться с такими моментами:
Цитата:
Сообщение от mazzy
* вместо WCF можно обсуждать любой другой брокер/транспорт
* предполагаем, что middlware отсутствует. но мы можем сделать любой * для простоты предполагаем, что все компоненты под нашим контролем и вопросы безопасности решены что беспокоит в первую очередь - накладные расходы на передачу каждого сообщения. Цитата:
В обсуждении много говорилось про очереди, шины данных и т.п. По-моему, если нужно перебрасывать между двумя системами такие объемы данных, стоит посмотреть в сторону какого-нить RabbitMQ хотя бы. Разбивать ли коллекцию из 100500 элементов на блоки при передаче? Решать, конечно, на местах, но я бы тут вспомнил про то, что в ядре, начиная с AX2009, есть ограничение на размер буфера под значимые типы (тот же string), которое по умолчанию, кажется, равно 1Мб - см. Падает клиент при прикреплении файла. Так что если утоптать 100500 элементов в один большой XML/JSON, то на принимающей стороне с ним может быть непросто работать. Я бы в связи с этим постарался разбивать передаваемые данные на блоки меньше 1Мб каждый. Цитата:
Цитата:
Для построения метровой башни требуется твердая рука, ровная поверхность и 10 пивных банок, для башни же в 100 раз более высокой недостаточно иметь в 100 раз больше пивных банок. Такой проект требует совершенно иного планирования и конструирования.
|
|
21.04.2021, 14:58 | #36 |
Участник
|
конечно же беспокоит.
поэтому и была создана тема. что ж, критика навиного подхода к передаче данных между разными системами - зачетная. именно поэтому и создана тема "как правильно" каковы твои предложения? для начала какую именно технологию ты называешь асинхронным обменом? Последний раз редактировалось mazzy; 21.04.2021 в 15:27. |
|
21.04.2021, 15:03 | #37 |
Участник
|
Цитата:
Цитата:
а кто-то говорил "одним куском"?! Последний раз редактировалось mazzy; 21.04.2021 в 15:11. |
|
21.04.2021, 15:07 | #38 |
Участник
|
Цитата:
|
|
21.04.2021, 15:49 | #39 |
Боец
|
|
|
21.04.2021, 16:02 | #40 |
Участник
|
пока разбиваем на чанки с фиксированным числом элементов.
и написан код для обслуживания этих чанков. сделано с полным пониманием, что это и не оптимально, и не гарантирует от переполнения буферов, и "закат солнца вручную". единственный плюс - быстрее, чем передавать по одному элементу. но "остановились" - это неправильное слово. скорее, приняли в качестве первой версии. Последний раз редактировалось mazzy; 21.04.2021 в 16:06. |
|
|
|