Python 什么';设计一个考虑可伸缩性的体系结构是一个很好的起点?

Python 什么';设计一个考虑可伸缩性的体系结构是一个很好的起点?,python,node.js,asynchronous,scalability,Python,Node.js,Asynchronous,Scalability,我目前正准备开始设计一个新的应用程序。 该应用程序将允许用户插入一些数据,并将提供数据分析(以及报告),我知道这是没有帮助的,但数据处理将在后处理中完成,因此前端并不真正感兴趣 当需要扩展以处理更多用户时,我想从正确的路径开始帮助自己 我正在考虑使用PostgreSQL来存储数据,因为我已经使用过它,我也很喜欢它(如果NoSQL是一个不错的选择——因为并非所有的数据都需要关联——我喜欢Postgres的支持和社区,知道有一个大社区可以帮助我,我会感觉更好),MySQL(innodb)也是一个不错

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

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

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

我知道几种编程语言,但我的强项是Python、C/C++、Javascript

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

我已经开发了另一个大型项目,它教会了我很多关于并发性的知识,但是每个选择都受到系统管理技能的影响(整个团队的其他成员,但主要受系统管理技能的影响),所以我们使用了python(django)+uwsgi+nginx

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

你有什么建议

另外,我还必须记住,首先项目必须开始,所以我不能只考虑每个可能的设计,但我应该尽快开始编写代码:-)

我目前的想法是: -从你知道的事情开始 -尽可能简单 -跟踪所有内容以找到瓶颈 -扩大

所以不管我是部署sync还是async,这都无关紧要,但我知道async有更好的性能,而且每一件可以帮助我获得更好结果(从而降低成本)的事情都是可以评估的

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

如果你需要更多的信息,请让我知道,我会尝试给你一个答案。
谢谢。

这是一个很好的资源。许多关于处理大型web负载的有趣案例研究


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

看看可伸缩性模式和方法

以下是一些基本准则:

  • 尽可能多地使用异步进程。或者至少以可以转换为异步的方式进行设计
  • 设计流程,使其可以在不同的服务器上分离。这也是上面提到的。假设你有一个webapp,它有一些密集的过程。如果这个过程是异步的;然后,主Web服务器可以对作业进行排队,并完成任务。然后,一个独立的服务器可以选择作业并处理它。这样,您的主web服务器不会受到影响。但是,如果资源有限,您仍然可以在同一台服务器上运行后台进程(直到您有足够的客户端,然后您可以将其生成到不同的服务器)
  • 负载平衡设计。所以,如果你的应用程序使用会话,那么你应该考虑你将如何复制会话。您不必-您可以将用户发送到差异服务器,然后将所有后续请求转发到该服务器。但你还是要为它设计
  • 能够根据一些预定义的标准将负载路由到不同的服务器。例如:由于您的应用程序是SAAS应用程序,您可以决定某些客户端将转到Environment1,而某些其他客户端将转到Environment2。很多SAAS玩家都这样做。例如销售人员。 你不一定要从一开始就这么做,但有了这个能力,当时机成熟时,你的应用程序将大大扩展
  • 此外,请记住,这些方法不是排他性的。你应该为所有这些方法设计你的应用程序;但仅在需要时实施

    看看这本书
    这本书是由eBay&Paypal的同事们写的。

    谢谢你的链接。我看到有不同的扩展方法(生成多个应用程序,其他人使用异步)。最强大的是什么?什么样的方法可以帮助我尽可能多地使用相同的硬件为更多的用户服务?(降低每个用户的成本)我已经在搜索高可扩展性,但是如果你知道答案,那会很有帮助。