Пул подключений для AWS Dynamo Db на сервисах - PullRequest
0 голосов
/ 25 августа 2018

Этот вопрос больше о передовых практиках при разработке веб-сервиса. Это может быть немного расплывчатым

Допустим, мой сервис использует контейнер Spring, который создает стандартный объект контроллера для всех запросов. Теперь в моем контроллере я внедряю экземпляр средства отображения Dynamo Db, созданный один раз в контейнере Spring. https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptionalConfig.html

Вопрос: -

Не следует ли нам создать пул клиентских объектов и картографов DynamoDb, чтобы параллельные запросы к сервису поступали из пула? Или мы должны внедрить один и тот же / новый экземпляр объекта сопоставления DynamoDb для всех запросов? Почему мы не используем что-то вроде C3PO для соединений Dynamo Db?

1 Ответ

0 голосов
/ 27 августа 2018

Существует довольно существенная разница между работой реляционной базы данных и работой DynamoDB.

В типичном механизме реляционных баз данных, таком как MySQL, PostgreSQL или MSSQL, ожидается, что каждый экземпляр клиентского приложения будет устанавливать небольшое количество подключений к механизму и держать соединения открытыми во время использования приложения. Затем, когда части приложения должны взаимодействовать с базой данных, они заимствуют соединение из пула, используют его для выполнения запроса и освобождают соединение обратно в пул. Это позволяет эффективно использовать соединения и устраняет накладные расходы на настройку и разрыв соединений, а также уменьшает побои, возникающие в результате создания и освобождения ресурсов объекта соединения.

Теперь переключаемся на DynamoDB: все выглядит немного иначе . У вас больше нет постоянных подключений от клиента к серверу базы данных. Когда вы выполняете операцию «Динамо» (запрос, сканирование и т. Д.), Это HTTP-запрос / ответ, который означает, что соединение устанавливается нерегулярно и длится только продолжительность запросов. DynamoDB - это веб-сервис, который заботится о балансировке нагрузки и маршрутизации, чтобы обеспечить стабильную производительность независимо от масштаба. В этом случае, как правило, для приложений лучше использовать один клиентский объект DynamoDB на экземпляр и позволить клиенту и связанной с ним инфраструктуре на стороне обслуживания позаботиться о балансировке нагрузки и маршрутизации.

Теперь клиент DynamoDB для вашего стека (т. Е. Java-клиент, .NET-клиент, JavaScript / NodeJS-клиент и т. Д.) Обычно использует базовый HTTP-клиент, объединенный в пул, в основном для минимизации затрат, связанных с созданием и сносить эти предметы. И вы можете настроить некоторые из этих параметров, а в некоторых случаях предоставить собственную реализацию пула HTTP-клиентов, но обычно это не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...