|
1
1
容易的。Web服务器是无状态的,是负载平衡的。保存会话数据的应用程序服务器(中间层)不是。Web服务器可以使用会话ID cookie来确定要联系的应用服务器。 Memcached和Microsoft的Velocity是解决这一确切需求的产品。 编辑:Web服务器如何知道要联系哪个应用服务器?这是嵌入到会话ID散列中的,通常可以根据需要进行。它可以像会话ID是server:guid一样简单。 Memcached 不过,它基于散列值。 重要的一点是,客户机必须能够以无状态的方式找出要联系的应用服务器。最简单的方法是将它嵌入到键中,尽管注册表(可能在它自己的层上)也可以工作并且可以提供一些容错性。 edit2:返回 some 易趣网 interviews 我可能对它们的实现细节有点理解错误。他们不做缓存,也不在中间层做状态。他们所做的就是按功能划分负载平衡的中间层(应用服务器)。因此,它们将拥有一个服务器池,例如用于查看项目。然后是另一个卖东西的池子。 这些应用服务器有一个“智能”DAL,可以路由到分片数据库(按功能和数据划分,因此数据库1上的用户A-L、数据库2上的用户M-Z、项目1上的项目1-10000等)。 它们在中间层没有状态,因为它们是按函数划分的。因此,一个正常的用户体验将涉及一个以上的应用服务器池。假设您查看了一个项目(viewAppServerPool),然后对一个项目(bidappServerPool)进行竞价。所有这些应用服务器都必须保持同步,然后需要一个分布式缓存来管理所有内容。但是,它们的规模如此之大,以至于没有一个分布式缓存能够有效地管理它,也没有一个数据库服务器。这意味着他们必须共享数据层,并且任何缓存实现都必须跨相同的边界分割。 这是 类似的 我在上面贴的,只是向下移动了一层。应用服务器不是让Web服务器确定要联系哪个应用服务器,而是确定要联系哪个数据库。只有在eBay的情况下,由于他们的分区策略,它可能实际上会攻击20多个数据库服务器。但是,同样,无状态层有一些规则,它使用这些规则来联系有状态层。不过,eBay的规则比我上面解释的简单的“user1 i s on server10”规则要复杂一些。 |
|
|
2
2
您可能会发现下面这篇文章很有用,它介绍了一些Amazon_的核心服务用来提供__Always on_157;体验的高可用性密钥值存储系统的设计和实现: 朱塞佩·迪卡迪亚、丹尼斯·黑索伦、马丹·贾姆帕尼、冈纳瓦德汉·卡库拉帕蒂、阿维纳斯·拉克什曼、亚历克斯·皮尔钦、斯瓦米·西瓦苏布拉曼尼、彼得·沃索尔和维尔纳·沃格斯 ,阿哥 Dynamo: Amazon's Highly Available Key-Value Store _157;,第21届ACM操作系统原理研讨会论文集,华盛顿州史蒂文森,2007年10月。 |
|
|
3
2
您可能需要在其中一个地方的工程团队中才能确定,但是有一些人从交谈和其他信息中做出了有根据的猜测,这些信息来自于这两个地方: Ebay Architecture 和 Amazon Architecture 在当今世界,仅仅一个负载均衡器本身就相当于过去几年的DNS循环。今天你有 anycast 让你玩各种各样的把戏。你可以很确定,像易趣和亚马逊这样的公司确实使用负载均衡器,而且它们使用的很多。 当您考虑到它可能如何工作时,您可能希望将其简化一点,因为很多流量是无状态的。在页面的单个请求中,可能有许多对象不需要了解状态。通过从无状态系统(这是anycast的切入点)为这些对象提供服务,可以将它们从图片中去掉,并且请求的数量会显著减少。 如果这不能使您达到单个负载均衡器可以处理负载的程度,那么下一步就是使用IP路由和/或geo dns中断事务。像eBay和Amazon这样大的网站将位于许多不同的数据中心,每个数据中心都有大量的互联网连接。你从Internet Pop Quest West获取所有信息并将其发送到西海岸数据中心的“Quest”服务器,从Att West获取的信息发送到西海岸数据中心的“Att”服务器,从Quest East获取的信息发送到东海岸数据中心的“Quest”服务器,等等。这些系统中的每一个都可以是一个孤岛,一个负载均衡器,一个负载均衡器。T可以处理负载,一些负载均衡器可以每秒处理数十万个事务,甚至是经过SSL加密的事务。在背面,您不断地向每个数据中心批量复制数据,但数据中心可能不同步。 |
|
|
4
2
我不知道他们是怎么做的,但这里有一些建议:
为了分配中间层负载,
分发后端数据库加载
|
|
|
user3216514 · WebSocket和可扩展性 8 年前 |
|
|
greg · 如何检测多核可扩展性/争用问题 8 年前 |
|
|
Sonam · rabbit mq的缩放 9 年前 |
|
|
Kevin Cohen · neo4j获取新节点列表(更改提要) 9 年前 |
|
|
coolk · rdbms的自动保存性能 9 年前 |
|
Leonardo · 线程池。将线程设置为预热策略 9 年前 |
|
|
stojsins · CSS可扩展性图像映射 11 年前 |
|
|
fstab · 对正常控制流程使用例外情况是一种不鼓励还是不鼓励的做法? 13 年前 |