我想实现一个投票系统,其中包含存储在Amazon SimpleDB中的所有数据。前端也在Amazon EC2上运行。我主要担心的是服务费用。
投票系统需要防欺诈。也就是说,每个访问者每次选举只允许一票,而且没有用户帐户。我考虑过为每次投票存储一个SimpleDB项目以及它来自的ip地址。然后,如果没有该ip /选择对的条目,我只会插入一个新的投票。
然而,这在存储和处理方面听起来非常昂贵。我必须检索所有投票以统计它们以显示最新结果。
我考虑的另一个选择是存储投票,只是偶尔将它们相加并缓存结果。但这仍然需要我存储所有的选票。
你的建议是什么?
答案 0 :(得分:5)
让我们首先解决您的主要问题,费用。假设您的系统中有1 000 000票。每个投票由一个simpledb项表示,每个项包含三个属性,一个时间戳,实际投票和一个标识用户的唯一值(我将在稍后介绍该部分)。
现在,simpledb overview page为我们提供了一种计算项目实际存储空间大小的简单方法。
Amazon SimpleDB测量的大小 通过添加原始数据来计算您的可计费数据 您上传的数据的字节大小+ 45 每个项目的开销字节数, 属性名称和属性值 对
如果您决定包含更多数据,让我们计算一点空间,让我们说每个项目/投票将花费300字节的存储空间。您的数据的总存储大小将为~286mb。在免费等级限制内。然后是插入物品的成本,但这可能是微不足道的。有一个成本与计票相关联,但正如你已经建议缓存可以帮助缓解这一点。
我将这些数字投入到优秀的Amazon Simple Monthly Calculator服务中以得到一个近似的数字,每1GB存储器获得〜$ 4 /月,1M put,250k获得和100k选择。现在,根据我的经验,事先估计使用情况非常困难,因此您必须随时关注我们的使用情况。 amazon提供的使用情况报告包含有关请求的详细信息,您可以使用它来查看模拟真实世界使用应用程序的效果。
现在,防欺诈部分。我很难评估您正在寻找的欺诈预防水平,但无论如何,如果没有用户帐户,您根本就没有防欺诈投票系统。即使您拥有帐户,也必须非常小心,以避免XSS和CSRF,以便恶意用户不会利用其他用户和他们的投票。
每个IP的限制投票存在许多问题。
甚至有可能用户在每个请求上都有不同的IP地址(!)
说到粘性会话,我们是 惊讶地发现有那些 极少数用户的IP地址 从请求到根本改变 请求。
如果您真的认真建立一个万无一失的在线投票系统,您将不得不通过某种形式的真实世界身份验证来查看用户帐户(即通过邮寄方式将验证码发送到用户注册的地址)。 / p>
最后,但并非最不重要。无论您的防欺诈机制如何软化,您都必须对数据进行定期审计,以便尽早发现意外的欺诈情况。