我想实现一个投票系统,所有数据都存储在亚马逊SimpleDB中。前端也在亚马逊EC2上运行。我主要关心的是服务的成本。
投票系统需要防欺诈。也就是说,每个访问者在每次选举中只允许一次投票,并且没有用户帐户。我曾考虑为每一次投票存储一个SimpleDB项目以及它所来自的ip地址。然后,如果没有该ip/选举对的条目,我将只插入新的投票。
然而,就存储和处理而言,这听起来非常昂贵。我将不得不检索所有的选票来统计他们,以显示最新的结果。
我考虑过的另一个选择是存储投票,只是偶尔对它们进行汇总并缓存结果。但这仍然需要我存储所有的选票。
你的建议是什么?
发布于 2011-05-23 16:09:13
让我们首先解决您主要关心的成本问题。让我们假设您的系统中有1,000,000张选票。每个投票由一个simpledb项表示,每个项包含三个属性,一个时间戳、实际投票和一个标识用户的唯一值(稍后我将介绍这一部分)。
现在,simpledb overview page为我们提供了一种计算项目实际存储大小的简单方法。
亚马逊SimpleDB通过将您上传的数据的原始字节大小加上每个项目、属性名称和属性值对的45字节开销来衡量您的计费数据的大小。
让我们计算一下,以防你决定包含更多的数据,假设每一项/投票将花费你300字节的存储空间。那么您的数据的总存储大小将是~286mb。完全在免费级别的限制内。还有插入物品的成本,但这可能是可以忽略不计的。计票是有成本的,但正如您已经建议的那样,缓存可以帮助显着减轻这一问题。
我把这些数字放入优秀的Amazon Simple Monthly Calculator服务中,得到一个大概的数字,1 1GB的存储空间,1M的puts,250k的get和100k的选择,我得到了大约4美元/月。现在,根据我的经验,很难预先估计使用情况,所以你必须在进行的过程中密切关注我们的使用情况。amazon提供的使用情况报告包含有关请求的详细信息,您可以使用这些信息来查看应用程序的模拟真实使用情况的效果。
欺诈证明
现在,至于防欺诈部分。对我来说,评估你所寻找的防欺诈水平有点困难,但无论如何,如果没有用户账户,你就不会有一个防欺诈的投票系统。即使你有账户,你也必须非常小心地避免XSS和CSRF,这样恶意用户就不会利用其他用户和他们的投票。
限制每个IP的投票有许多问题。
甚至有可能用户在每个请求上都有不同的ip地址(!)
说到粘性会话,我们惊讶地发现,很少有用户的IP地址会随着请求的不同而发生根本的变化。
https://blog.stackoverflow.com/2009/07/
如果你真的想创建一个可靠的在线投票系统,你必须检查用户的账户,并进行一些真实的身份验证(例如,通过邮寄的方式将验证码发送到用户的注册地址)。
最后,但不是最不重要的。无论您的欺诈预防机制的软化程度如何,您都必须对您的数据执行常规审计,以便在早期发现意外的欺诈场景。
https://stackoverflow.com/questions/6091313
复制相似问题