我目前正要开始设计一个新的应用程序。 该应用程序将允许用户插入一些数据并将提供数据分析(也包括报告),我知道它没有帮助,但数据处理将在后处理中完成,因此前端并不真正有趣。
当我需要扩展以处理更多用户时,我想从正确的道路开始帮助自己。
我正在考虑使用PostgreSQL存储数据,因为我已经使用它并且我喜欢它(如果NoSQL是一个不错的选择 - 因为并非所有数据都需要关系 - 我喜欢Postgres支持和社区,我感觉更好,知道有一个很大的社区来帮助我),MySQL(innodb)也是一个不错的选择,我没有真正的理由选择它而不是PostgreSQL,反之亦然(也许是MySQL更容易创建分片?)。
我知道几种编程语言,但我的优势是Python,C / C ++,Javascript。
我不确定是否应为此任务选择同步或异步方法(我可以通过在负载均衡器后面运行更多同步应用程序来扩展)。
我已经开发了另一个大型项目,向我讲解了很多关于并发性的事情,但每个选择都受到(团队的其余部分,但主要是)系统管理员技能的影响,所以我们有使用python(django)+ uwsgi + nginx。
对于这个项目(因为它与另一个完全不同 - 这是一个电子商务,这就是SaaS)我也在考虑使用node.js,这将是一个很好的机会来试用它在一个严肃的项目。 最重的数据处理将通过后处理完成,因此所有前端(用户网站)将主要是I / O(+1使用异步环境)。
你会建议什么?
PS。我还必须记住,首先必须启动项目,所以我不仅要考虑每个可能的设计,而且我应该尽快开始编写代码: - )
我目前的想法是: - 从你知道的东西开始 - 保持尽可能简单 - 跟踪一切以找到瓶颈 - 向外扩展
因此,如果我部署同步或异步并不重要,但我知道async有更好的性能,每一件可以帮助我获得更好结果(降低成本)的东西也是可以评估的。
我很想知道你的经历是什么(还有其他技术)...... 我对这种可扩展性变得偏执,我担心它可能导致错误的设计(这也是我第一次单独为商业目的设计= FUD)
如果您需要更多信息,请告诉我,我会尝试给您一个答案。 感谢。
答案 0 :(得分:1)
所有这一切的良好资源是http://highscalability.com/。关于处理大型网络负载的大量有趣案例研究。
您没有提到它,但您可能想要考虑在云中托管它(Azure,亚马逊等)。使硬件扩展更容易,如果您的需求波动,它会特别好。
答案 1 :(得分:0)
了解this excellent presentation关于可伸缩性模式和方法的故事。
答案 2 :(得分:0)
以下是一些基本准则:
另外,请记住,这些方法并不是唯一的。你应该为所有这些方法设计你的应用程序;但只在需要时才实施。
看看这本书The Art of Scalability 这本书是由与eBay& amp;贝宝。