制作一个需要扩展的网站需要啥?
Posted
技术标签:
【中文标题】制作一个需要扩展的网站需要啥?【英文标题】:What goes in to making a web site that needs to scale?制作一个需要扩展的网站需要什么? 【发布时间】:2011-02-26 02:59:21 【问题描述】:我正计划构建一个会获得大量流量的应用程序。 (请不要说我不会得到流量,这是针对内部网络的,所以流量会在那里。只是尽量避免'你不会得到那么多流量,别担心。)
至于我期待什么类型的流量,用户会浏览各种动态创建的(基于用户帐户详细信息)。在这些站点上,用户可以提交文本输入。加载页面和处理用户输入都会影响数据库。负载显然是读取,但处理输入将需要读取和写入。输入也可能影响其他用户的视图。如果发生这种情况,我需要通知其他用户刷新页面。
我需要做哪些事情才不会在大量用户的负载下简单地崩溃?
什么成为限制因素?数据库的东西?带前端的 I/O?
我以前从未真正开发过真正的网络应用程序,现在正在寻求帮助。
编辑:我正在考虑使用 Erlang 作为后端,因为我已经使用了一点,并且非常喜欢所有并发的东西。这是一个可行的选择还是我应该尝试更传统的方式?
【问题讨论】:
请参阅highscalability.com -- 非常有趣的文章,正是您的主题。尤其是现实生活中的案例和解释(虽然很简洁)值得阅读。 请详细说明您期望的流量类型。是否会有大文件上传/下载?它会是互动的吗?它会成为该网络中的主要应用程序之一吗?或者只是每天点击几次并查看静态页面? 属于 ServerFault,我想。 【参考方案1】:这是一个非常大的话题,您可能希望在时间允许的情况下进行尽可能多的研究。有几个大主题需要考虑。
会话状态存储。显然,会话存储会占用内存或磁盘空间。您需要制定一种策略来正确存储会话信息,并且以可供网络场使用的方式使用。
缓存。强大的缓存策略可以显着减少负载。对应该缓存的时间、内容和位置进行大量研究。
可扩展性和负载测试。必须对每个资源获取操作进行额外的考虑,以确保它被执行的次数尽可能少。如果您使用好的工具,负载测试和代码分析可以帮助识别这里的瓶颈。
数据库优化。确保您了解如何正确优化数据库以实现每分钟数千(数百万?)次操作。如果您的应用程序的写入量很大,您可能需要考虑存储不再需要包含在索引中的旧数据以加快写入操作。
升级路径。您的流量会随着时间的推移而增加吗?请务必了解在需要时如何为应用程序插入更多服务器和内存,以及需要什么。
您可以投资很多书,这些书可能会带来丰厚的回报。在 amazon 或章节中搜索“构建可扩展的 Web 应用程序”,您可能会发现很多文本可供阅读,包括特定于技术的和不可知论的。
【讨论】:
谢谢!这提供了一些值得一看的东西。 如果您使用 ASP.Net 或 ASP.Net MVC 作为您的技术堆栈,MSDN 网站上有很多文章可以帮助您开始了解这些技术的所有这些概念。 关于#2 的一个好技巧是在可能的情况下使用缓存代理,例如清漆或鱿鱼。这可以显着减少应用服务器的负载,因为它们不必为每个访问者重新生成页面。【参考方案2】:除了这里提到的所有其他内容之外,您还应该查看流量的时间。随着时间的推移,它是否相对恒定?或者它是突发性的,您会在短时间内获得更多的流量?
总的来说,您需要设计一个能够优雅地处理峰值负载的系统(尽管不一定处于理想的性能水平)。如果您的流量非常突发,那么与逐渐获得相同数量的流量相比,您将不得不付出更多的努力来扩大规模。
【讨论】:
【参考方案3】:就 Erlang 而言:它听起来是一种可以接受的好语言(基于我对它的了解很少),但它肯定不是一个可以为您提供可扩展性的魔杖。有许多不同的因素和产品需要考虑。语言选择只是其中之一......而且可能是最不重要的之一。
你可能会更好地使用你已经知道的东西并学习如何使其扩展,而不是使用新的/未知的技术并希望它适合你。
【讨论】:
嗯,我主要来自嵌入式或系统级 C 背景,所以我几乎可以从任何地方开始。我喜欢看 Erlang,因为它是一种函数式语言,还因为它吹捧的高并发方面。【参考方案4】:后端存储、数据库处理、前端动态内容和缓存是一回事。另一个是考虑您的主机服务提供商和可用的网络带宽。
与您的托管服务商核实其带宽上限、每个请求的最大内存分配、最大文件上传大小和最大数据库查询数。如果您当前的主机不提供符合您的扩展要求的廉价服务,那么请在您因超出分配的带宽而被关闭或因每月三位数的账单而措手不及之前转移到另一台主机。
编辑:只需重新阅读并抓住您的“内部网络”参考。因此,在这种情况下,您的网络管理员可能不会被数百美元的账单困住,但他们仍然可以让您关闭。确保与您的网络管理员和您自己的站点与之交互的任何其他服务的管理员保持沟通渠道畅通,否则您可能很快就会与他们为敌。换句话说:良好的网络礼仪。
此外,如果您实际拥有并构建服务器,请确保操作系统、软件堆栈和硬件都是最新的,只有稳定的软件和固件版本,能够处理负载,并受到监控以确保平稳运行次。
编辑 #2:我知道您专门询问了您的应用程序如何处理负载,我可能只是在这里咆哮题外话,但您还必须考虑您和您的团队伙伴是否可以处理负载。人力带宽同样重要,而因工作量而气馁是此类项目失败的原因。啤酒是程序员最好的朋友,尤其是在处理复杂和创造性的编程任务时,但如果人力管理不当或缺乏人力资源,它可能会导致严重的饮酒问题。谁会在凌晨 3 点回复停电通知?谁会回应来自宗教原教旨主义者或巨魔的仇恨邮件,或者翻阅法律和专利来验证删除通知是否是虚假的?除非它是可以支付账单的演出,否则大多数人可能无法投入大量时间和精力。我并不是要劝阻您,希望您已经了解了这一点。
【讨论】:
感谢您的建议。如果我们把它转移到互联网上(如果这个试点成功,最终可能会发生),我会记得调查一下。【参考方案5】:只是不要做超出你需要的事情。如果你坚持这一点,你可以处理大多数没有元博客效果的事情。
【讨论】:
以上是关于制作一个需要扩展的网站需要啥?的主要内容,如果未能解决你的问题,请参考以下文章