【问题标题】:What's a good starting point to design an architecture with scalability in mind?设计具有可扩展性的架构的良好起点是什么?
【发布时间】:2012-03-09 09:39:03
【问题描述】:

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

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

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

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

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

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

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

你有什么建议?

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

我目前的想法是: - 从你知道的事情开始 - 尽可能简单 - 跟踪一切以发现瓶颈 - 向外扩展

因此,我部署同步还是异步并不重要,但我知道异步的性能要好得多,而且可以帮助我获得更好结果(从而降低成本)的每一件事都是可以评估的。

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

如果您需要更多信息,请告诉我,我会尽力给您答复。 谢谢。

【问题讨论】:

    标签: python node.js asynchronous scalability


    【解决方案1】:

    http://highscalability.com/ 是一个很好的资源。许多关于处理大型网络负载的有趣案例研究。

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

    【讨论】:

    • 感谢您的链接。我已经看到有不同的横向扩展方法(生成多个应用程序,其他人使用异步)。什么是最强大的?什么方法可以帮助我尽可能多地使用相同的硬件服务? (降低每位用户的成本)我已经在搜索 High Scalability,但如果您知道答案,那将会很有帮助。
    【解决方案2】:

    看看this excellent presentation 的可扩展性模式和方法。

    【讨论】:

      【解决方案3】:

      以下是一些基本准则:

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

      另外,请记住,这些方法并非排他性的。你应该为所有这些方法设计你的应用程序;但仅在需要时实施。

      看书The Art of Scalability 这本书是由与 eBay 和 Paypal 合作过的人编写的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 2014-08-07
        • 1970-01-01
        • 1970-01-01
        • 2017-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多