docs: explain server-side portfolio metadata recovery
This commit is contained in:
@@ -56,8 +56,16 @@ sequenceDiagram
|
||||
|
||||
Для нового снимка требуются оба финансовых ответа. Backend не выдаёт
|
||||
позиции без денег или деньги без позиций как полный портфель.
|
||||
Метаданные дополняют имя и идентификаторы, но их ошибка не срывает
|
||||
финансовый результат. Общий серверный клиент обеспечивает TLS, очередь,
|
||||
Метаданные дополняют имя и идентификаторы, но их временная недоступность
|
||||
не срывает финансовый результат. Поиск выполняется партиями по пять позиций,
|
||||
чтобы крупный портфель не переполнял очередь одновременными запросами.
|
||||
Порядок позиций сохраняется. Backend ищет сведения по UID, затем по FIGI,
|
||||
если UID не дал пригодного названия или тикера.
|
||||
Ожидание метаданных ограничено 30 секундами на снимок счёта. После этого
|
||||
используется доступный кэш либо идентификатор, новые поиски для снимка
|
||||
не запускаются. Уже начатые запросы могут закончиться позже и обновить общий
|
||||
справочный кэш, но не меняют выданный финансовый снимок.
|
||||
Общий серверный клиент обеспечивает TLS, очередь,
|
||||
ограничение частоты, deadline RPC и разрешённые повторные попытки —
|
||||
[граница интеграции](../../../integrations/tbank.md).
|
||||
|
||||
@@ -68,7 +76,7 @@ sequenceDiagram
|
||||
| Frontend | Последний успешный HTTP-ответ для выбранного счёта и сессии | Свежим считается 30 секунд; при обычном обновлении уже показанный ответ остаётся видимым |
|
||||
| Backend | Полный снимок пары пользователь–счёт в памяти процесса | До 30 секунд, только в том же поколении текущего подключения |
|
||||
| Backend при временной ошибке | Тот же полный снимок | Не старше пяти минут с момента успешного сохранения, только в том же поколении |
|
||||
| Метаданные инструмента | Успешный поиск или подтверждённое отсутствие | До 24 часов; общий ограниченный кэш на 500 ключей UID/FIGI, ошибки не сохраняются |
|
||||
| Метаданные инструмента | Успешный поиск или подтверждённое отсутствие | Свежими считаются 24 часа; общий кэш на 500 ключей UID/FIGI, ошибки не сохраняются |
|
||||
|
||||
Это параметры текущей реализации, а не самостоятельная политика этого
|
||||
документа: [снимки](../../../../backend/src/tbank/portfolio.service.ts),
|
||||
@@ -79,6 +87,23 @@ sequenceDiagram
|
||||
пять минут после окончания свежих 30 секунд. Запасной ответ сохраняет
|
||||
исходное `lastSuccessfulAt` и получает `isStale: true`.
|
||||
|
||||
После истечения 24 часов backend обновляет справочные данные. Если обновление
|
||||
временно недоступно, ранее успешные сведения остаются запасным вариантом,
|
||||
пока запись есть в ограниченном кэше процесса. Ошибка не продлевает срок
|
||||
свежести: следующий поиск снова пытается обновить запись. Это относится только
|
||||
к названию, тикеру, ISIN и логотипу, а не к ценам или денежным значениям.
|
||||
Перезапуск backend и вытеснение записи из кэша удаляют этот запасной вариант.
|
||||
Неполный ответ без названия и тикера также не затирает известные сведения
|
||||
и не обновляет срок их свежести. Подтверждённое отсутствие инструмента
|
||||
заменяет прежнюю запись отрицательным результатом поиска.
|
||||
|
||||
Время снимка фиксируется при получении финансовых ответов, до ожидания
|
||||
названий. Сроки серверного кэша отсчитываются от этого времени, поэтому
|
||||
долгая загрузка справочных данных не делает старые суммы новыми.
|
||||
Успешные справочные данные общие для всех пользователей; выполняющиеся
|
||||
запросы объединяются только внутри одного брокерского токена, чтобы ошибка
|
||||
его авторизации не передавалась другому подключению.
|
||||
|
||||
Успешное создание, замена или удаление подключения меняет границу
|
||||
повторного использования финансовых данных. Старое или поздно завершившееся
|
||||
получение снимка не делает его доступным новым запросам другого поколения.
|
||||
@@ -104,18 +129,25 @@ Frontend сбрасывает всё поддерево финансовых з
|
||||
|
||||
`INVALID_TBANK_TOKEN` и `404` не заменяются серверным запасным снимком.
|
||||
Временная ошибка определения доступных счетов также может использовать
|
||||
пригодный снимок того же поколения. Сбой метаданных использует идентификатор
|
||||
инструмента и не устанавливает `isStale`.
|
||||
пригодный снимок того же поколения. При временном сбое метаданных сначала
|
||||
используются ранее успешные сведения, а при их отсутствии — идентификатор
|
||||
инструмента; это не устанавливает `isStale`. Отказ авторизации при поиске
|
||||
метаданных не маскируется запасным названием.
|
||||
|
||||
На клиенте нет polling, автоматического повтора неуспешного запроса или
|
||||
Для запроса самого портфеля на клиенте нет polling, автоматического повтора или
|
||||
обновления при возврате фокуса. При обновлении того же уже показанного
|
||||
результата клиент оставляет его на экране, добавляя индикатор загрузки
|
||||
или предупреждение с доступной с клавиатуры повторной попыткой.
|
||||
Это клиентский сохранённый ответ, независимо от серверного `isStale`.
|
||||
|
||||
Frontend отображает название и остальные сведения из ответа портфеля.
|
||||
Повторные попытки поиска для акций, облигаций и других типов инструментов
|
||||
принадлежат [общему клиенту T-Bank на backend](../../../integrations/tbank.md#конфигурация-и-ограничения).
|
||||
|
||||
Первое обращение к крупному портфелю может потребовать много метаданных.
|
||||
Переполнение общей очереди RPC означает временную недоступность конкретного
|
||||
поиска. После успешного поиска метаданные используются повторно до истечения
|
||||
Переполнение общей очереди RPC может произойти при конкурирующих запросах;
|
||||
поиск метаданных в этом случае повторяется с ограниченными паузами. После
|
||||
успешного поиска метаданные используются повторно до истечения
|
||||
кэша. Значение `TBANK_RATE_LIMIT_PER_SECOND` следует соотносить с квотой
|
||||
источника; его увеличение не является гарантированным исправлением
|
||||
ограничения самого T-Bank.
|
||||
|
||||
Reference in New Issue
Block a user