Господа, будьте добры рассказать каковы традиционные подходы при разработке ПО для кластера Node.js относительно обеспечения согласованности информации между процессами кластера?
В рамках одного инстатса - собственно то же самое, что и на c++ - общая память. Создаем в некоем общем скопе сервис с данными, которые нужны для всех и используем.
В рамках кластера - кэширующие сервера, типа memcached, redis.
Что я должен учитывать разрабатывая бекэнд-приложение для кластера Node.js?
Несколько факторов:
- оно течет, и вы не раз будете вытирать капли крови из глаз, пытаясь понять где.
- качество существующих решений в большинстве случаев - невероятно низкое. Чего только стоит
https://habrahabr.ru/post/280099/
- у вас будет много зависимостей хотите вы того, или нет.
- если вам не помогает событийная модель - Node.js вероятно не то, что вам надо.
Но запросы пользователя на следующие страницы могут пойти через другие процессы, где нет этих закешированных данных - как же с этим быть?
Кэшировать в скопе, доступном для каждого из ваших процессов.
Кроме того, являются ли мои примеры корректными, практикуется ли описанное кеширование данных в бекэнд-приложениях на Node.js?
По тому, как оно внутри работает - безусловно. Визуально же будет несколько по другому.
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const I_AM_CACHE = {
"some": "data",
};
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end(JSON.stringify(I_AM_CACHE));
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});