Почему банковские системы такие ненадежные?

Наверняка вы ведь с таким сталкивались. Пытаешься что-то оплатить в магазине, и как назло, не проходит платеж. Ждешь зарплату в пятницу, а она приходит в понедельник. Почему так? Тупые программисты не могут написать стабильную систему?

Есть такая штука - теорема CAP, базовое правило в системном дизайне. Если коротко - то информационная система может быть либо высокодоступной, либо согласованной, но не и то, и другое сразу.

Большая часть приложений могут так или иначе пожертвовать согласованностью данных. Условно говоря, когда вы выкладываете фотку в Инстаграме, эта фотка не обязательно должна немедленно появиться в лентах всех ваших подписчиков - задержка в условные 10 секунд, да даже в пару минут, вполне допустима. Таким образом, система временно находится в несогласованном состоянии - для одного инстанса сервиса публикаций ваш пост уже существует, а вот для остальных инстансов, равно как и для условного сервиса подписок - еще нет.

Проблема в том, что банковские системы не могут быть несогласованными. Просто представьте себе, что будет, если одна часть системы будет думать, что у вас на карте ещё 1000 долларов, а вторая - что уже 500, потому что 500 вы только что потратили, но данные не успели обновиться везде. Вы рискуете потратить деньги, которых у вас нет, потому что ваш запрос на перевод, скажем, 600 долларов на счёт продавца, по закону подлости улетит именно в первую часть системы - и всё пройдет успешно.

Обеспечение согласованности делает систему гораздо медленнее - ведь на каждом этапе изменения данных нужно обеспечить полную согласованность данных, а на это требуется время, т.к разные части системы распределены по разным серверам. В силу неудачного обстоятельств иногда нужно очень много времени. А иногда настолько много (или возникшие проблемы настолько серьезны), что транзакцию приходится откатывать. А это тоже не мгновенный процесс.

Именно поэтому нельзя сделать идеальное банковское приложение - невозможно создать систему, полностью устойчивую к сбоям, человеческому фактору, выходу железа из строя и природным катастрофам. А выдать ответ на запрос об изменении количества денег на счету «авансом» и как-нибудь обработать возникшие ошибки сам банк не может.