要遵循哪些规则来实现可扩展性?
Posted
技术标签:
【中文标题】要遵循哪些规则来实现可扩展性?【英文标题】:What are some rules to follow to allow scalability? 【发布时间】:2011-08-14 20:50:06 【问题描述】:客户经常坚持要我确保我为他开发的任何网站都旨在实现可扩展性和更快的性能。我想知道这实际上意味着什么,实际上。我需要做什么才能满足这个要求?我主要使用 php/mysql/AJAX 构建 Web 应用程序。
【问题讨论】:
【参考方案1】:无国籍!
(又名:什么都不分享)。
让我解释一下:为了让您的应用程序能够轻松处理更多流量,您需要能够轻松地投入更多“事物”(servlets/servers/processors/handles/responders 确切的术语由您使用的技术确定) .为此,这些 servlet 不能假定它们总是会看到来自同一用户的请求(当您有许多相同的 servlet 时,给定的请求可能最终出现在每个用户中)。因此,servlet 无法“记住”先前请求中的某些内容。与当前请求有关的所有数据都应该是请求本身的一部分。
【讨论】:
【参考方案2】:可扩展性意味着当更多数量的用户请求访问您的服务器时,您的网络应用程序将如何表现。大多数时候,您运行的基本测试可能无法告诉您 Web 应用程序将面临的现实。因此,在正常和更大的范围内测试您的应用程序的性能。 几件可以帮助您扩大规模的事情是: 1. 尽量减少代码中的阻塞点。 2. 使用记忆化(缓存代理)进行昂贵的计算,如果可能的话,可以查找而不是重新计算。 3. 必要时使用客户端缓存。 (例如,这在 flex、actionscript 应用程序中是可能的) 4. 优化您的核心功能以处理更大的输入。
可扩展性也可能与硬件、数据库存储处理大量输入的能力有关。
【讨论】:
这些是性能优化,即使是单个用户也会受益。正如其他几个人和我自己所说的那样,对多个用户有利的是无国籍状态。这允许对每个请求进行跨节点的负载平衡。我并不是说你所说的事情不应该做,只是应该做这些事情来响应分析。无状态是设计时的考虑因素,在您投入生产后不容易更改。问题是关于“......为可扩展性而设计......”【参考方案3】:构建您的应用,使其适合跨多个服务器甚至多个站点进行负载平衡。我不确定 PHP 的预防措施是什么;对于基于 Java 的应用程序,这意味着严格遵循企业环境指南。
【讨论】:
【参考方案4】:关键是每个请求都需要包含服务请求所需的所有信息,并且资源/响应是可缓存的。
http://en.wikipedia.org/wiki/Representational_State_Transfer
【讨论】:
【参考方案5】:正如 Itay 所说,无国籍是巨大的。计划尽可能扩大规模而不是扩大规模。松散耦合也促进和缓冲了可扩展性的路径。在适当的情况下使用并行性,无论是跨服务器并行执行,还是在单个进程或服务中使用多线程。避免在数据库服务器上投入过多的工作。考虑分区/分片策略。尽可能使用缓存。
另请注意:可扩展性!= 可用性。如果可用性是一个问题,还有其他问题需要解决。
另一个注意事项:仪表!仪器/可配置记录/可配置跟踪一切!如果您无法获得有关系统某部分行为的详细信息,那么扩展将变得更加困难且成本更高。现在,这并不意味着在运行输入/离开跟踪代码的情况下运行您的生产系统,但它确实意味着确保您没有任何间隙,并在找到它们时解决它们,否则您将追尾并修复错误的问题。
【讨论】:
以上是关于要遵循哪些规则来实现可扩展性?的主要内容,如果未能解决你的问题,请参考以下文章