У меня есть центральный сервер API, запускающий рабочие экземпляры кластера. У каждого экземпляра есть определенная большая работа, и могут быть манипуляции, которые я хочу выполнить только на этом конкретном экземпляре. Это была грубая идея, которую я имел в виду:
- API Server with express, master process
- instance 1: GET /instances/1/*
- экземпляр 2: ПОЛУЧИТЬ /экземпляры/2/*
Каждый экземпляр представляет собой отдельный рабочий процесс, и я надеялся, что смогу делегировать все запросы API для конкретного рабочего процесса непосредственно этому рабочему процессу (для выполнения функций в этом рабочем процессе).
instance/:id действительно представляет WorkerID.
Клиент может запросить журналы, где workerID = x, поэтому GET /instances/x/logs.
Цель здесь состоит в том, чтобы мастер направлял все запросы экземпляра X к подпроцессу, обозначенному как x.
Это не для распределения нагрузки между рабочими, которые по сути являются клонами/зеркалами.
Каждый из моих рабочих может выполнять вариант длительной задачи (дни, недели, месяцы). Методы являются общими для всех рабочих процессов, но если я вызываю /instances/x/logs, я хочу запросить это только для этого конкретного рабочего процесса. Это цель, которую я ищу, чтобы понять.
// route these to subprocess x
GET /instances/x/logs
POST /instances/x/settings
// route these to subprocess y
GET /instances/y/logs
POST /instances/y/settings
// route these to subprocess z
GET /instances/z/logs
POST /instances/z/settings
// make a new worker process, returns worker ID as reference
POST /instances/
Я видел, что у меня может быть несколько экспресс-слушателей на одном и том же порту в разных процессах, но, если я правильно понял, это автоматически балансирует нагрузку по экспрессу. Я не могу направлять определенные запросы конкретным воркерам на основе пути, не так ли?