я попросил этот вопрос на SO и было предложено спросить здесь, что имеет смысл.
Мне любопытны методы, используемые для создания системы, в которой обеспечение отсутствия потери данных является высшим приоритетом. В качестве упрощенного примера, что делает финансовое учреждение, чтобы гарантировать, что при переводе денег между счетами, когда они снимаются с одного счета, они без сомнения помещаются на другой счет. Я ищу не столько конкретные методы, как транзакции базы данных, сколько более крупные концепции архитектуры, например, как данные сохраняются, если сервер выходит из строя, или в очереди заканчивается место, или что-то еще.
Если бы кто-нибудь мог указать мне на книги или статьи, я был бы очень признателен.
Выполняется тщательное планирование, и на каждом этапе создается избыточность, чтобы данных никогда не было много. Используются избыточные массивы хранения, поэтому в случае отказа одного массива данные по-прежнему сохраняются в другом. Для баз данных используются резервные серверы, поэтому в случае сбоя сервера или его перезагрузки база данных становится доступной в течение нескольких секунд.
Помимо локальной избыточности, весь центр обработки данных будет затем дублирован в другой центр обработки данных, так что, если весь центр обработки данных будет потерян, все данные по-прежнему будут доступны, чтобы компания и ее клиенты могли продолжать работать.
Для таких вещей, как денежные переводы, которые все обрабатываются через транзакции базы данных, и распределенные транзакции в случае, если задействовано несколько серверов.
Что касается дискового пространства и тому подобного, сигналы тревоги устанавливаются так, что задолго до того, как очередь должна была заполниться, сигнал тревоги срабатывал, чтобы люди могли понять, почему оно заполняется, а затем либо добавить больше места, если заполнение является законным, или исправить то, что когда-либо прекращало обработку данных.