Читаю учебник по Rust, по ходу делаю всякие свистоперделки и вот написал еще один мини проект - прокси сервер для платформы smotrim.ru, который на лету преобразует их JSON-ы в RSS/XML формат. У меня уже был написал небольшой парсер на python и настроен github-actions для обновления списка лент по крону, и теперь их стало двое.

Из отличий со скриптом на python, приложение работает в режиме сервера, а не дергается по расписанию, (почти) на каждый запрос генерируется новый XML.

Использование: smotrim-rss-proxy [OPTIONS]

Options:
  -i, --ip <IP>
          IP для запуска сервера [default: 127.0.0.1]
  -p, --port <PORT>
          TCP порт сервера [default: 3000]
  -l, --limit <LIMIT>
          Количество эпизодов [default: 20]
  -c, --cache-lifetime <CACHE_LIFETIME>
          Время жизни кэша в секундах [default: 600]
  -d, --db-path <DB_PATH>
          Путь к sqlite базе для хранения данных [default: data.sqlite]
  -h, --help
          Print help
  -V, --version
          Print version

Получение некоторых данных со “смотрим.ру” очень медленное, например получение заголовка с размером аудиофайлов занимает около секунды, и когда надо получить размеры 50ти файлов - это длится вечность. Cloudflare, например, не дожидаясь ответа от прокси, просто дропает соединение. Поэтому пришлось добавить кеширование. Готовые XML кэшируются в оперативной памяти (по умолчанию на 10 мин) и самые медленные данные сохраняются в sqlite базу чтобы после перезапуска сервиса не кешировать их повторно.

По тестам на рабочем ПК получается вполне приличная скорость - ~50000 запросов в секунду.

$ wrk -t6 -c100 -d30s -s test.lua http://127.0.0.1:3000
Running 30s test @ http://127.0.0.1:3000
  6 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.80ms  105.90us   4.02ms   90.32%
    Req/Sec     8.92k   644.76    27.67k    99.11%
  1599914 requests in 30.10s, 78.32GB read
Requests/sec:  53153.41
Transfer/sec:      2.60GB

Потестировать можно по адресу https://smrss.coyotle.ru/brand/[id] , где [id] - идентификатор подкаста на сайте smotrim.ru.

Исходники лежат тут https://github.com/coyotle/smotrim-rss-proxy, там же можно скачать готовые сборки для Linux и Windows. Для Win не тестировал, даже не знаю запускается оно или нет. Тестирование и багрепорты приветствуются.