|
|
|
| Предположим, есть онлайн-обменник. Для простоты: wmr на wmz.
Баланс wmz у скрипта обменника - 1000.
Приходит посетитель А, начинает менять... операция не завершена пока - процесс идет.
Приходит посетитель Б, начинает менять...
Оба уже находятся на страничке мерчанта вебмани.
Оба захотели получить 1000 wmz. Оба отдали нужную сумму и полетели на скрипт.
Скрипт первому оплатил 1000 wmz, второму не смог - нечем. Тем не менее, оба человека wmr отдали.
Как решаются подобные потенциальные проблемы? То есть, как избегать подобных ситуаций? | |
|
|
|
|
|
|
|
для: Shorr Kan
(07.02.2007 в 01:27)
| | Транзакциями. Транзакция - это последовательность SQL-инструкций, которая либо выполняется полностью, либо, если не выполняется, откатывается к состоянию, предшествующему началу транзакции. | |
|
|
|
|
|
|
|
для: cheops
(07.02.2007 в 01:42)
| | Так нет... люди независимо друг от друга пришли... оплатили... почти одновременно.
Скрипт тут не может ничего поделать - люди...
Они оплатили. Скрипт деньги получил. А отправить может только одному.
Разве тут транзакции sql как-то помогут? Тут вообще до sql дело не доходит. | |
|
|
|
|
|
|
|
для: Shorr Kan
(07.02.2007 в 02:10)
| | Значит, неправильно сделан скрипт. Он должен доходить до транзакции, и выполнять, только если сумма есть на счету. При этом сумма резервируется и в других операциях участвовать не может до окончания транзакции. | |
|
|
|
|
|
|
|
для: 12345
(07.02.2007 в 12:26)
| | Да вы поймите... скрипт обменника - это не скрипт платежной системы. Представьте - у человека включен кипер вебмани... ему пришел счет... он взял и не оплатил сразу... повременил.
Тем временем - другие люди активно меняют.
Через десять минут тот, первый бедолага оплачивает-таки счёт (заметьте, в кипере вебмани. На сайт обменника даже не смотрит), а скрипт в ответ послать ничего не может. Понимаете? | |
|
|
|
|
автор: 123 (22.05.2007 в 03:42) |
|
|
для: Shorr Kan
(08.02.2007 в 09:24)
| | оплату счёта ведь нужно подтвердить на сайте. и тогда придут деньги. | |
|
|
|
|
|
|
|
для: Shorr Kan
(07.02.2007 в 02:10)
| | Реально скрипт поделит текущий баланс на ограничение по обмену и выставит соответствующее ограничение по числу обслуживаемых сессий. Остальным просто напишет "подождите, пожалуйста" еще до начала операции. | |
|
|
|
|
|
|
|
для: Trianon
(07.02.2007 в 12:42)
| | Trianon, спасибо, видимо так и есть. | |
|
|
|