Очищення ключів ідемпотентності
Очищення ключів ідемпотентності
Кожен JSON-RPC запит, що містить поле idempotencyKey,
записується в таблицю pgarachne.requests функцією
pgarachne.save_idempotency_key(). Саме це забезпечує
роботу виявлення дублікатів — але це також означає, що таблиця росте необмежено,
якщо оператор не запускає очищення періодично.
PgArachne сам не запускає планувальник фонових завдань. Найчистіші варіанти:
pg_cron (рекомендовано, якщо можете встановлювати розширення)
-- Run every hour, remove keys older than 24 hours
SELECT cron.schedule(
'pgarachne-idempotency-cleanup',
'0 * * * *',
$$SELECT pgarachne.cleanup_idempotency_keys('24 hours'::interval);$$
);Зовнішній cron/systemd timer
Заплануйте shell-завдання, яке викликає функцію через psql:
0 * * * * psql "host=... user=... dbname=..." \
-c "SELECT pgarachne.cleanup_idempotency_keys('24 hours'::interval);" \
>> /var/log/pgarachne-cleanup.log 2>&1Вручну/за потреби
Ви можете викликати цю функцію в будь-який момент з psql, скрипта міграції або будь-якого іншого клієнта. Вона повертає кількість видалених рядків.
SELECT pgarachne.cleanup_idempotency_keys(); -- default: 24 hours
SELECT pgarachne.cleanup_idempotency_keys('7 days'::interval);Вибір вікна зберігання
Виберіть вікно з достатнім запасом понад найдовший очікуваний інтервал повторних спроб ваших клієнтів. Якщо клієнт з помилкою повторює той самий ключ ідемпотентності через 48 годин після первинного запиту, 24-годинне вікно зберігання непомітно пропустить дублікат.
Для більшості розгортань 24 години є безпечним значенням за замовчуванням.