From f327441089f2e58b30e3da91b2218daaf8420e75 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 26 Apr 2026 08:34:53 +0200 Subject: [PATCH] feat(coordinator): scaffold microservice for <300ms failover and load balancing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add coordinator module with gRPC stream-based instance health detection - Implement InstanceHeartbeatService in core: bidirectional stream to coordinator every 200ms - Track game subscriptions per core via Redis Sets (SADD/SREM) - Add gRPC handlers for batch resubscribe/unsubscribe/evict/drain operations - Implement coordinator services: InstanceRegistry, FailoverService, LoadBalancer, AutoScaler, CacheEvictionManager - Add REST API for metrics and manual failover/rebalance/scaling - Proto definition: coordinator_service.proto with HeartbeatStream + batch game operations - Failover timeline: gRPC stream drop (50-200ms) → game migration (<300ms target) - Support for Argo Rollouts auto-scaling (k8s CRD patching via Fabric8 client) Note: Proto compilation issues documented in COORDINATOR_IMPLEMENTATION.md. Requires: - Add task dependency: tasks.compileScala dependsOn tasks.compileJava - Fix deprecated @Inject var = _ → = uninitialized syntax - Implement remaining service methods (gRPC clients, FailoverService distribution) Co-Authored-By: Claude Haiku 4.5 --- .idea/gradle.xml | 2 + .idea/scala_compiler.xml | 2 +- COORDINATOR_IMPLEMENTATION.md | 316 ++++++++++++++++++ modules/coordinator/build.gradle.kts | 96 ++++++ .../src/main/proto/coordinator_service.proto | 57 ++++ .../src/main/resources/application.yml | 39 +++ .../nowchess/coordinator/CoordinatorApp.scala | 7 + .../config/CoordinatorConfig.scala | 55 +++ .../coordinator/dto/InstanceMetadata.scala | 23 ++ .../grpc/CoordinatorGrpcServer.scala | 110 ++++++ .../resource/CoordinatorResource.scala | 99 ++++++ .../coordinator/service/AutoScaler.scala | 58 ++++ .../service/CacheEvictionManager.scala | 53 +++ .../coordinator/service/FailoverService.scala | 67 ++++ .../coordinator/service/HealthMonitor.scala | 68 ++++ .../service/InstanceRegistry.scala | 63 ++++ .../coordinator/service/LoadBalancer.scala | 44 +++ .../src/main/proto/coordinator_service.proto | 57 ++++ .../core/src/main/resources/application.yml | 20 ++ .../grpc/CoordinatorServiceHandler.scala | 67 ++++ .../redis/GameRedisSubscriberManager.scala | 37 ++ .../service/InstanceHeartbeatService.scala | 186 +++++++++++ settings.gradle.kts | 1 + 23 files changed, 1526 insertions(+), 1 deletion(-) create mode 100644 COORDINATOR_IMPLEMENTATION.md create mode 100644 modules/coordinator/build.gradle.kts create mode 100644 modules/coordinator/src/main/proto/coordinator_service.proto create mode 100644 modules/coordinator/src/main/resources/application.yml create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/CoordinatorApp.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/dto/InstanceMetadata.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoordinatorGrpcServer.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/resource/CoordinatorResource.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/service/AutoScaler.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/service/CacheEvictionManager.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/service/FailoverService.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/service/HealthMonitor.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/service/InstanceRegistry.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/service/LoadBalancer.scala create mode 100644 modules/core/src/main/proto/coordinator_service.proto create mode 100644 modules/core/src/main/scala/de/nowchess/chess/grpc/CoordinatorServiceHandler.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/service/InstanceHeartbeatService.scala diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 92c218c..49efe00 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -13,10 +13,12 @@ diff --git a/.idea/scala_compiler.xml b/.idea/scala_compiler.xml index 238131e..08120e7 100644 --- a/.idea/scala_compiler.xml +++ b/.idea/scala_compiler.xml @@ -5,7 +5,7 @@