feat(runner): implement cluster mode with Redis-based task dispatching and registry
Introduce a distributed task execution system for gRPC runners. This includes: - A `TaskBus` for cluster-mode task dispatching via Redis Pub/Sub. - A `RunnerRegistry` to track active runner instances in Redis. - Support for both standalone and cluster modes via configuration. - Refactored `RunnerHub` and `TaskManager` to use a `TaskDispatcher` interface, decoupling task submission from local execution. - Added distributed locking to `HotRankWorker` to ensure only one instance performs periodic hot rank recalculations in a multi-instance deployment. - Updated dependency injection (Wire) to support the new runner components and registry.
This commit is contained in:
@@ -23,12 +23,11 @@ type Server struct {
|
||||
grpcSrv *grpc.Server
|
||||
}
|
||||
|
||||
// NewServer 创建新的 gRPC 服务器
|
||||
// NewServer 创建新的 gRPC 服务器(内部构造 Hub + TaskManager)
|
||||
func NewServer(cfg *config.GRPCConfig, logger *zap.Logger) *Server {
|
||||
// 创建 TaskManager 和 RunnerHub,解决循环依赖
|
||||
taskManager := NewTaskManager(nil, 60*time.Second, logger)
|
||||
hub := NewRunnerHub(taskManager, logger)
|
||||
taskManager.SetHub(hub)
|
||||
taskManager.SetDispatcher(hub)
|
||||
|
||||
return &Server{
|
||||
cfg: cfg,
|
||||
@@ -37,6 +36,15 @@ func NewServer(cfg *config.GRPCConfig, logger *zap.Logger) *Server {
|
||||
}
|
||||
}
|
||||
|
||||
// NewServerWithDeps 使用外部依赖创建 gRPC 服务器(Wire DI 使用)
|
||||
func NewServerWithDeps(cfg *config.GRPCConfig, logger *zap.Logger, hub *RunnerHub) *Server {
|
||||
return &Server{
|
||||
cfg: cfg,
|
||||
logger: logger,
|
||||
hub: hub,
|
||||
}
|
||||
}
|
||||
|
||||
// Start 启动 gRPC 服务器
|
||||
func (s *Server) Start() error {
|
||||
if !s.cfg.Enabled {
|
||||
|
||||
Reference in New Issue
Block a user