Как лучше всего изолировать мое приложение от ненадежной базы данных? - PullRequest
4 голосов
/ 15 ноября 2008

У меня есть служба данных Java SOAP, которая находится поверх базы данных Sybase, которая по независящим от меня причинам имеет ненадежную производительность. База данных является частью пакета поставщика, который был изменен внутренней командой, и большинство проблем вызвано медленным временем ответа в определенное время дня.

Служба SOAP предоставляет данные в расчетную сетку, и когда я запрашиваю данные, мне нужно, чтобы время ответа было быстрым и согласованным . Сервис предоставляет базовую функциональность CRUD, но соотношение операций чтения и записи составляет примерно 100: 1.

Какова лучшая стратегия, чтобы изолировать себя от ненадежной работы базы данных и обеспечить быстрый и надежный сервис SOAP?

Ответы [ 6 ]

3 голосов
/ 15 ноября 2008

Я видел эту проблему несколько раз, обычно с базой данных поставщиков.

Если это в Windows, вы можете создать службу Windows в качестве посредника между службой SOAP и базой данных. Затем поместите очередь сообщений (либо MSMQ, либо реализацию JMS, такую ​​как MQ Series) между службой SOAP и службой Windows для асинхронной связи. Таким образом, проблемы с производительностью базы данных больше не будут влиять на службу SOAP. Это решение, однако, достигается за счет повышенной сложности.

Обратите внимание, что веб-служба .NET может вызываться и асинхронно отвечать своим клиентам. Я не уверен, если это возможно с сервисом Java SOAP.

Если это какой-то вариант Unix, я предполагаю, что он имеет аналогичную функциональность для службы Windows - возможно, демон.

1 голос
/ 16 ноября 2008

Ответ RoadWarrior правильный. Запросы на выполнение любой операции помещаются в очередь. Пользователь приходит один раз, чтобы сделать запрос, и один раз, чтобы получить запрос. Это на самом деле то, что происходит на сайтах, таких как Expedia, где он говорит с ненадежным сервисом (бэкэнд). Браузер пользователя проверяет связь с сервером, пока красный индикатор не станет зеленым.

1 голос
/ 16 ноября 2008

Почему бы не использовать поток? Таким образом, приложение может аккуратно подождать, даже если база данных работает медленно.

0 голосов
/ 16 ноября 2008

Заставьте другую внутреннюю команду настроить эту базу данных, чтобы каждый, кто пользуется приложением, получал выгоду. Я люблю меня некоторые индексы!

0 голосов
/ 15 ноября 2008

Вы можете кэшировать результаты из БД, если БД не слишком большая.

0 голосов
/ 15 ноября 2008

Как насчет кэширования ответов от веб-службы (либо на клиенте, вызывающем запрос WS, либо путем промежуточной настройки веб-службы прокси)?

...