我打算构建一个可以获得大量流量的应用程序。 (请不要说我不会获得流量,这是针对内部网络的,所以流量会在那里。只是试图避免'你不会得到那么多的流量,不要担心它。)
至于我期望的流量类型,用户将浏览各种动态创建的(基于用户帐户详细信息)。在这些网站上,用户可以提交文本输入。加载页面和处理用户输入都将命中数据库。负载显然是读取,但处理输入将需要读取和读取。写道。输入也可能影响其他用户的视图。如果发生这种情况,我需要通知其他用户刷新页面。
我需要做哪些事情才能在大量用户的负担下崩溃?
什么成为限制因素?数据库东西?前端的I / O?
我以前从未真正开发过严肃的网络应用程序,并且正在寻求帮助。
编辑:我正在考虑使用Erlang作为后端,因为我已经使用了它,并且非常喜欢所有的并发内容。这是一个可行的选择还是我应该尝试更传统的东西?答案 0 :(得分:17)
这是一个非常大的话题,您可能希望尽可能多地进行研究。有几个重要的主题需要考虑。
会话状态存储。显然,会话存储占用内存或磁盘空间。您需要有一个策略来正确地存储会话信息,并且可以由Web场使用。
缓存。强大的缓存策略可以显着降低负载。关于何时,何地以及应该缓存的地方进行大量研究。
可扩展性和负载测试。额外的想法必须进入每个资源获取操作,以确保它根据需要完成几次。如果您使用好的工具,负载测试和代码分析可以帮助识别瓶颈。
数据库优化。确保您了解如何针对每分钟数千(数百万?)的操作正确优化数据库。如果您的应用程序是大量写入的,您可能需要查看仓库中不再需要包含在索引中的旧数据,以加快您的写入操作。
升级路径。您的流量会随着时间推移而增加吗?一定要了解如何在需要的时候为应用程序插入更多服务器和内存,以及需要什么。
你可以投资的书很多,可能会带来丰厚的回报。在亚马逊或章节中搜索“构建可扩展的Web应用程序”,您可能会发现许多文本,包括技术特定和不可知。
答案 1 :(得分:1)
除了此处提到的所有内容外,您还应该查看流量的时间。随着时间的推移它是否相对恒定或者它会爆发,你会在短时间内获得更高的流量?
总的来说,您需要设计一个能够优雅地处理峰值负载的系统(尽管不一定处于理想的性能水平)。如果您的流量非常大,那么您将不得不投入更多精力来扩展它,而不是逐渐获得相同数量的流量。
答案 2 :(得分:1)
就Erlang而言:它听起来像一个可接受的好语言(基于我所了解的很少),但它肯定不是一个魔术棒,可以提供可扩展性。需要考虑几十种不同的因素和产品。语言选择只是其中之一......而且可能是最不重要的选择之一。
你最好还是选择你已经知道的东西。学习如何使它扩展,而不是去一个新的/未知的技术,并希望它为你扩展。
答案 3 :(得分:1)
后端存储,数据库处理,前端动态内容和缓存是一回事。另一个是考虑您的主机服务提供商和可用的网络带宽。
检查您的托管服务的带宽上限,每个请求的最大内存分配,最大文件上载大小和最大数据库查询。如果您当前的主机没有提供符合您的扩展要求的廉价服务,那么在您关闭之前移动到另一台主机,或者通过三位数的月度账单来获取超出您的分配带宽。
编辑:只需重新阅读并抓住您的“内部网络”参考。因此,在这种情况下,您的网络管理员可能不会被数百美元的账单困住,但他们仍然会让您失意。确保与您的网站管理员和您自己网站与之交互的任何其他服务的管理员保持沟通渠道,或者您可能很快就会对他们产生敌意。换句话说:良好的网络礼仪。
此外,如果您实际拥有并构建服务器,请确保操作系统,软件堆栈和硬件都是最新的,只有稳定的软件和固件版本,能够处理负载,并且监控运行平稳次。
编辑#2:我知道你具体询问了你的应用程序如何处理负载,我可能只是在这里偏离主题,但你还必须考虑你和你的队友是否可以处理负载。人力带宽同样重要,而工作负载让人气馁的是这样的项目如何失败。啤酒是程序员最好的朋友,特别是在处理复杂和创造性的编程任务时,如果没有正确管理人力资源或缺乏人力资源,啤酒会导致严重的饮酒问题。谁将在凌晨3点回复停电通知?谁会回应宗教原教旨主义者或巨魔的仇恨邮件,或者通过法律和专利来验证该撤销通知是否是虚假的?除非这是一个可以支付账单的演出,否则大多数人可能不会投入大量的时间和精力。我并不是故意劝阻你,希望你已经把它覆盖了。
答案 4 :(得分:0)
只是做不到你需要做的事。如果坚持这一点,你可以处理大部分没有代谢日效应的事情。