#node.js #cassandra #express-cassandra #datastax-node-driver
#node.js #cassandra #express-cassandra #datastax-node-driver
Вопрос:
Привет сообществу Stack overflow!
Мне нужна помощь в определении правильного способа установления соединений с помощью модели express cassandra orm в nodejs для моей настройки cassandra с несколькими dc (всего dc = 2).
В настоящее время мы используем только 1 dc с express cassandra, поэтому для того же мы просто указываем IP-адреса 2 начальных узлов в качестве контактных точек для express cassandra, как показано ниже
models.setDirectory(__dirname '/models').bind(
{
clientOptions: {
contactPoints: cassandraContactPoints,
protocolOptions: { port: 9042 },
keyspace: 'keyspace_name',
queryOptions: { consistency: models.consistencies.one }
},
ormOptions: {
defaultReplicationStrategy: {
class: 'NetworkTopologyStrategy',
replication_factor: 2,
},
createKeyspace: false,
dropTableOnSchemaChange: false
}
},
function (err) {
if (err) {
throw err;
} else {
console.log('connection established');
postDBConnection(models, 'keyspace name again');
}
}
Здесь следует отметить, что мы указываем cassandraContactPoints как массив, состоящий всего из 2 узлов нашего существующего dc.
Поскольку мы продвигаемся вперед с отдельным DC для аналитических целей, я хотел бы знать, должны ли мы указывать ip-адреса нового DC в том же массиве, т.Е. cassandraContactPoints? Мы планируем использовать LOCAL_QUORAM и хотим, чтобы наши аналитические приложения использовали только аналитический dc для всех операций чтения и записи.
Я попытался прочитать исходный код для модулей express cassandra и ‘cassandra driver’, но я не могу найти решение>
Любая помощь здесь была бы чрезвычайно признательна!
Ответ №1:
Предоставление точки контакта с другого контроллера постоянного тока никогда не является хорошей идеей — большинство драйверов (не помню о Node.js драйвер) выполняет перетасовку точек контакта, поэтому он может сначала связаться с узлом в другом DC и извлечь имя DC из информации этого узла и будет думать, что этот DC является локальным для приложения, поэтому запросы LOCAL_QUORUM будут выполняться к аналитическому DC, и это приведет к проблемам.
Вы можете сделать свой код более защищенным от подобных вещей, если вы явно зададите имя DC, которое является локальным для вашего приложения, вместо того, чтобы определять его неявно из точек контакта. Подробности см. в документации драйвера (в версии 4.0 разработчик должен указать имя локального DC!)
Комментарии:
1. Это было чрезвычайно полезно, Алекс, огромное спасибо! 🙂