大型网站架构之分布式缓存

news/2024/5/10 10:01:27/文章来源:https://blog.csdn.net/weixin_34043301/article/details/90099256
缓存是优化网站性能的第一手段。在大型网站中,缓存通常用来保存热点数据,或者保存应用上下文相关信息。比如之前提到的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个虚拟服务器,具体情况再改动。 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/6293329.html,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_732521.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

决议要素_2020年每个网站测试人员的新年决议

决议要素您能够根据2019年的决议进行工作吗? 我在这里听起来可能很可笑,但是作为Web开发人员,我在2019年的决心是在业余时间跳入Web测试。 为什么? 因此,我可以从测试人员的角度了解发布周期。 我想穿他们的鞋子&#…

Thinking——nodejs实现的SEO相关的库

SEO SEO是为了网站在搜索引擎中的自然排名更靠前,引入更多的用户流量。SEO有很多技巧,譬如官网多发优质文章,文章的url做成静态化,文章多出现一些搜索相关的关键字,自建站群等等。 百度收录 百度定期会对优质文章进行收…

下拉框系统甄选火星推荐_seo关键词下拉框优化技术

“seo关键词下拉框优化技术,百度下拉框的算法,一个关键词每天有多少搜索量,和它相关的词有多少搜索量,这些数据百度都记录在案的,在百度搜索一个较短关键词的时候,下拉框中可能会出现一些和它相关的一些长尾词.”百度下拉框关键词指的是就是在百度搜索某一个关键词的时候&#…

大型网站架构演化历程

http://www.hollischuang.com/archives/728 本文内容大部分来自《大型网站技术架构》,这本书很值得一看,强烈推荐。 大型网站系统的特点 高并发,大流量 需要面对高并发用户,大流量访问。Google 日均 PV 35 亿,日 IP 访问数 3 亿&a…

SEO优化手工外链为什么更好?

开发十年,就只剩下这套Java开发体系了 >>> 手工发布的外链,是这个完结百度的网站权重与关键词排行优化的:咱 们通过手工在论坛/博客上回复主题帖子,并带有锚文体链接,这样的单向链接直接指 向你的网站&…

SEO核心技术纯白帽快速排名方法

我相信很多朋友都知道SEO快速排名,现在流行的快速排名都是众人皆知的黑帽SEO技术,但是却唯独不知道纯白帽也可以快速排名。但是我估计大家都看到过很多新站在短短数月内就上了首页,权重从0升到3,这难道是黑帽吗,不是的…

实验----实现基于LNMP的电子商务网站

实现基于LNMP的电子商务网站一、准备LNMP环境所需的包:yum install mariadb-server php-fpm php-mysql nginx二、准备网站:mkdir -p /data/web 建站点unzip -d /data/web xiaomi.zip 导入小米网站的源码包并解压到/data/webcd /data/web &…

pageSpeed Insights 图片对网站优化方案

2019独角兽企业重金招聘Python工程师标准>>> 一 规则 如下归纳几点 可供参考。<br> 避免使用着陆页面重定向 启用压缩功能 缩短服务器相应应用时间 使用浏览器缓存机智 缩短资源大小 优化图片 优化css发送过程 优化加载可见内容 移除会阻止呈现内容的javaScri…

网站常见问题1分钟定位 - 如何使用阿里云ARMS诊断Java应用卡顿问题

不要慌&#xff0c;上面只是一张贴图。为什么“慢”那么难查 网站卡顿、页面加载过慢是互联网应用最常见的问题之一。排查、解决这类问题通常会花费开发运维人员大量的时间&#xff0c;通常是因为以下三个原因&#xff1a;应用链路太长&#xff0c;无从下手。从前端页面到后台网…

JS网站图集相册特效

JS网站图集相册特效是一款可以直接使用鼠标进行前后导航&#xff0c;也可以通过缩略图来切换图片。在线演示本地下载转载于:https://www.cnblogs.com/wwhhq/p/8298797.html

手机移动端网站开发前要做的准备工作

为什么80%的码农都做不了架构师&#xff1f;>>> 现在的移动商城系统是商城网站必不可少的一部分&#xff0c;且占有相当比例的重要性&#xff0c;虽然手机商城网站开发很火&#xff0c;但是电商企业也不要盲目跟风&#xff0c;毕竟搭建一个商城系统网站也不是一下子…

利用angular4和nodejs-express构建一个简单的网站(三)—express访问mysql

在上一章中&#xff0c;我们为后端的express服务设置了跨域访问&#xff0c;并未前端的angular安装了bootstrap和ng-bootstrap依赖&#xff0c;并进行了配置&#xff0c;为后端的express安装了mysql和处理文件上传的multiparty依赖并创建了mysql数据库birthday在这一章中&#…

Python基础:有哪些网站可以做新手练习题?

答&#xff1a;有哪些网站可以做新手练习题&#xff1f; 练习 基础语法和实战项目 的 Python资源 有&#xff1a; Python经典练习题100道&#xff08;附链接&#xff09; http://www.pythonchallenge.com/ 这个网站的页面设计虽然不好看&#xff0c;但是里面的谜题设计得很出…

svn+nginx+mysql+php+nfs部署社交网站

操作环境&#xff1a;192.168.80.181 svn192.168.80.182 nginx192.168.80.183 mysql(MariaDB)192.168.80.185 php192.168.80.186 nfsSVN服务搭建 192.168.80.181:yum install -y subversionsvnserve --version //查看版本信息使用svnadmin建立版本库mkdir -p /opt/svn/rep…

3年开发了5个私人项目:自动化办公、网站、机器人、小程序...免费开源,拿走不谢~

大家好&#xff0c;这里是全网同名的程序员晚枫。 2019年从法学院毕业后就从事了程序员的工作&#xff0c;因为业务需要或者自己感兴趣&#xff0c;先后使用的开发语言有&#xff1a;Java、Python、JS。 今天整理一下这3年开发的私人项目&#xff0c;全部开源给大家&#xff…

django搭建一个小型的服务器运维网站-查看服务器中的日志与前端的datatable的利用...

目录 项目介绍和源码&#xff1b; 拿来即用的bootstrap模板&#xff1b; 服务器SSH服务配置与python中paramiko的使用&#xff1b; 用户登陆与session; 最简单的实践之修改服务器时间&#xff1b; 查看和修改服务器配置与数据库的路由&#xff1b; 基于websocket的实时日志实现…

Docker学习之路05:五分钟用docker compose搭建一个自己的个人博客网站!

五分钟用docker compose搭建一个自己的个人博客网站&#xff01; Docker学习路线传送门&#xff1a; Docker学习之路01&#xff1a;Docker的安装 Docker学习之路02&#xff1a;阿里云镜像加速器 Docker学习之路03&#xff1a;Docker的常用命令 Docker学习之路04&#xff1a;创…

R语言与数据分析练习:使用ARIMA模型预测网站访问量

R语言与数据分析练习&#xff1a;使用ARIMA模型预测网站访问量 使用ARIMA模型预测网站访问量 一、实验背景&#xff1a; 随着流量的增大&#xff0c;某网站的数据信息量也在以一定的幅度增长 基于该网站2016年9月~2017年2月每天的访问量&#xff0c;使用ARIMA模型预测网站未来…

R语言与数据分析练习:使用协同过滤算法实现网站的智能推荐

R语言与数据分析练习&#xff1a;使用协同过滤算法实现网站的智能推荐 使用ARIMA模型预测网站访问量 一、实验背景&#xff1a; 基于实验1中某网站2016年9月每天的访问数据,使用基于内容的协同过滤算法实现网站的智能推荐&#xff0c;帮助客户发现他们感兴趣但很难发现的网页…

R语言与数据分析练习:使用Apriori算法实现网站的关联分析

R语言与数据分析练习&#xff1a;使用Apriori算法实现网站的关联分析 使用ARIMA模型预测网站访问量 一、实验背景&#xff1a; 基于某网站的访问数据&#xff0c;使用Apriori算法对网站进行关联分析 二、实验目的&#xff1a; 预测网站访问量 三、实验设计方案和流程图&am…