Я получаю ошибку сброса соединения при попытке выполнить два запроса одновременно в arangodb?

#node.js #arangodb #connection-reset #arangojs

#node.js #arangodb #соединение-сброс #arangojs

Вопрос:

Я использую arangojs v6.14.1 и arangodb version 3.6.4. . У меня также есть приложение nodejs express, которое предназначено для обслуживания клиентских запросов.

Я испытываю проблему при выполнении одновременных запросов. Зависание соединения с базой данных при одновременной обработке клиентских запросов:

Что приложение будет делать, когда получит запрос?

Откройте соединение с базой данных —

 db = new Database(dbConfig.url); 
db.useDatabase(dbConfig.name); 
db.useBasicAuth(dbConfig.username, dbConfig.password);
  

Существует несколько функций промежуточного программного обеспечения, к которым требуется доступ для выполнения различных функций и проверок доступности. И для каждого промежуточного программного обеспечения я пытался

  • откройте новое подключение к базе данных ->
  • выполните действие ->
  • закройте соединение ->
  • верните результат следующему промежуточному программному обеспечению.

Это отлично работает с одним запросом за раз. Но если я попытался вызвать два API одновременно, я получаю ошибку CONNECTIONRESET. А также выдает ошибку зависания сокета.

Я попытался использовать метод close connection, и некоторое время он работал нормально. Но когда я увеличил количество подключений, он снова показывает ту же ошибку, что и «CONNECTIONRESET».

Я просмотрел документацию arangojs о манипулировании соединением. Но я не нашел никакой информации об этом.

Любая помощь будет высоко оценена.

Ответ №1:

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

Просматривая выходные данные netstat -aplnt , я видел много CLOSE_WAIT TIME_WAIT сообщений и, указывающих на то, что было МНОГО соединений, которые не были закрыты должным образом.

Решение состояло в том, чтобы включить постоянные соединения (см. arangojs config для keep-alive и maxSockets), А затем повторно использовать одно соединение, когда это возможно. Это было больше, чем просто изменение настроек, требующее также некоторых модификаций кода.