设计一个具有可扩展性的架构是一个很好的起点?

时间:2012-02-18 01:07:51

标签: python node.js asynchronous scalability

我目前正要开始设计一个新的应用程序。 该应用程序将允许用户插入一些数据并将提供数据分析(也包括报告),我知道它没有帮助,但数据处理将在后处理中完成,因此前端并不真正有趣。

当我需要扩展以处理更多用户时,我想从正确的道路开始帮助自己。

我正在考虑使用PostgreSQL存储数据,因为我已经使用它并且我喜欢它(如果NoSQL是一个不错的选择 - 因为并非所有数据都需要关系 - 我喜欢Postgres支持和社区,我感觉更好,知道有一个很大的社区来帮助我),MySQL(innodb)也是一个不错的选择,我没有真正的理由选择它而不是PostgreSQL,反之亦然(也许是MySQL更容易创建分片?)。

我知道几种编程语言,但我的优势是Python,C / C ++,Javascript。

我不确定是否应为此任务选择同步或异步方法(我可以通过在负载均衡器后面运行更多同步应用程序来扩展)。

我已经开发了另一个大型项目,向我讲解了很多关于并发性的事情,但每个选择都受到(团队的其余部分,但主要是)系统管理员技能的影响,所以我们有使用python(django)+ uwsgi + nginx。

对于这个项目(因为它与另一个完全不同 - 这是一个电子商务,这就是SaaS)我也在考虑使用node.js,这将是一个很好的机会来试用它在一个严肃的项目。 最重的数据处理将通过后处理完成,因此所有前端(用户网站)将主要是I / O(+1使用异步环境)。

你会建议什么?

PS。我还必须记住,首先必须启动项目,所以我不仅要考虑每个可能的设计,而且我应该尽快开始编写代码: - )

我目前的想法是:   - 从你知道的东西开始   - 保持尽可能简单   - 跟踪一切以找到瓶颈   - 向外扩展

因此,如果我部署同步或异步并不重要,但我知道async有更好的性能,每一件可以帮助我获得更好结果(降低成本)的东西也是可以评估的。

我很想知道你的经历是什么(还有其他技术)...... 我对这种可扩展性变得偏执,我担心它可能导致错误的设计(这也是我第一次单独为商业目的设计= FUD)

如果您需要更多信息,请告诉我,我会尝试给您一个答案。 感谢。

3 个答案:

答案 0 :(得分:1)

所有这一切的良好资源是http://highscalability.com/。关于处理大型网络负载的大量有趣案例研究。

您没有提到它,但您可能想要考虑在云中托管它(Azure,亚马逊等)。使硬件扩展更容易,如果您的需求波动,它会特别好。

答案 1 :(得分:0)

了解this excellent presentation关于可伸缩性模式和方法的故事。

答案 2 :(得分:0)

以下是一些基本准则:

  1. 尽可能多地使用同步过程。或者以至少可以将其转换为异步的方式进行设计。
  2. 设计流程,以便可以在不同的服务器上进行隔离。这也是如上所述。假设您有一个具有密集进程的Web应用程序。如果这个过程是异步的;然后主要的网络服务器可以排队工作并完成。然后一个单独的服务器可以选择该作业并进行处理。这样您的主Web服务器就不会受到影响。但是如果你受资源限制,你仍然可以在同一台服务器上运行后台进程(直到你有足够的客户端然后你可以将它产生到差异服务器上)。
  3. 负载均衡设计。因此,如果您的应用程序使用会话,那么您应该考虑如何复制会话。您不必 - 您可以将用户发送到差异。服务器然后将所有后续请求转发到该服务器。但你仍然需要为它设计。
  4. 能够根据某些预定义的标准将负载路由到不同的服务器。因此对于例如:由于您的应用程序是SAAS应用程序,您可以决定某些客户端将转到Environment1,而某些其他客户端将转到Environment2。很多SAAS玩家都这样做。例如Salesforce。 你不一定非必须这样做 - 但是当时机成熟时,拥有这种能力将有很长的路要走。
  5. 另外,请记住,这些方法并不是唯一的。你应该为所有这些方法设计你的应用程序;但只在需要时才实施。

    看看这本书The Art of Scalability 这本书是由与eBay& amp;贝宝。