Разделяется ли сеанс между экземплярами Google App Engine? - PullRequest
0 голосов
/ 27 января 2020

Кажется, что он используется совместно, в отличие от руководств, предлагающих использовать какую-либо стороннюю базу данных для хранения и совместного использования сеанса между различными экземплярами ядра приложения.

Тест: этот сервер отображает идентификатор экземпляра как а также счетчик просмотров, сохраненный в сеансе, он запускается в двух экземплярах в Google App Engine Standard для node.js:

const Koa = require("koa");
const session = require("koa-session");
const port = process.env.PORT || 3000;
const app = new Koa();
app.keys = ["secret"];
app.use(session(app));
app.use(ctx => {
    if (ctx.url === "/") {
        const instanceId = process.env.GAE_INSTANCE;
        const n = (ctx.session.views || 0) + 1;
        ctx.session.views = n;
        ctx.body = `Instance: ${instanceId}, Views: ${n}`;
    }
});
app.listen(port);

app.yaml:

runtime: nodejs12
instance_class: F1
automatic_scaling:
    min_instances: 2
    max_instances: 2

Удивительно, но вывод:

...
Instance: 123, Views: 40
Instance: 789, Views: 41
Instance: 123, Views: 42
...

Счетчик просмотров плавно увеличивается один за другим, когда мои запросы попадают в тот или иной экземпляр, как если бы сеанс был общим.

Мой тест некорректен? Мне просто везет? Это поведение где-то задокументировано?

...