要实现可伸缩性,需遵循哪些规则?

时间:2011-04-28 16:10:26

标签: architecture scalability

客户经常坚持要确保我为他开发的任何网站都是为可扩展性和更快的性能而设计的。实际上,我想知道这究竟意味着什么。我该怎么做才能满足这个要求?我主要使用PHP / MySQL / AJAX构建Web应用程序。

5 个答案:

答案 0 :(得分:4)

无国籍!

(又名:没有分享)。

让我解释一下:为了让您的应用程序能够轻松处理更多流量,您需要能够轻松地投入更多“东西”(servlet / servers / processor / handles / responders确切的术语由您使用的技术决定) 。为了实现这一点,这些servlet不能假设它们总是会看到来自同一用户的请求(当你有许多相同的servlet时,给定的请求最终会出现在每个servlet中)。因此,servlet不能“记住”先前请求中的某些内容。与当前请求有关的所有数据都应该是请求本身的一部分。

答案 1 :(得分:1)

构建应用程序,使其适用于跨多个服务器甚至多个站点的负载平衡。我不确定PHP的预防措施是什么;对于基于Java的应用程序,这意味着严格遵循企业环境准则。

答案 2 :(得分:1)

关键是每个请求都需要拥有服务请求所需的所有信息,并且资源/响应可以缓存。

http://en.wikipedia.org/wiki/Representational_State_Transfer

答案 3 :(得分:1)

可伸缩性意味着当您的服务器上有更多的用户请求时,您的Web应用程序的行为方式。大多数情况下,您运行的基本测试可能无法告诉您Web应用程序将面临的现实。因此,请测试您的应用程序在正常和更大范围内的性能。 很少有可能帮助你扩大规模的事情是: 1.尽量减少阻止代码的点数。 2.使用memoization(缓存代理)进行昂贵的计算,如果可能的话,可以查找而不是重新计算。 3.如有必要,使用客户端缓存。 (例如,这可以在flex,actionscript apps中实现) 4.优化核心功能以处理更大的输入。

可扩展性也可能与硬件,db存储处理大输入的能力有关。

答案 4 :(得分:1)

正如Itay所指出的那样,无国籍状态是巨大的。计划尽可能缩小OUT而不是UP。松散耦合也有助于缓冲可扩展性的路径。适当时使用并行性,无论是跨服务器并行执行,还是在单个进程或服务中进行多线程处理。避免在数据库服务器上投入太多工作。考虑分区/分片策略。尽可能使用缓存。

另请注意:可扩展性!=可用性。如果可用性存在问题,还有其他问题需要解决。

还有一点需要注意:仪表!仪器/可配置记录/可配置跟踪一切!如果您无法获得有关系统行为的详细信息,则扩展会变得更加困难和昂贵。现在,这并不意味着运行输入/离开跟踪代码来运行您的生产系统,但它确实意味着确保您没有任何空白,并在找到它们时解决它们,否则您将追逐您的尾巴和解决错误的问题。

相关问题