Size: a a a

pgsql – PostgreSQL

2020 December 25

Ð

Ð in pgsql – PostgreSQL
Victor Yegorov
ну тут нужен кто-то с опытом прикладной бэкенд разработки — как реагировать на то, что сервер не дал ответа.
я уже сказл как - реконнектиться и запрашивать состояние заново.
источник

Ð

Ð in pgsql – PostgreSQL
тут нужен кто-то умеющий слушать
источник

D

Dmitriy in pgsql – PostgreSQL
Victor Yegorov
ну тут нужен кто-то с опытом прикладной бэкенд разработки — как реагировать на то, что сервер не дал ответа.
Обычно (везде, где я видел), просто юзеру 500-ую кидают и сыпят в логи. Иногда пытаются повторить запрос несколько раз, если он не прошёл.
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Ð
я уже сказл как - реконнектиться и запрашивать состояние заново.
пока транзакция это не сумма перевода N денежных средств, об этом зачастую не думают со стороны разработки.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Ð
тут нужен кто-то умеющий слушать
ad hominem?
источник

Ð

Ð in pgsql – PostgreSQL
ага
источник

Ð

Ð in pgsql – PostgreSQL
Виталий Кухарик
пока транзакция это не сумма перевода N денежных средств, об этом зачастую не думают со стороны разработки.
некоторые вообще не думают, особенно когда подключают орм, умеющую только круды, и последовательно запускают апдейты, нахлебался я такого
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
ох уж эти орм
источник

D

Dmitriy in pgsql – PostgreSQL
Alexey Lesovsky
тогда такой вопрос... как с точки зрения бэкенд-разработки обрабатывать такую ситуацию.

ты пишешь код, который делает update в БД. но в процессе апдейта, сетевое соединение до БД может оборваться (не такая уж и редкая ситуация). Как мне кажется класический вариант посчитать это ошибкой и вернуть клиенту ошибку. Но при этом апдейт по факту может завершиться и стейт в БД изменится так как и хотел клиент (хотя клиенту то приложение вернуло ошибку)
На самом деле, с этим вообще нечасто заморачиваются. Приведу пример. Когда Steam подвисает, в нём можно случайно покупку какой-нибудь карточки и т.п. совершить спокойно несколько раз, даже не зная об этом. Получаешь ошибку, а покупка уже по факту прошла
источник

Ð

Ð in pgsql – PostgreSQL
Dmitriy
На самом деле, с этим вообще нечасто заморачиваются. Приведу пример. Когда Steam подвисает, в нём можно случайно покупку какой-нибудь карточки и т.п. совершить спокойно несколько раз, даже не зная об этом. Получаешь ошибку, а покупка уже по факту прошла
и правильно, проблемы веб-коннекшенов это вообще последнее, что должно волновать субд
источник

D

Dmitriy in pgsql – PostgreSQL
Ð
и правильно, проблемы веб-коннекшенов это вообще последнее, что должно волновать субд
Поэтому я с самого начала и написал: кидаем 500-ую ошибку, логируем и всё. Потом разрабы в логах уже смотрят ошибку и анализируют проблему
источник

D

Dmitriy in pgsql – PostgreSQL
Это если о бэкенде речь
источник

Ð

Ð in pgsql – PostgreSQL
кто хоть раз видел веб-систему, которая умеет делать роллбек в своем аплике, ели браузер не смог обновить вьюху и послать подтверждение о том, что он отобразил результат транзакции?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Dmitriy
На самом деле, с этим вообще нечасто заморачиваются. Приведу пример. Когда Steam подвисает, в нём можно случайно покупку какой-нибудь карточки и т.п. совершить спокойно несколько раз, даже не зная об этом. Получаешь ошибку, а покупка уже по факту прошла
бывает круче. когда работал в банке, в карточном отделе, когда отказал Front (авторизационная система), то при снятии денег с карточки доступный баланс не снижался.
во время такой аварии несколько умников наснимали в несколько раз больше доступного остатка. правда вечером всё пришло в Backend и всех загнало в глубокий минус (eventually consistent система, ага). единственное, банк не взял штрафные за отрицательный баланс, т.к. их косяк был.
источник

D

Dmitriy in pgsql – PostgreSQL
Ð
кто хоть раз видел веб-систему, которая умеет делать роллбек в своем аплике, ели браузер не смог обновить вьюху и послать подтверждение о том, что он отобразил результат транзакции?
За почти 11 лет разработки я не видел ни разу)
источник

Ð

Ð in pgsql – PostgreSQL
Victor Yegorov
бывает круче. когда работал в банке, в карточном отделе, когда отказал Front (авторизационная система), то при снятии денег с карточки доступный баланс не снижался.
во время такой аварии несколько умников наснимали в несколько раз больше доступного остатка. правда вечером всё пришло в Backend и всех загнало в глубокий минус (eventually consistent система, ага). единственное, банк не взял штрафные за отрицательный баланс, т.к. их косяк был.
ну это совсем уж дичь, когда фронт кэширует и считает все сам, а транзакция не проверяется даже в базе
источник

D

Dmitriy in pgsql – PostgreSQL
Victor Yegorov
бывает круче. когда работал в банке, в карточном отделе, когда отказал Front (авторизационная система), то при снятии денег с карточки доступный баланс не снижался.
во время такой аварии несколько умников наснимали в несколько раз больше доступного остатка. правда вечером всё пришло в Backend и всех загнало в глубокий минус (eventually consistent система, ага). единственное, банк не взял штрафные за отрицательный баланс, т.к. их косяк был.
А  почему у них на БД какие-нибудь триггеры не висели?
источник

Ð

Ð in pgsql – PostgreSQL
Dmitriy
А  почему у них на БД какие-нибудь триггеры не висели?
фронт же проверял, там до бд не дошло даже, я бы хотел название банка узнать)
источник

VY

Victor Yegorov in pgsql – PostgreSQL
а тут вариантов ошибок много. можно случайно снять “on-hold” операции разблокировав суммы. можно случайно “повысить” доступный остаток.
источник

Ð

Ð in pgsql – PostgreSQL
а можно делать бл на фронте, и потом удивляться десинкам и гонкам
источник