Начал осмысливать микросервисы и быстро стало ясно, что есть шаблон, который повторяется.
Есть два субъекта. Допустим, я и мой банк. Мне надо перевести деньги. Как сделать это надёжно, при условии, что у банка может упасть база, что моя программа клиент-банк может упасть, и что связь тоже может упасть.
Я нагуглил теорему CAP (латиницей), которая говорит, что вообще говоря, это можно сделать только ценой отсутствия гарантии обслуживания. Но это и не теорема, а так, наблюдение, да и мало ли что пишут в Википедии? Я уже не раз сталкивался с тем, что там пишут всякий бред.
Может кто-нибудь описать шаблон взаимодействия меня и банка и устройства базы, которая ценой отсутствия гарантии обслуживания гарантирует точность передачи? И как это может выглядеть?
В конечном итоге я хочу, чтобы было три знания.
- Известно, сколько денег у меня есть.
- Я знаю, что эти сведения у меня и у банка совпадают
- Банк знает, что эти сведения у меня и у банка совпадают
Для простоты представим для начала, что есть только один канал связи между мной и банком, который либо работает, либо не работает, и что только я могу переводить деньги.
Даже в этом случае в конце любого алгоритма возникает порочный круг из «я знаю, что ты знаешь, что я знаю», который при отсутствии надёжного канала никогда не завершается.
Ясно, что я где-то туплю, но не понимаю, где.