У меня есть следующая архитектура в моей тестовой лаборатории:Как разработать/собрать кэш SOAP в JAVA
˝n˝ клиентам мыловарения запросы к различным веб-служб (я не могу контролировать на стороне клиента технологии, но запрос всегда SOAP XML через HTTP);
1 шлюз, который обслуживает все входящие запросы SOAP, маршрутизируя их в соответствующие WS.
Проблема:
Мои услуги получают сотни (иногда тысячи) запросов в день. Многие из них - это запросы GET, которые собирают только информацию. Таким образом, многие из этих запросов схожи, с единственными отличиями являются:
- 1 контрольное поле в заголовке Soap Env \ Header, которое идентифицирует каждый запрос (идентификатор запроса).
- 1 поле управления в Soap-Env \ Body, которое идентифицирует временную метку создания запроса.
Решение:
Внедрение механизма кэширования в шлюзе. Когда запрос на WS XPTO будет получен в шлюзе, механизм кэширования будет сравнивать его с кэшированным запросом для этого WS, а если они равны, кэшированный ответ возвращается клиенту, избегая запроса WS-адреса назначения.
Я планирую удалить два атрибута управления запросом из строки запроса XML, прежде чем хранить их в бэкэнде кэша. Я могу сделать то же самое для каждого входящего запроса, прежде чем сравнивать его с кэшированным.
Требования:
- Использование JAVA для реализации;
- Мне нужно поддерживать только один кешированный запрос/ответ для каждого WS;
- Бэкэнд должен быть очень быстрым в времени отклика/записи;
- Сравнение XML-SOAP-запросов должно выполняться с помощью бэкэнд, так как я не могу их последовательно извлекать и делать сравнение в JAVA ради производительности, очевидно.
Вопросы:
Учитывая это подробное описание (извините за его длины), я хотел бы ухо от экспертов Wich технологий будет лучше всего подходит для моих потребностей, специально для внутреннего интерфейса. Я рассмотрел NoSQL и хранилища ключей для хранения в памяти, но я не уверен, что один из них будет отвечать всем моим потребностям.
- Должен ли я хранить XML в правильном поле строки БД, а затем сделать простой запрос WHERE?
- Должен ли я преобразовать XML-запрос в документ JSON, сохранить его в базе данных NoSQL и продолжить запрос и сравнить запросы таким образом?
- Должен ли я выбирать систему базы данных в памяти, сохраняя ее как:
(service_name, [request_XML, response_XML])
?