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

Architecture 为了实现可伸缩性,需要遵循哪些规则?,architecture,scalability,Architecture,Scalability,一位客户经常坚持我要确保我为他开发的任何网站都是为可扩展性和更快的性能而设计的。我想知道这实际上意味着什么。我必须做些什么来满足这个要求?我主要使用PHP/MySQL/AJAX构建web应用。构建应用程序,使其适合跨多个服务器甚至多个站点进行负载平衡。我不确定PHP的预防措施是什么;对于基于Java的应用程序,这意味着严格遵守企业环境指南。无状态 (又名:不分享) 让我解释一下:为了让您的应用程序能够轻松地处理更多的流量,您需要能够轻松地添加更多的“东西”(servlet/server/proc

一位客户经常坚持我要确保我为他开发的任何网站都是为可扩展性和更快的性能而设计的。我想知道这实际上意味着什么。我必须做些什么来满足这个要求?我主要使用PHP/MySQL/AJAX构建web应用。

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

无状态

(又名:不分享)


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

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


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


可伸缩性还可能与硬件、数据库存储处理大输入的能力有关。

正如Itay所指出的,无状态是巨大的。尽可能扩大规模,而不是扩大规模。松耦合也促进和缓冲了可伸缩性。在适当的情况下采用并行,无论是跨服务器并行执行,还是单个进程或服务内的多线程。避免在数据库服务器上做太多工作。考虑分区/锐化策略。尽可能使用缓存

另请注意:可伸缩性!=可利用性如果可用性是一个问题,还有其他问题需要解决


还有一个注意事项:仪器!仪器/可配置日志/可配置跟踪一切!如果无法获得有关系统某个部分行为的详细信息,则扩展将变得更加困难和昂贵。现在,这并不意味着在运行enter/leave跟踪代码的情况下运行您的生产系统,但它确实意味着确保您没有任何差距,并在找到差距时加以解决,否则您将追根究底并修复错误的问题。

这些是性能优化,即使是单个用户也会受益。正如其他人和我所说,多用户的好处在于无状态。这允许为每个请求在节点之间进行负载平衡。我并不是说你说的事情不应该做,只是说应该做这些事情来回应分析。无状态是一种设计时考虑因素,在投入生产后不容易改变。问题是关于“…为可伸缩性而设计…”