услуги zeromq и доступ к данным

В настоящее время я экспериментирую с zeromq и создаю архитектуру, ориентированную на распределенные службы. Каждому сервису необходимо манипулировать данными из общей базы данных.

Как лучше пройти:

  • использование общей библиотеки для всех служб, определяющих модели. Каждая служба подключается к базе данных
  • с помощью службы данных, которая абстрагирует базу данных. Все остальные сервисы получают доступ к данным через этот. Данные могут передаваться с использованием протокольных буферов.

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

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


person maximebf    schedule 26.03.2011    source источник


Ответы (1)


Поскольку вы собираетесь «делать все правильно», создавая распределенную систему, ориентированную на службы, с загрузкой zeromq, я бы сказал, что вы должны пройти весь путь и поставить службу перед базой данных.

Что касается производительности, вспомните предположение Кнута о том, что преждевременная оптимизация является корнем всех зол. Лучше использовать более чистый вариант, а затем оптимизировать по мере необходимости, если вы заранее не знаете, что у вас возникнут проблемы с производительностью. Кроме того, абстрагирование базы данных должно упростить масштабирование (например, за счет распределения, кэширования и т. д.), если возникнет такая необходимость в будущем.

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

person Elad    schedule 27.03.2011
comment
Спасибо за совет. Как вы сказали, второй вариант позволит легче масштабировать, и я эффективно добавляю кэширование. Поскольку у меня есть время впереди, я думаю, что попробую оба способа и проведу нагрузочное тестирование, посмотрим, что произойдет. - person maximebf; 28.03.2011
comment
Элад, не могли бы вы подробнее рассказать о том, как будет выглядеть служба перед базой данных? Мне интересно, как это будет работать, если вы используете ORM. Спасибо! - person Nate; 11.07.2014