Разбор LiveQuery Избыточный процессор - PullRequest
0 голосов
/ 07 октября 2018

У меня есть сервер синтаксического анализа в рабочей среде в среде IoT, где он обрабатывает около 100 запросов в секунду.Все это прекрасно работает с процессором около 30% и временем отклика 25 мс.Сервер синтаксического анализа кластеризован в AWS на двух экземплярах C5.Large.

Я добавляю в LiveQuery как отдельный сервер C5.Large.Сервер Parse и LiveQuery используют Redis для передачи изменений, и это работает.

Проблема, с которой я сталкиваюсь, заключается в том, что сервер LiveQuery, к которому подключен только один клиент, использует ЦП в диапазоне от 20 до 35%.Два клиента подключены, и это составляет около 40%.Более трех клиентов подключены, и в течение нескольких минут происходит сбой сервера.

Я ищу несколько предложений относительно того, что можно попытаться выяснить, почему чрезмерное использование процессора, а затем сбой сервера.Понятно, что все подписки работают с сервера Parse на LiveQuery для клиента.

Дополнительная информация:

  • Версия сервера Parse: 3.0.0
  • Клиент Parse:2.1.0
  • Количество классов, отслеживаемых с помощью Live Query: 12
  • Использование ролевого ACL
  • Использование маркера сеанса в клиентских подписках

Здеськак настроен сервер Live Query:

let parseApi = new ParseServer({
    databaseURI: `mongodb://${config.get('/mongo/userName')}:${config.get('/mongo/password')}@${config.get('/mongo/uri')}`, // Connection string for your MongoDB database
    appId: config.get('/parse/appId'),
    masterKey: config.get('/parse/masterKey'), // Keep this key secret!
    serverURL: `http://127.0.0.1:${config.get('/port/webapp')}/parse`,
    logLevel: "ERROR",
    sessionLength: ONE_DAY, // in seconds. Set to 24 hours.
    schemaCacheTTL: ONE_MONTH_MS, //"The TTL for caching the schema for optimizing read/write operations. You should put a long TTL when your DB is in production. default to 5000; set 0 to disable."
    cacheTTL: ONE_DAY_MS, //"Sets the TTL for the in memory cache (in ms), defaults to 5000 (5 seconds)"
    cacheMaxSize: 1000000, //"Sets the maximum size for the in memory cache, defaults to 10000"
    enableSingleSchemaCache: true //"Use a single schema cache shared across requests. Reduces number of queries made to _SCHEMA. Defaults to false, i.e. unique schema cache per request."
});

// Serve the Parse API on the /parse URL prefix
app.use('/parse', parseApi);

let port = config.get('/port/webapp');
let server = app.listen(port);

// Initialize a LiveQuery server instance, app is the express app of your Parse Server
if (config.get('/parseAppServerIsLocal')) {
    debug(`Starting Live Query Server on port ${config.get('/port/parseLiveQuery')}`);
    let httpServer = require('http').createServer(app);
    httpServer.listen(config.get('/port/parseLiveQuery'));
    let liveQueryParams = {
        redisURL: config.get('/server/redis')
    };
    let parseLiveQueryServer = ParseServer.createLiveQueryServer(httpServer,liveQueryParams);
}
...