Примерно так же, как и любая другая ситуация с нехваткой ресурса.
1. Сервер не использует примонтированный по сети sqlite, а использует базу данных с гарантиями по таймаутам и fallable операции. 2. Клиент, при общении с сервером, использует локальное кеширование (для local first работы) 3. Если сервер не выполняет операцию за ожидаемое время, клиенту не важно по какой причине сервер не выполнил операцию, это таймаут операции. Если операция в бэкграунде, то она отправляется на retry с exponential fallback, а серверу набирают баллы проблем (чтобы показать, что это проблема сервера). 4. Если это интерактивная операция (отправка письма), задача становится в очередь, и по таймауту клиенту дают опцию: попробовать снова, отложить операцию, сохранить черновик локально, отменить полностью. 5. Трекинг проблем с операциями - пометка на сервер, мол, сервер испытывает проблемы. 6. Recoverable локальный стейт, закрытие клиента в любой момент времени позволяет восстановить состояние клиента (включая полу-набранное письмо). 7. Для race conditions между recoverable state и состоянием сервера - at least once. Лучше дважды отправить письмо, чем потерять его.
no subject
Date: 2025-01-30 09:48 am (UTC)1. Сервер не использует примонтированный по сети sqlite, а использует базу данных с гарантиями по таймаутам и fallable операции.
2. Клиент, при общении с сервером, использует локальное кеширование (для local first работы)
3. Если сервер не выполняет операцию за ожидаемое время, клиенту не важно по какой причине сервер не выполнил операцию, это таймаут операции. Если операция в бэкграунде, то она отправляется на retry с exponential fallback, а серверу набирают баллы проблем (чтобы показать, что это проблема сервера).
4. Если это интерактивная операция (отправка письма), задача становится в очередь, и по таймауту клиенту дают опцию: попробовать снова, отложить операцию, сохранить черновик локально, отменить полностью.
5. Трекинг проблем с операциями - пометка на сервер, мол, сервер испытывает проблемы.
6. Recoverable локальный стейт, закрытие клиента в любой момент времени позволяет восстановить состояние клиента (включая полу-набранное письмо).
7. Для race conditions между recoverable state и состоянием сервера - at least once. Лучше дважды отправить письмо, чем потерять его.