我正在googleappengine上做一个小项目,试图实现一个允许参与者买卖假货的网站,类似于股票市场,系统会实时显示买卖价差。你知道吗
举个简单的例子:
- 卖家下订单以8.00的价格出售10盒(订单1)
- 买方下订单购买5箱,价格不超过9.00(订单2)
下第二个订单时,系统将需要执行多个任务,所有这些任务都取决于所有任务是否成功完成。你知道吗
- 从买方处获得支付箱子的资金(8.00 x 5)并将其交给卖方
- 从卖方处取出盒子(5)交给买方
- 将订单更新为“完成”(OID 2)或更新为“部分已满”(OID 1),以便它们不能重复匹配
- 向每个参与者收取费用并将其添加到系统帐户中
如果我所需要的是把资金从一个参与者转移到另一个参与者,即使系统在中间失败,我也可以安全地做到这一点。但是要确保上面所有的任务都正确完成,并且在其中任何一个任务失败时回滚,在appengine中似乎过于复杂了。你知道吗
此外,我的“订单簿”和订单匹配引擎现在是单线程的(使用互斥锁进行锁定)。这似乎违背了使用appengine的全部要点,但我不确定我是否能找到解决方法。你知道吗
所以(最后)-我的问题是:
- 使用appengine时有多个步骤都依赖于每个步骤是否正确完成,是否有最佳实践?你知道吗
- 有没有人对如何允许订单是多线程的,或者如果它仍然是单线程的有什么建议?有没有一个最佳实践,就是在网站扩展时不要让这个核心部分阻碍网站的使用?我曾考虑过使用任务对订单添加/更新/取消进行排队,以便将书本与直接参与者输入分开。你知道吗
谢谢你,我期待你的帮助!你知道吗
Tags:
我认为如果你能对一种商品的订单排序,那么你就可以离线清除订单。所谓“下线”,我的意思是你可以在一天结束时来找我,告诉我订单的顺序,我可以告诉你发生了哪些交易。一个障碍是,如果买家没有资金,而交易本应结清怎么办?您可以通过两种方式解决此问题:
正如您所建议的,您可能需要跨实体的集团交易,以确保资金转移是正确的(即既不创建也不销毁资金)。你知道吗
您可以按时间排序订单(例如,paced\u at=db.DateTimeProperty属性(auto\u now\u add=True))。如果两个订单有相同的时间,那么使用一些东西(最好是公平和确定的东西)来打破僵局。在这里,数字id的散列(为了公平)(为了决定论)可能不是一个坏的选择。你知道吗
appengine本质上是多线程的,因为一个App可以有许多并发实例(但实例不一定是同一进程中的线程)。实例是自动创建的,目前无法将实例数限制为1。如果应用程序的状态是在数据存储中(而不是本地内存、memecache或其他地方),并且事务是正确的,那么应用程序将是“免费”多线程的。当然,你的交易是正确的不是微不足道的。你知道吗
另一个要记住的工具是任务可以是事务性的。如果您想使用任务进行脱机图书清除,这可能很有用。你知道吗
对于其他偶然发现这一点的人-
在谷歌应用程序引擎中,似乎可以进行跨组交易:
https://developers.google.com/appengine/docs/python/datastore/transactions#Using_Cross_Group_Transactions
这意味着您可以在单个事务中同时读取、执行逻辑,然后一次写入多个实体。你知道吗
我相信这解决了我在问题中提出的第一个问题。你知道吗
第二个问题-有没有办法让订单簿不是单线程的,仍然是开放的。你知道吗
谢谢你!你知道吗
相关问题 更多 >
编程相关推荐