OxL Справочник OxL
РусскийEnglish

Кластер и конфигурация

Один бинарник работает на всех узлах кластера; роль узла решает, что он делает: обслуживает сервисы, размещает акторов, хранит данные, выполняет саги. Кластер объявляется один раз на программу (§12.1):

oxl
cluster counters {
  role edge  { serves Gate; runs leader("traffic"); replicas 1.. }   // обслуживает сервис, задача-лидер
  role store { journal; shards 8; replication 3; hosts Counter }     // встроенное хранилище и акторы
  assign by env("OXL_ROLE") else auto                                // как узел узнаёт свою роль
}

Компилятор проверяет согласованность: каждый сервис с impl обслуживается какой-нибудь ролью, каждый шардированный актор размещён, топикам и сагам есть где храниться. Узел без cluster получает неявную роль all — поэтому в тестах и при oxl run весь код работает в одном процессе без изменений.

Локальный кластер: oxl dev#

sh
cd examples/counter-cluster
oxl dev --nodes 4        # узлы 127.0.0.1:7000..7003, mTLS с одноразовым dev-CA, перезапуск при изменении кода

oxl dev запускает N процессов одного бинарника, показывает таблицу узлов (состояние, роль, вид кластера 4/4) и пишет логи каждого узла в <data-dir>/nX/stdout.log. Остановите процесс узла — остальные заметят это через SWIM, роль и шарды переедут, акторы активируются на других узлах вместе с состоянием. oxl inspect открывает веб-интерфейс кластера: узлы, роли, шарды, саги, живые вызовы; oxl trace показывает граф вызовов запроса по узлам. Готовый проект — counter-cluster.

Конфигурация#

Статическая config читается при старте: флаг --set App.port=9000 → переменная APP_PORT → config/<профиль>.toml → блок profile → значение по умолчанию. Неверное значение — сообщение с источником и код выхода 78 (§14.1).

oxl✓ проверяется в CI
config App {
  port: u16 = 8080
  name: str = "demo"
  token: secret<str>              // secret не попадает в логи и трассы
  profile dev { token = "dev-token" }
  profile prod { port = 443 }
}

fn main() io {
  let app = App.get()
  print("{app.name} on {app.port}")
}
Вывод
demo on 8080

Динамическая dynamic хранится в кластере и меняется без перезапуска (oxl config set Limits.rps 200): значения проверяются типом, версионируются, Flag включает функцию по проценту пользователей (§14.2). Хранилище кластера, шарды и репликация — §12.8; безопасность (mTLS всегда, аутентификация, политики rpc) — §13.

См. также

OxL 1.0.0-beta · Версия документации 1.0.0-beta© OxwaldLink · сгенерировано из Стандарта, исходников std и руководства