Мы работаем над внутренней корпоративной системой, которая имеет веб-интерфейс как один из его интерфейсов.
Интерфейс (Java + Tomcat + Apache) обменивается информацией с внутренним сервером (проприетарной системой, написанной на языке COBOL) через веб-службы SOAP.
В результате мы передаем большие XML файлы взад и вперед.
Мы полагаем, что эта архитектура оказывает значительное влияние на производительность из-за больших накладных расходов на транспортировку и анализ XML. К сожалению, мы придерживаемся этой архитектуры.
Как мы можем сделать эту настройку XML более эффективной?
Приветствуются любые советы или приемы.
Сделайте правильное профилирование вашей системы под нагрузкой - информации на самом деле недостаточно.
Вам нужно выяснить, где идет время и что такое бутылочки (пропускная способность сети, процессор, память и т.д.). Только тогда вы поймете, что с этим делать - многие оптимизации - это просто компромиссы (например, кэширование приносит в жертву память для улучшения производительности в другом месте).
Единственное, что я могу думать о работе, это убедиться, что вы используете HTTP-сжатие с помощью веб-сервисов. XML обычно можно уплотнять до доли его нормального размера, но опять же это поможет, если у вас есть Циклы ЦП для резервного копирования.
Вы можете сжать передачу, если оба конца могут ее поддерживать, и вы можете попробовать разные синтаксические анализаторы, но поскольку вы говорите, что SOAP не так много вариантов. SOAP все равно раздувается.
Я собираюсь выйти на конечность здесь и предложить GZIP Compression, если вы считаете, что это связано с проблемами пропускной способности. (вы упомянули XML-транспорт). Да, это увеличит время вашего процессора, но это может ускорить работу на транспорте.
Здесь первый хит Google по сжатию GZIP в качестве отправной точки. Он описывает, как он работает на Apache.
Сначала убедитесь, что ваши синтаксические методы эффективны для больших документов. StAX - хороший инструмент для анализа больших документов.
Кроме того, вы можете взглянуть на бинарный XML. Они обеспечивают более эффективный транспорт, но также помогают в анализе.
Проверьте, читает ли ваше приложение во всех XML-документах как дерево DOM. Они могут быть ОЧЕНЬ большими, и часто вы можете сделать это с помощью простой проверки событий SAX или программы XSLT на основе SAX (которую можно скомпилировать для быстрой обработки).
Это очень заметно в профилировщике, таком как visualvm в Sun Java 6 JDK
Попробуйте StAX. Он выполняет хорошо и имеет красивый, сжатый синтаксис.