Rely on ticker and TTL instead of KeepAlive
CI / test (push) Successful in 1m32s Details

This commit is contained in:
MpakobecEx 2026-10-21 16:25:31 +05:00
parent 67d48b11d3
commit 82fb1027f3
2 changed files with 6 additions and 9 deletions

View File

@ -260,10 +260,10 @@ Solution — **`server/Vanguard.slnx`**, не `.sln`.
Включённый режим поднимает silo с localhost-clustering в том же процессе Включённый режим поднимает silo с localhost-clustering в том же процессе
(`Orleans:SiloPort` / `GatewayPort`, по умолчанию 11111/30000); (`Orleans:SiloPort` / `GatewayPort`, по умолчанию 11111/30000);
`MatchActorGrain` держит доменный `MatchGrain`, `IMatchConnectionRegistry` `MatchActorGrain` держит доменный `MatchGrain`, `IMatchConnectionRegistry`
остаётся в процессе. Граны `[KeepAlive]`: WebSocket нельзя потерять при остаётся в процессе. Активный матч держится тикером, завершённые матчи
выгрузке; завершённые матчи выгружаются после `CompletedMatchTtlSeconds`. выгружаются после `CompletedMatchTtlSeconds`; страховочный CollectionAge
Один silo на инстанс; для нескольких реплик нужен настоящий кластер и 12 часов. Один silo на инстанс; для нескольких реплик нужен настоящий
внешний реестр соединений. Тест кластера — `OrleansMatchTests`. кластер и внешний реестр соединений. Тест кластера — `OrleansMatchTests`.
- **Docker**: `Dockerfile` + `docker-compose.yml` поднимают postgres, redis - **Docker**: `Dockerfile` + `docker-compose.yml` поднимают postgres, redis
(AOF) и сервер; `/health` на `http://localhost:8080` (порт меняется (AOF) и сервер; `/health` на `http://localhost:8080` (порт меняется
через `VANGUARD_PORT`, адрес WebSocket — `VANGUARD_WS_URL`). через `VANGUARD_PORT`, адрес WebSocket — `VANGUARD_WS_URL`).

View File

@ -1,6 +1,5 @@
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Orleans; using Orleans;
using Orleans.Concurrency;
using Vanguard.Rules.Cards; using Vanguard.Rules.Cards;
using Vanguard.Server.Configuration; using Vanguard.Server.Configuration;
using Vanguard.Server.Storage; using Vanguard.Server.Storage;
@ -13,11 +12,9 @@ namespace Vanguard.Server.Matches.Orleans;
/// <see cref="MatchGrain"/>; этот класс отвечает за активацию, восстановление /// <see cref="MatchGrain"/>; этот класс отвечает за активацию, восстановление
/// из хранилища и сериализуемую границу Orleans. /// из хранилища и сериализуемую границу Orleans.
/// ///
/// [KeepAlive] важен: если Orleans выгрузит грана, живые WebSocket-соединения /// Активный матч держится тикером (раз в секунду), а завершённый явно
/// останутся в реестре без владельца. Долгоживущие матчи и так ограничены TTL, /// выгружается после TTL. Страховочный CollectionAge — 12 часов.
/// а после рестарта сервера поднимаются из снапшота.
/// </summary> /// </summary>
[KeepAlive]
public sealed class MatchActorGrain : Grain, IMatchActor public sealed class MatchActorGrain : Grain, IMatchActor
{ {
private readonly CardCatalog _catalog; private readonly CardCatalog _catalog;