缓存是优化网站性能的第一手段。在大型网站中,缓存通常用来保存热点数据,或者保存应用上下文相关信息。比如之前提到的session服务器集群就可以用分布式缓存来搭建。当然,分布式缓存还可用于缓存数据库中的热点数据以减轻数据库的压力。
分布式缓存的架构方式通常有两种:一种是以JBoss为代表的需要同步的分布式缓存,一种是一MemCached为代表的不互相通信的分布式缓存。
JBoss在所有服务器中保存相同的缓存数据,当一台服务器的数据有更新时,会同步到其他的服务器。这种所有服务器都保存相同数据的方式导致JBoss的缓存容量有限,而且同步的代价会随着服务器数量的增加而增大。因此这种方案很少在大型网站中使用。JBoss通常将应用服务器和缓存部署在同一台服务器上,如下图:
MemCached采用一种互不通信的分布式架构,每个服务器中缓存的数据不相同。应用服务器通过一致性hash等路由算法确定数据所在位置后进行访问,缓存服务器之间互不通信,具有很好的扩展性。如下图:
下面重点说下在MemCached中使用的路由算法,由于MemCached集群中不同服务器缓存的数据不同,因此应用服务器访问数据之前需要先通过路由算法确定数据所在的缓存服务器。最容易想到的路由算法是余数hash,但是在缓存系统需要扩容时,余数hash是不可用的。
比如例子:原来有3台节点,对应的hash值为0,1,2,现在增加一台节点后变为4台节点,对应的hash值为0,1,2,3。那么0-11这12个原来已经缓存的数据,在加入新节点后的可用率为25%。就是说,
向缓存系统中新加入一个节点之后,原来缓存的大部分数据变得无不可用了。这个现象在大型网站架构中是可怕的,因为新加入节点后造成的缓存低可用将导致数据库压力增大甚至有可能造成网站事故。
因此,我们把
向缓存系统中添加节点之后,能够保证已经缓存的数据仍然有效作为分布式缓存中路由算法的主要设计目标。为此,有一致性hash算法。
一致性hash算法:
先构造一个长度为2^32的整数环,根据节点名称的hash值(其分布范围为0~2^32-1)将缓存服务器的节点放置在这个hash环上。计算需要缓存的数据的hash值(其分布范围为0~2^32-1),然后在hash环上顺时针找距离这个hash值最近的缓存服务器节点,就是数据要缓存的目标节点。如图:
一致性hash算法,有一个小小的问题。当向缓存中添加一个新的节点之后,根据一致性hash算法的规则,新添加的节点仅仅能够减轻一台原有服务器的压力,如下图:新添加的节点Node3只能缓解Node1的压力,而无法缓解Node0和Node2的压力。
上面提到的
添加新节点后负载不均衡的问题可以通过虚拟的手段来解决:将每台物理服务器虚拟为一组虚拟服务器,之后将这组虚拟服务器放到hash环上。采用一致性hash算法找到虚拟服务器,该虚拟服务器对应的物理服务器就是目标节点。如图:
在实践中,一台物理服务器一般虚拟为一组150个虚拟服务器,具体情况再改动。
- 大小: 72.1 KB
- 大小: 69.3 KB
- 大小: 48.9 KB
- 大小: 44.9 KB
- 大小: 50 KB
分享到:
相关推荐
分布式缓存作为一种在多节点之间共享和分布数据的存储方式,是现代大型分布式系统中不可或缺的一个组件。它能够有效降低数据库的读写压力,加速数据访问速度,提高系统的响应性能。在分布式缓存的实现方式中,基于...
基于Redis的分布式缓存系统因其高效、灵活的特点,被广泛应用于大型应用系统中。Redis是一款开源、内存中的Key-Value存储系统,支持数据持久化,并能提供多种数据结构如List、String、Set和Hash等,这使得它在处理...
根据其部署位置和工作方式,缓存主要分为四类:CDN缓存、反向代理缓存、本地应用缓存和分布式缓存。 **CDN缓存** CDN(Content Delivery Network)是一种分布式网络服务,通过在全球范围内部署多个缓存服务器,将内容...
分布式缓存设计与实现是大型企业系统提高并发处理能力和系统性能的关键技术之一。缓存介于应用服务器和数据库之间,通过缓存数据库中的热点数据来降低对数据库的访问频率,从而减轻数据库的压力并提升系统性能。...
其次,分布式缓存是大型网站架构中的重要组成部分。如Redis、Memcached等,它们可以显著减少数据库的访问压力,提高数据读取速度。书中会详细讨论缓存的一致性策略,例如强一致性与最终一致性,以及如何在分布式环境...
分布式缓存技术是为了解决大型分布式系统中的数据存储、数据处理等问题而产生的,其核心思想是将数据尽可能地在离用户最近的节点上缓存,以提高数据访问的速度和系统的吞吐量。 分布式缓存技术在云计算环境下所面临...
分布式缓存是现代大型互联网应用中不可或缺的一部分,它在处理海量数据、提高系统性能和响应速度方面发挥着关键作用。本书“深入分布式缓存:从原理到实践”旨在全面解析分布式缓存的核心概念、工作原理及其在实际...
### 大型分布式网站架构设计与实践 #### 一、引言 在当前互联网时代,随着用户数量的急剧增加以及业务复杂度的不断提高,传统的单体应用架构已经无法满足高并发、高性能的需求。因此,越来越多的企业开始采用...
分布式缓存是现代大型互联网应用中的重要组成部分,它能够有效地解决数据访问延迟、减轻数据库压力,提高系统的响应速度和并发处理能力。在这个300分钟的学习资料中,我们将深入探讨分布式缓存的基本概念、工作原理...
关键词“分布式缓存”指的是分布式架构下实现的缓存系统,它通过网络将数据存储在多个物理节点上,实现数据的分布式存储和访问。关键词“分片”意味着系统可以将数据分割成多个片段,并将这些片段存储在不同的节点上...
在构建大型分布式网站架构时,我们面临的主要挑战是如何处理高并发访问、数据存储与处理的扩展性、系统可用性和容错性。以下是对这些关键知识点的详细解释: 1. 分布式架构基础: 分布式架构是将单一应用程序拆分...
2. **分布式缓存**:为了提高性能和减少数据库压力,大型网站常使用分布式缓存如Redis或Memcached。它们提供快速的数据访问,并且能够在多台机器之间共享数据,以实现高并发和低延迟。 3. **分布式数据库**:随着...
分布式可扩展数据库架构在大型电子商务网站中扮演着至关重要的角色,因为随着业务的增长,单一的数据库系统往往无法满足高并发、大数据量的处理需求。分布式数据库架构通过将数据分散存储在多个节点上,实现了系统的...
其核心架构采用了负载均衡器、分布式缓存、消息队列等一系列关键技术,并且通过微服务的方式将业务模块进行了拆分,每个模块独立部署,通过API进行通信。此外,还采用了多数据中心的方案来提高系统的可用性和容灾...
由于其简单的实现和出色的性能,Memcached成为了众多开发者和大型网站的首选分布式缓存解决方案。随着硬件成本的降低和网络速度的提升,分布式缓存系统的应用将会更加广泛,对于构建可扩展、高性能的Web应用具有重要...
Java大型架构设计主要涵盖的是构建高可用、高性能、可扩展的分布式系统的技术和实践,这在互联网行业中至关重要。三本书分别关注大型分布式网站架构设计、大型网站系统与Java中间件的实践以及分布式Java应用的基础与...
5. **分布式缓存**:如Redis、Memcached等缓存系统在提高网站性能方面起着重要作用。这部分会讲解缓存的原理、设计模式及最佳实践。 6. **消息队列与事件驱动**:如RabbitMQ、Kafka等消息中间件,用于解耦系统组件...
在构建大型网站技术架构时,面对亿级流量的挑战,我们需要深入理解并应用一系列核心原理与最佳实践。这两本书——《大型网站技术架构:核心原理与案例分析》和《亿级流量网站架构核心技术 跟开涛学搭建高可用高并发...
《大型分布式网站架构设计与实践》是一本深入探讨如何构建高效、可扩展的大型网站架构的专业书籍。在当今互联网行业中,随着用户数量的急剧增长和业务需求的复杂性提升,传统的单体架构已经无法满足需求,分布式系统...