У меня есть сервер синтаксического анализа в рабочей среде в среде 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);
}