Я работаю над небольшим проектом в Google App Engine, пытаясь реализовать сайт, который позволяет участникам покупать и продавать поддельные товары, подобно фондовому рынку, где система покажет спреды BID/ASK в режиме реального времени.Как реализовать масштабируемое и безопасное обновление типа банка/кросс-кода
Как простой пример:
- А места продавца и для того, чтобы продать 10 Коробки для 8,00 (Order 1)
- А Покупатель места, то заказ на покупку 5 коробок до 9,00 (порядка 2)
При размещении второго заказа системе необходимо выполнить несколько задач, все из которых будут выполняться успешно.
- Возьмите средства (8,00 х 5) для оплаты коробок от покупателя и дать им Продавцу
- Возьмите ящики (5) от Продавца и дать им обновления Покупатель
- заказы в комплекте (OID 2) или обновления, частично заполненный (OID 1), так что они не могут быть в два раза соответствует
- Возьмите плату от каждого из участников и добавить его к учетной записи системы
Если все что мне нужно было перевести средства из одного участник в другой, я могу сделать это безопасно, даже если система будет терпеть неудачу посередине. Но чтобы гарантировать, что все вышеописанные задачи будут выполнены правильно, и откаты, если какой-либо из них потерпит неудачу, кажется слишком сложным в App Engine.
Кроме того, моя «Книга заказов» и механизм согласования заказов теперь имеют одну резьбу (с использованием взаимных блокировок для блокировки). Это, похоже, противоречит целям использования App Engine, но я не уверен, что вижу способ вокруг него.
So (наконец) - Мои вопросы:
- Есть ли лучшая практика при использовании App Engine, где есть несколько шагов, которые все зависят от каждого шага завершающего правильно?
- Есть ли у кого-нибудь какие-либо предложения, как сделать так, чтобы книга заказов была многопоточной, или если она остается однопоточной - есть ли наилучшая практика, чтобы этот блок ядра не использовал использование сайта, поскольку он масштабируется ? Я подумал о том, чтобы использовать задачи для очереди в порядке добавления/обновления/отмены, чтобы сохранить книгу отдельно от прямого ввода участника.
Благодарим вас, я с нетерпением жду вашей помощи!
Также, чтобы уточнить - мое понимание транзакций в App Engine заключается в том, что они ограничены одной группой сущностей, но, может быть, я ошибаюсь, и просто выполнение вышеуказанного в транзакции - это все, что мне нужно? –
Я бы прочитал эту статью Ником Джонсоном http://blog.notdot.net/2009/9/Distributed-Transactions-on-App-Engine –
Спасибо Тим - на самом деле именно так у меня есть транзакции, реализованные до сих пор , Это гарантирует, что односторонняя торговля либо сразу сбой, либо, в конечном счете, будет успешной, и она сделает это идемпотентно. Но для этого проекта мне нужен способ гарантировать, что двусторонняя торговля потерпит неудачу за один шаг или всегда в конечном итоге удастся в дополнение к маркировке выполненных заказов, чтобы они не могли быть куплены или проданы по-разному. –