Перейти к основному содержимому

Технологическая стратегия

Portable Agent полиглотен по замыслу, но не случайно. Набор языков ограничен Java, Python и TypeScript, пока измеримое требование не обоснует другой runtime.

НагрузкаТехнологияПричина
Транзакционное ядроJava 25, Spring Boot 4, Spring MVC, jOOQЯвный SQL, транзакции и простой поток controller → service → repository
Durable workflowsTemporal Java SDKДолгие действия, retries, timers, approvals, compensation и replay
Agent runtimePython, FastAPI, PydanticСильная экосистема моделей, evaluation, retrieval и научных инструментов
Каналы и BFFTypeScript, Node.jsБыстрая адаптация API и общие типы с web-клиентами
MCP gateway/connectorsСначала TypeScript; Python или Java при необходимости библиотек провайдераTier-1 MCP-экосистема и быстрая разработка коннекторов
Web и Widget SDKTypeScript, ReactПереносимые типизированные UI-контракты и знакомый стек
Policy decisionsOpen Policy Agent, RegoПроверяемый policy-as-code отдельно от application code
IdentityKeycloak, OIDC/OAuth 2.1Стандартная self-hosted идентификация и federation
EventsKafkaDurable integration events, replay, fan-out и поддержка экосистемы
DataPostgreSQL на сервис; Redis для ephemeral stateЯвное владение и зрелость эксплуатации
TelemetryOpenTelemetry, Prometheus, Grafana, Loki, TempoНезависимые от вендора metrics, logs и traces
DeliveryOCI, Kubernetes, Helm, Argo CD, External SecretsВоспроизводимые образы и GitOps-развёртывание

Чего мы намеренно избегаем

  • Отдельного языка для каждого сервиса.
  • Общих библиотек доменных моделей между репозиториями.
  • Самописного workflow engine на Kafka consumers и колонках статуса в базе.
  • Kubernetes до того, как локальные контейнеры и контракты станут надёжными.
  • Backstage как runtime-зависимости: это только портал разработчика и projection каталога.
  • Новой инфраструктуры без владельца, runbook, health signal и описанного failure mode.
  • JPA/Hibernate в Java-сервисах: для доступа к PostgreSQL используется jOOQ.
  • Сложных английских названий, когда короткое слово сохраняет смысл.