从一开始就实现最佳性能和可扩展性的程序?

时间:2009-06-07 05:23:16

标签: optimization scalability

有关stackoverflow的第一个问题。我之前没有运行高流量网站的经验,我认为自己介于新手和中级程序员之间....请温柔:) 我正在努力创建一个社交网站,我最终希望能够处理大量的流量和用户。但是,我不知道这个概念是否会飞,编程的可伸缩性是一个额外的工作,而不是将一些草率的代码放在一起,功能相同。另外,由于我对高可扩展性的编程相对不了解,我发现自己做了很多研究,这进一步减慢了我的速度(highscalability.com令人惊讶......我正在试图找出离线队列)< / p>

我的问题是,我应该: A)
1.汇总一些次优但功能齐全的代码(有些草率的代码,过多的数据库查询,没有缓存等)
2.收集交通的工作
3.重写和重组代码

或 B)
1.从一开始就充分研究可扩展的设计并应用,所以我不需要进行太多的重组 2.收集交通工作

感谢您的任何建议,谢谢。

4 个答案:

答案 0 :(得分:4)

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

我建议您首先阅读37 Signals Crew - Getting Real: http://gettingreal.37signals.com/

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

“早发布,经常发布”。

-

这是两个项目的故事。

  1. 开发时间 - 一起黑客攻击 - 早期(经常)发布。它每月增长到15,000个用户和6,000,000次观看(5个月内)。
  2. 以企业“尽力而为 - 正确”的心态发展。花了4个月,10多人,数万美元。它达到了约100个用户的最高点。
  3. 让智慧引导你......

答案 1 :(得分:3)

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

答案 2 :(得分:2)

花了几个星期的时间学习Cal Henderson的Building Scalable Web Sites,Theo Schlossnagle的Scalable Internet Architectures,当然还有你已经找到的网站,Todd Hoff的优秀highscalability.com。至少你会理解(A)和(B)之间的权衡,并能够做出更好的决定。

还花时间查看Amazon Web Services,特别是他们的EC2(弹性云计算)和S3(简单存储系统)。我公司的一个小组刚刚在亚马逊基础架构上部署了一个Web应用程序,它比在自己的物理硬件上运行它简单得多。

如果您仍处于早期构思阶段,只想制定自己的想法并进行小型实验,(A)会很好。但是,一旦您决定要部署小规模试验以进入全面产品,您绝对需要遵循(B)。

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

请记住,这也不是一个或两个选择。一旦你理解了缩放背后的基本原理,你就可以通过简单的方式沿着路径(B)开始,同时让你知道如何进入下一步。 Danga沿着这些方向有一些非常有趣的presentations。看看this one,您将看到他们如何从一台机器开始,转移到应用服务器机器和数据库机器,转移到三台应用服务器和数据库机器等等。

答案 3 :(得分:1)

你让它听起来像A)会导致草率的,经过深思熟虑的代码有效,但不能很好地扩展,并且几乎肯定需要重写一旦你已经拥有用户并且需要提供合理的正常运行时间。一旦你已经拥有交通听起来就像是一场噩梦,修复了有用的问题。

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

有一个普遍的说法,即过早优化是万恶之源。这绝对是错误的,尽管说不必要的优化是所有邪恶的根源会更准确。不要让新手错误地优化它无关紧要的地方,这只会弄乱你的代码,但是要花时间找出哪些优化很重要。

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