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