Нагрузочное тестирование Firebase - PullRequest
0 голосов
/ 25 апреля 2018

Как мы можем загрузить тестовую производительность прослушивателя базы данных Firebase Realtime?

В документации Firebase Realtime Database указано, что на одну базу данных может приходиться до 100K одновременно работающих пользователей.Если у нас есть 100K одновременных пользователей, слушающих один и тот же узел в базе данных, и этот узел обновляется, как быстро пользователи 100K будут уведомлены об этом обновлении?(Очевидно, что только с несколькими пользователями пользователи получают уведомление менее чем за секунду, но как это будет работать с 100K пользователями, слушающими на одном узле?)

Мы пытаемся смоделировать 100K одновременных пользователей, слушающих натот же путь.

Что мы пробовали

Попытка # 1 : мы пытались использовать цикл for для подключения слушателей 100K, но эти слушатели передаются по конвейерутот же сокет, поэтому Firebase видит только одного слушателя. Есть ли способ отключить конвейеризацию слушателей?

Попытка # 2 : В этой статье из Viget мы использовали скрипт узлапорождать несколько дочерних процессов, каждый из которых подключает одного слушателя к Firebase.Смотрите код ниже (от Viget).К сожалению, это не масштабируется до 100 КБ - мы можем реально создать лишь небольшое количество дочерних процессов на машину (обычно равное количеству процессоров, которые есть на машине). Есть ли способ, которым мы можем порождать значительно больше дочерних процессов на машину (либо с узлом, либо с чем-то еще)?

const spawn = require('child_process').spawn

// How many connections to build with Firebase
const maxChildren = {# of CPUs the machine has}

// How long to keep child processes alive
const timeout = 10 * 60 * 1000 // 10 minutes

for (var i = 0; i < maxChildren; i++) {
    // your-test.js should contain your application-specific test
    var child = spawn('node', ['your-test.js', `--id=${i}`, '-- timeout=${timeout}'])

    child.stdout.on('data', (data) => {
        console.log(`stdout: ${data}`)
    });

    child.stderr.on('data', (data) => {
        console.log(`stderr: ${data}`)
    });

    child.on('close', (code) => {
        if (code !== 0) console.log(`Child ${i} process exited with an error. Code ${code}`)
    })
}

Я уверен, что инженеры в Firebase должны сделать некоторую нагрузкутестирование, так как должно быть основание для ограничения одновременного соединения 100K.Кто-нибудь знает, какие инструменты они используют?

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