Design patterns 管理访客数量

Design patterns 管理访客数量,design-patterns,web-applications,Design Patterns,Web Applications,在这里,人们非常关注web应用程序的设计,但在所有这些讨论中,我似乎遗漏了一些东西。似乎每个人都在关注自己网站的设计,以允许越来越多的访问者访问,从而给服务器带来巨大的压力。但是如果有人只是为朋友和家人设计一个网站呢?或者只是一个内部网站,只为一家公司的500名员工服务?虽然都是网页设计,但谷歌搜索或StackOverflow等网站的设计与www.geocities.com\alex\myfamilyhistory.html或类似网站的设计仍存在巨大差异。(哇,我记得地球城。我一定老了!) 因此

在这里,人们非常关注web应用程序的设计,但在所有这些讨论中,我似乎遗漏了一些东西。似乎每个人都在关注自己网站的设计,以允许越来越多的访问者访问,从而给服务器带来巨大的压力。但是如果有人只是为朋友和家人设计一个网站呢?或者只是一个内部网站,只为一家公司的500名员工服务?虽然都是网页设计,但谷歌搜索或StackOverflow等网站的设计与www.geocities.com\alex\myfamilyhistory.html或类似网站的设计仍存在巨大差异。(哇,我记得地球城。我一定老了!)

因此,我的问题很简单:在设计一个新网站时,每天管理50名访问者、5000名访问者和50万名访问者之间最重要的区别是什么


(好吧,硬件方面,只需添加更多服务器。但我在这里只关注软件设计!)

软件方面,您应该始终仔细考虑您的设计和架构,不要用任何抽象的访问限制来限制自己

使用众所周知的最佳实践。避免昂贵的字符串操作。创建一个合适的数据库模式。在适当的地方放置索引和聚集索引。避免基于无人会注意到的安慰的快速攻击,因为你还没有那么多访客


到时候,你会发现你只需要获得更多的硬件,而不是完全重写你的应用程序。

从软件角度看,你应该始终考虑你的设计和体系结构,不要用任何抽象的访问限制来限制你自己

使用众所周知的最佳实践。避免昂贵的字符串操作。创建一个合适的数据库模式。在适当的地方放置索引和聚集索引。避免基于无人会注意到的安慰的快速攻击,因为你还没有那么多访客


到时候,你会发现你只需要获得更多的硬件,而不是完全重写你的应用程序。

有许多设计模式永远不会在用户数或请求数较少的应用程序中使用,其中大多数模式都与负载分配相关

例如,负载分布的设计模式之一是将数据放在集群(树结构)服务器中。每个请求都被定向到一个服务器,该服务器反过来表示该用户的数据位于给定的集群中。它本身没有数据,只是将用户重定向到第二个集群级别

第二个集群级别(或第一个树级别)的服务器可以拥有数据(或部分数据),或者可以将用户重定向到第三个集群级别。同样的事情会一直持续下去,直到请求到达一个已经拥有用户数据的服务器,所以会生成响应并发送回用户


这种设计模式(有时称为路由)是一个场景示例,除非您有一个具有大量请求的应用程序,否则您永远不会使用它。例如,gmail使用这种设计,gmail web界面的最后一次失败是因为路由服务器的请求过载。

有许多设计模式永远不会在用户或请求数量较少的应用程序中使用,其中大多数模式与负载分配相关

例如,负载分布的设计模式之一是将数据放在集群(树结构)服务器中。每个请求都被定向到一个服务器,该服务器反过来表示该用户的数据位于给定的集群中。它本身没有数据,只是将用户重定向到第二个集群级别

第二个集群级别(或第一个树级别)的服务器可以拥有数据(或部分数据),或者可以将用户重定向到第三个集群级别。同样的事情会一直持续下去,直到请求到达一个已经拥有用户数据的服务器,所以会生成响应并发送回用户


这种设计模式(有时称为路由)是一个场景示例,除非您有一个具有大量请求的应用程序,否则您永远不会使用它。例如,gmail使用了这种设计,gmail web界面的最后一次失败是因为路由服务器的请求过载。

基本上同意这一点。然而,对于一个面向较小受众的应用程序,有些事情你可能不太在意——例如,在一个较小的应用程序中,你可能不太在意设计可以缓存部分页面的应用程序。嗯,让我们假设我正在为我妈妈设计一个web应用程序,这样她就可以在线保存她的相册并与她的亲戚分享。虽然该软件可供数千人使用,但每个应用程序本身每天可能只需要处理十几名访问者。但是,如果我创建一个这样的论坛,那么访问者的数量将大大增加,但应用程序的数量将大大减少。这似乎在设计上有很大的不同。(另外,SO需要更好的硬件。)在Stack Overflow播客第27集,Joel和Jeff采访了Reddit的创始人和共同创作者Alexis Ohanian和Steve Huffman,并讨论了可伸缩性策略。同样在之前的播客中,他们讨论了堆栈溢出的整体发展,你可以从他们那里获得有价值的见解。基本上同意这一点。然而,对于一个面向较小受众的应用程序,有些事情你可能不太在意——例如,在一个较小的应用程序中,你可能不太在意设计可以缓存部分页面的应用程序。嗯,让我们假设我正在为我妈妈设计一个web应用程序,这样她就可以在线保存她的相册并与她的亲戚分享。虽然该软件可供数千人使用,但每个应用程序本身每天可能只需要处理十几名访问者。但如果我愿意