2013-05-15 2 views
0

Нужно ваше предложение для проектирования под системой: Требование состоит в том, что у меня 4 сервера приложений, подключенных к серверу 4 БД. Пользователь может использовать любой сервер приложений для доступа к тому же приложению, размещенному на 4 серверах приложений. Но данные, обновляемые пользователем на одном сервере, должны быть мгновенно доступны для пользователя, получающего доступ к одному и тому же приложению с другого сервера приложений.Дизайн Шаблон Предложение для синхронизации данных

Есть ли какой-либо шаблон дизайна для такого рода синхронизации?

+0

Это называется зеркалированием или репликацией и обычно должно быть просто решено на уровне базы данных. Что вы пробовали для себя? – CodeCaster

+0

есть несколько запросов. 1. Эти серверы приложений за балансировщиком нагрузки? в идеале это должно быть так. 2. четыре сервера БД - это mirros? – Jack

+0

@CodeCaster: Благодарим за ответ. Но меня попросили найти решение на уровне разработки приложений вместо базы данных. Есть ли у вас какие-либо идеи, может ли быть реализован какой-либо существующий шаблон GoF для этой проблемы? – SAM

ответ

0

«Меня попросили найти решение на уровне проектирования приложений вместо базы данных» - в этом случае факт, что есть 4 сервера БД, не имеет значения.

Поскольку эти решения должны быть решены на уровне приложений, эти серверы приложений должны взаимодействовать через некоторые носители. Как уже говорили другие, БД будет разумным выбором, но ваши требования исключают это.

Таким образом, серверы приложений должны иметь возможность общаться между собой и осуществить некоторый протокол разрешения консенсуса (например Paxos достаточно хорошо известно), чтобы убедиться, что все они сходятся на том, что «правда»

Это, как правило, осуществляется на уровне инфраструктуры, а не в самом приложении. Я бы предложил использовать некоторый распределенный кеш (например, memcached или redis cluster, но последний еще не готов), но он зависит от других требований (долговечность и т. Д.). Кроме того, IMO это также подпадает под определение базы данных в этом контексте, то есть это уровень инфраструктуры, а не уровень приложения.

Требование «найти решение на уровне проектирования приложений» кажется довольно синтетическим и не обусловлено функциональными требованиями или связано с несоответствующими нефункциональными требованиями, но я могу ошибаться. Я мог представить, что это обусловлено требованиями к производительности, но это легко ухудшит производительность.

+0

Да. Согласен. это ухудшит производительность, потому что есть 4 сервера БД, и это попытка использовать его, как будто есть только один. – Jack

+0

Хорошо, позвольте мне сказать вам практический сценарий, Скажите любому Банку. Он имеет более 50 филиалов по всему городу. У банка есть сервер приложений и сервер БД, настроенные в ветке. Но требование заключается в том, что, где бы я ни обращался к Клиенту, отображаемая информация должна быть последней, независимо от того, какая ветвь обновлена. Как можно создать такую ​​среду? Какие-либо предложения? – SAM