Skip to content

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ojhub-openRust

ojhub-openrust - открытая реализация части бекенда Object Hub на Rust, работающая как горячая замена для index-роута и загрузчика версий openGo, плюс отправка веб-пушей.

Кто мы вообще такие?

Object hub - платформа для Object Show Community, с упором на собственный вики движок и СМИ. Мы намеренно отказались от популярных веб стандартов в пользу производительности сайта - в теории Интерфейс клиента Object hub работает в стабильные 60 фпс даже на слабых Chromebook'ах (потому что весь движок был написан на Athlon 64 X2)!

Почему openRust

openGo уже дал нам 13 мегабайт idle против 150 у nodejs. openRust не заменяет openGo целиком - он берёт на себя конкретные горячие участки (og-теги, загрузчик, веб-пуши), где нативная скорость и отсутствие GC особенно ценны, плюс лично для меня это была возможность освоить действительно низкоуровневый язык.

Небольшая справочная информация

openRust был сделан за ~24 часа с нуля, включая изучение самого языка. За это время реализованы og-теги для всех доменов сайта (проекты, вики, новости, вакансии), version loader, отправка веб-пушей через VAPID, и трёхуровневый механизм передачи управления (openRust → openGo → legacy-php) через специальные HTTP коды ответа.

Так как php/go бекенды этого сайта работают на FreeBSD мы намеренно отказались от излишней инфраструктуры с целью тотальной портируемости этой реализации.

Почему русский язык?

Смотри README openGo - причины те же, стиль сохраняется единым по всему проекту.

Текущая инфраструктура:

  • Nginx, желательно самый последний, с поддержкой proxy_intercept_errors
  • Mariadb 11.8, но можно любую другую современную версию
  • Rust 1.97+ (stable)
  • openGo как fallback-слой (см. коды ответа 398/399)
  • Проприетарный legacy-php как последний fallback-слой

Долгосрочная цель:

  • Минимальное потребление ресурсов
  • Высокая портируемость
  • 100% совместимость с legacy-php и openGo по поведению
  • 100% совместимость с поддерживаемыми версиями object hub
  • Нормальная и задокументированная инфраструктура

Как работает передача управления

openRust не реализует все эндпоинты сайта. Для путей, которые уже реализованы в openGo, но ещё не в openRust, сервис возвращает HTTP код 398 - nginx перехватывает его и перенаправляет запрос в openGo. Для путей, не реализованных нигде из двух, возвращается 399 - fallback уходит сразу в legacy-php. Тот же принцип, что DropPhp в openGo, просто на уровень выше.

чек-лист

  • Продакшн? да
  • Loader 1.20? да, урезанная таблица версий без мёртвых версий
  • Сколько эндпоинтов реализовано? 3 из ~65 (index, loader, send-push) + fallback-механизм на все остальные
  • Что будет портировано следующим? бизнес-логика подписок на веб-пуши
  • Что будет исправлено дальше? очередь отправки пушей, если нагрузка это реально потребует
  • Что я сделаю когда настроение будет? вынести список версий из статики в конфиг/БД, чтобы не пересобирать бинарник при каждом обновлении client-side файлов

About

our rust microservice

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages