2015-06-13 7 views
0

Требуется 20 секунд, чтобы получить ответ на простой запрос выбора с помощью драйвера nodejs. Но с cqlsh это занимает менее одной секунды.Почему datastax/nodejs-driver работает медленно?

Enabled протоколирование на связи, и он показывает много событий соединения, как показано ниже

SELECT * FROM developer WHERE username=? 

2015-06-13T05:48:39.635Z log event: info -- "ControlConnection" 
2015-06-13T05:48:39.635Z log event: info -- "ControlConnection" 
2015-06-13T05:48:39.637Z log event: info -- "Connection" 
2015-06-13T05:48:44.641Z log event: warning -- "Connection" 
2015-06-13T05:48:44.641Z log event: info -- "Connection" 
2015-06-13T05:48:49.646Z log event: warning -- "Connection" 
2015-06-13T05:48:49.647Z log event: info -- "Connection" 
2015-06-13T05:48:49.647Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.648Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.648Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.651Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.651Z log event: info -- "Connection" 
2015-06-13T05:48:49.652Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.652Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.652Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.653Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.654Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.654Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.654Z log event: info -- "ControlConnection" 
2015-06-13T05:48:49.654Z log event: info -- "ControlConnection" 
2015-06-13T05:48:49.654Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.655Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.662Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.662Z log event: info -- "ControlConnection" 
2015-06-13T05:48:49.662Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.663Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.663Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.684Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.684Z log event: info -- "ControlConnection" 
2015-06-13T05:48:49.684Z log event: info -- "ControlConnection" 
2015-06-13T05:48:49.684Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.684Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.684Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.690Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.718Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.718Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.719Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.725Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.725Z log event: info -- "ControlConnection" 
2015-06-13T05:48:49.725Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.726Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.726Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.726Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.727Z log event: verbose -- "Connection" 
2015-06-13T05:48:49.727Z log event: info -- "Connection" 
2015-06-13T05:48:54.728Z log event: warning -- "Connection" 
2015-06-13T05:48:54.729Z log event: info -- "Connection" 
2015-06-13T05:48:59.734Z log event: warning -- "Connection" 
2015-06-13T05:48:59.735Z log event: verbose -- "Connection" 
2015-06-13T05:48:59.735Z log event: verbose -- "Connection" 
2015-06-13T05:49:00.160Z log event: verbose -- "Connection" 

result 1 

Любая идея, почему это происходит?

ответ

-1

Я запускал кластер из 3 узлов, используя докер https://github.com/pokle/cassandra , и только один узел был выставлен наружу.

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

Журнал теперь показывает

SELECT * FROM developer WHERE username='[email protected]' 

2015-06-13T06:20:05.241Z log event: info -- "ControlConnection" 
2015-06-13T06:20:05.241Z log event: info -- "ControlConnection" 
2015-06-13T06:20:05.242Z log event: info -- "Connection" 
2015-06-13T06:20:05.243Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.243Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.244Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.245Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.246Z log event: info -- "Connection" 
2015-06-13T06:20:05.246Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.246Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.246Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.247Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.248Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.248Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.248Z log event: info -- "ControlConnection" 
2015-06-13T06:20:05.248Z log event: info -- "ControlConnection" 
2015-06-13T06:20:05.248Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.249Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.255Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.255Z log event: info -- "ControlConnection" 
2015-06-13T06:20:05.255Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.256Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.256Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.258Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.258Z log event: info -- "ControlConnection" 
2015-06-13T06:20:05.258Z log event: info -- "ControlConnection" 
2015-06-13T06:20:05.258Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.258Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.258Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.262Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.273Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.273Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.274Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.275Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.275Z log event: info -- "ControlConnection" 
2015-06-13T06:20:05.275Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.276Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.276Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.276Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.276Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.278Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.279Z log event: verbose -- "Connection" 
2015-06-13T06:20:05.283Z log event: verbose -- "Connection" 

result 1 
0

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

Рассматривая сообщение журнала в вашем исходном сообщении, мы видим некоторые предупреждающие сообщения с пометкой Connection. Хотя здесь у нас нет полных сообщений журнала, мы могли догадаться, что он попытался попробовать два недоступных узла, прежде чем перейти к третьему узлу, который доступен. Рассматривая исходный код драйвера в connection.js, мы видим, что при сбое ошибки появляется предупреждение.

Кроме того, в client-options.js мы видим, что есть таймаут при соединениях 5 секунд. Это соответствует времени между сообщениями журнала на вашем выходе.

Если драйвер, пытающийся подключиться к каждому узлу, терпит неудачу, тогда ожидания тайм-аутов могут составлять ваше время запроса ~ 20 секунд. Убедитесь, что все узлы индивидуально доступны, и вы увидите увеличение производительности.

+0

Ознакомьтесь с документами для политик балансировки нагрузки, если вы заинтересованы в том, чтобы узнать больше о том, как узлы выбраны для запуска запроса. http://docs.datastax.com/ru/developer/nodejs-driver/2.1/common/drivers/reference/tuningPolicies.html#retry-policy –

Смежные вопросы