【问题标题】:program for optimal performance and scalability from the start?从一开始就实现最佳性能和可扩展性的程序?
【发布时间】:2009-06-07 05:23:15
【问题描述】:

关于stackoverflow的第一个问题。我以前没有运行高流量网站的经验,我认为自己介于新手和中级程序员之间....请温柔:)
我正在尝试制作一个社交网站,我最终希望它能够处理大量流量和用户。但是,我不知道这个概念是否可行,与将一些功能相同的草率代码放在一起相比,为可伸缩性编程需要做很多额外的工作。此外,由于我对高可伸缩性编程相对不了解,我发现自己做了很多研究,这进一步减慢了我的速度(highscalability.com 太棒了......我目前正在尝试找出离线队列)

我的问题是,我应该:
一)
1. 将一些次优但功能正常的代码放在一起(有些草率的代码、过多的数据库查询、没有缓存等)
2. 努力收集流量
3.重写和重构代码

或 B)
1. 充分研究可扩展设计并从头开始应用,因此我不必进行太多重组
2. 努力收集流量

感谢任何建议,谢谢。

【问题讨论】:

    标签: optimization scalability


    【解决方案1】:

    Web 开发是一个持续的过程。我们可能认为一开始我们就知道自己想要什么,但到我们到达那里时,它不可避免地会改变。

    我建议你从 37 Signals Crew 的书开始——Getting Real: http://gettingreal.37signals.com/

    混合 A 和 B。尝试获得良好的托管情况。想想你可以缓存的方式(memcache——很简单)。编写清晰的代码,但不要花太多时间...

    “尽早发布,经常发布”。

    --

    这是两个项目的故事。

    1. 在业余时间开发 - 一起破解 - 提前(并且经常)发布。它每月(在 5 个月内)增长到 15,000 名用户和 6,000,000 次观看。
    2. 以企业“全心全意”的心态发展。花了4个月,10+人,几万块钱。用户数达到 100 人左右。

    让智慧指引你...

    【讨论】:

    • 在读了一半的书之后(这本书出奇地免费),我将不得不接受这个答案。谢谢!
    【解决方案2】:

    我会选择选项 A。与提高性能相比,为网站带来流量要困难得多。如果您的想法是独一无二的,那么上市时间应该是您的主要目标。 http://highscalability.com/ 包含大量关于其他人如何解决可扩展性问题的好文章。

    【讨论】:

      【解决方案3】:

      花几周时间研究 Cal Henderson 的 Building Scalable Web Sites、Theo Schlossnagle 的 Scalable Internet Architectures,当然还有您已经找到的网站,Todd Hoff 的出色 highscalability.com。至少,您将了解 (A) 和 (B) 之间的权衡,并能够做出更好的决定。

      还花时间查看Amazon Web Services,尤其是他们的 EC2(弹性云计算)和 S3(简单存储系统)。我公司的一个团队刚刚在 Amazon 基础架构上部署了一个 Web 应用程序,这比尝试在他们自己的物理硬件上运行要简单得多。

      如果您仍处于早期构思阶段,并且只想制定您的想法并进行小型实验,那么 (A) 会很有效。但是,一旦您决定将小规模试验部署为完整产品,您绝对需要遵循 (B)。

      当您开始转换到 (B) 模式时,我建议您使用 AWS 来节省几乎所有在设置自己的基础设施方面的工作量和资本支出。使用您将节省的使用 AWS 的一些时间来彻底学习 (B) 并应用这些课程。然后,如果您成功了,您的可扩展架构将允许您根据需要租用任意数量的 AWS 机器小时。如果你没有成功,你会学到很多非常有用的东西,可以应用于你的下一个创业想法(或工作)。

      请记住,这也不是非此即彼的选择。一旦您了解了扩展背后的基本原则,您就可以从简单的路径 (B) 开始,同时可以放心地知道您将如何进行下一步。 Danga 在这些方面有一些非常有趣的presentations。看看this one,你会看到他们是如何从一台机器开始的,然后转移到一台应用服务器机器和一台数据库机器,再到三台应用服务器和一台数据库机器,等等。

      【讨论】:

      • 感谢您提供的丰富信息,否则我将无法找到这些信息(尤其是 danga 演示文稿。)虽然我可能不会事先阅读所有这些内容,但它们都是很好的资源,我会一定要去。
      【解决方案4】:

      你让它听起来像 A) 会导致草率、考虑不周的代码有效,但不能很好地扩展,并且几乎肯定需要重写 一旦你已经有了用户并且需要提供合理的正常运行时间。遇到交通拥堵后解决可能出现的问题听起来像是一场噩梦。

      我肯定会选择 B)。思考、研究和规划应用程序的架构,不仅是为了优化或性能,而且只是为了合理的整体设计,对于任何重要的软件应用程序来说都是绝对必要的。

      有一个普遍的神话,即过早优化是万恶之源。这绝对是错误的,尽管说不必要的优化是万恶之源会更准确。不要犯新手错误,在无关紧要的地方进行优化,这只会弄乱你的代码,但要花时间找出哪些优化确实重要。

      当 Twitter 意识到他们已经拥有流量后,他们做出了一些糟糕的数据库设计选择时,他们差点死掉。

      【讨论】:

      • Twitter 与 A 合作,它几乎要了他们的命。也许 B 确实扼杀了他们的竞争对手。
      • 可能。我猜这是第 22 条问题 - 要么快速获得流量,但无法处理它并可能因此而死,或者需要更长时间才能进入市场,并且可能在你获得任何流量之前因耗尽预算而死,或者被推特打败。可以说,Google 对他们的架构和可扩展性进行了长期而艰苦的思考,并且从长远来看仍然击败了其他市场。
      猜你喜欢
      • 2017-07-24
      • 2019-09-05
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      相关资源
      最近更新 更多