- 浏览: 161343 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (95)
- oracle (7)
- java 基础 (10)
- web层 (3)
- 框架技术 (0)
- eclipse技巧 (2)
- 重构 (2)
- 架构 (1)
- 缓存 (11)
- 分布式多线程编程 (5)
- jquery (8)
- ibatis (3)
- spring API (1)
- maven (1)
- spring (4)
- js (12)
- 正则表达式 (1)
- Velocit (1)
- 杂七杂八 (3)
- XSS跨域攻击 (1)
- appfuse (2)
- Simple-Spring-Memcached (3)
- spring batch (11)
- spring integration (2)
- Teiid 8.0 (0)
- Linux 命令 (1)
最新评论
-
luxianping:
怎么根据命名空间来删除缓存? 比如说用户对应的菜单,当有用户 ...
使用SSM注解做缓存操作 -
vemacitri_b:
mowengaobo 写道你可以这样理解key。为什么不单独放 ...
使用SSM注解做缓存操作 -
mowengaobo:
你可以这样理解key。为什么不单独放个参数出来如 @Rea ...
使用SSM注解做缓存操作 -
夜神月:
目前我在dao曾有如下的注解配置:@ReadThroughSi ...
使用SSM注解做缓存操作
在上文中,主要教大家如何搭建在windows IIS 7.5下搭建php环境,使用常见的两种memcached性能监视工具。通过自己动手实践,观察监控工具上数据,相信大家对于memcached的了解一定深入了很多。但是同样还有些疑惑。本文将用图文的方式,继续讲解memcached在集群环境下的使用技巧。 曾经看到过这样的文字(大概是翻译过来的,算是比较权威的) memcached如何处理容错的? 不处理!:) 在memcached节点失效的情况下,集群没有必要做任何容错处理。如果发生了节点失效,应对的措施完全取决于用户。节点失效时,下面列出几种方案供您选择: * 忽略它! 在失效节点被恢复或替换之前,还有很多其他节点可以应对节点失效带来的影响。 * 把失效的节点从节点列表中移除。做这个操作千万要小心!在默认情况下(余数式哈希算法),客户端添加或移除节点,会导致所有的缓存数据不可用!因为哈希参照的节点列表变化了,大部分key会因为哈希值的改变而被映射到(与原来)不同的节点上 * 启动热备节点,接管失效节点所占用的IP。这样可以防止哈希紊乱(hashing chaos)。 根据上面的说法,memcached其中一个节点失效以后,memcached本身是没有任何策略维持失效转发的,这对于大型系统是一个无法接受的事实。
Memcached基于一 个存储键/值对的hashmap。其守护进程是用C写的,但是客户端可以用任何语言来编写(本文使用C#作为例子),并通过memcached协议与守护进程通信。可 能这些东西都太高深了,我们暂不做研究。 虽然 Memcached作为一个分布式缓存数据服务,但是每个服务之间根本没有进行相互通信,这里可能与 我理解的分布式有点区别,可能是我才疏学浅,也可能是每个人思考问题的角度不同。Memcached客户端就是通过一种分布式算法将数据保存到不同的Memcached服务器上,将数据进行缓存。 Memcached分布式环境下,每个服务器端本身没有相互相连的关系,数据分布其实是由客户端来维持的(通俗点说,是客户端按照自己的分布算法,将数据分配 给指定的服务端去存储,取值的时候,客户端再找指定的服务器拿数据。任何环境下,服务端都不可能主动去找客户端拿“东西”或者去操作客户端。B/S模式也 是的,web服务器不可能主动找浏览器拿东西,更不可能对浏览器端做任何操作)。memcached的服务端更不会这么聪明,自动去查找、匹配当前环境 中分布的其他服务器。 而且,据我所知,Memcached本身并没有为集群提供真的高可用方案,因为我个人认为,使用集群环境,通常是为了满足以下的需求: 1.压力分载 (负载均衡) 2.失效转发(故障转移)。 而memcached本身并不具备这两点,这对于以“分布式缓存”号称的memcached来说,是非常致命的。对于笔者来说,也是一种沉痛的打击啊(o(∩_∩)o 哈哈)。 理论上来讲,客户端连接多个memcached服务端的时候,默认的数据分布是这样的: 理论上的,%33+33%+34%=100%,看上去数据分布还还很均衡,读取的时候,分别访问从三台服务器内存,再组成完整的数据。这样的数据分发架构,倒真正做到了“负载均衡”。降低了三台服务器的内存使用率,让三台服务器同时为客户端提供服务,这难道不是完美的负载均衡吗?如果没有配置监视工具,也可以参照下面的代码: 我本地开启了3个memcached服务,分别指向不同端口,数据的分布比例是这样的: 37%,43%,20%。没有理论上的那么均衡。 有过分布式集群架构的朋友,肯定会想到,那万一发生了“单点故障”(就像sqlserver集群中的,单个节点上的数据库服务器宕机),那不是玩完了? 按照上图所示,一台服务器宕机了,就有33%的数据丢失了。那不就玩完了。如果是某银行采用这种架构,发生如此杯具,那架构师岂不是要被群众拿刀砍死。 那到底该如何解决这个问题呢?我翻阅了很多中文甚至英文的资料,好像真的没有官方或者很权威的解决方案。提供了如下两种思路。 解决方案1:本地备份缓存 在笔者的实践中,沿袭了第一种方案的思想。由于笔者项目使用的是windows的服务器,而第二种方案中的magent代理软件,好像只支持linux平台。 在客户端还是配置多台服务器,但是让其中任意的一台服务器做备份,去读取并append另外几台服务器的数据,这样依赖,该台备份服务器上就始终存储了一份完整的数据。当发生意外情况的时候,直接读取备份服务器上的数据。等服务器故障恢复后,再从客户端,将数据合理的分发出去。 在.NET平台下,就不能选用enyim.com Memcached Client或者Memcached Providers之类封装得太完善的client啦!涉及到很多基本的操作,这里推荐使用.NET memcached client library这个比较原始的类库client。我始终觉得,最原始的,往往就是最灵活的。 通过本地备份的方式,解决单点故障: 好了,由于篇幅有限。本文就到此了。 本文出自blog.csdn.net/dinglang_2009 ,转载请注明出处
使用上面的测试代码,可以打印输出处理时间,get/set次数。分别注释掉配置文件中指定memcached服务器配置后,再读取测试,可以清楚的看到数据分布比例。
在本地放一份缓存,同时也在分布式Memcached上放一份缓存,如果当其中一台节点当机了,客户端程序直接读取本地的缓存,本地客户端维护一个HashMap即可,这样的方案虽然很简陋,但是可以满足一部分场景的需要,当你很急需的时候可以作为临时方案暂时替代一下。
采用 Magent 缓存代理,防止单点现象,缓存代理也可以做备份,通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存服务器,缓存代理服务器可以连接多台Memcached机器可以将每台Memcached机器进行数据同步。这样的架构比较完善了,如果其中一台缓存代理服务器down机,系统依然可以继续工作,如果其中一台Memcached机器down掉,数据不会丢失并且可以保证数据的完整性,以上描述的系统架构如图所示:
发表评论
-
memcached 客户端代码 Java memcached client学习(一致性hash)
2012-04-26 17:35 1504昨天写了一篇短文 描述了淘宝面试的一些题。 今天下午 装了在u ... -
Memcached集群/分布式的单点故障
2012-04-25 17:15 1526四月, 2010 (13:33) | 架构设计 | 繁 ... -
MemCached的分布式算法
2012-04-25 11:10 1291在MemCached的基础里面,我们讲到MemCach ... -
分布式缓存系统Memcached学习心得
2012-04-24 14:40 1313缘起: 在数据驱动的web ... -
安装java memcached client到maven repository
2012-02-20 14:43 1679由于目前java memcached client没有官方的m ... -
memcached java客户端比较
2012-02-08 16:00 866较早之前的一些比较主要是集中在java memcached ... -
memcached监控工具
2012-02-08 15:58 1444最简单和最直接的方式是在启动memcached的时候加入-vv ... -
关于memcached分布式拓扑结构的可靠性
2012-02-08 15:56 1042memcached依赖客户端的散列实现了“分布式',但是由于缺 ... -
安装memcached
2012-02-08 15:55 838安装memcached 1.安装memcached所依赖的l ... -
cache
2012-02-08 15:54 837自从Ehcache 到了1.2+的版本,就支持分布式缓存了。我 ...
相关推荐
Windows+Nginx+Memcached+Tomcat6负载均衡
tomcat7+nginx+memcached 配置tomcat 集群以及负载均衡所需要的msm jar包 亲测可用 msm 1.9.7版本 采用kryo序列化方式
Nginx+Tomcat+memcached实现集群部署、负载均衡session共享,内含说明文档,下载地址,依赖jar包,全套提供,亲测有效
使用Nginx + Memcached + Tomcat实现负载均衡和session共享案例
Memcached负载均衡分析以及优化策略的设计,王浩,张雷,本文介绍了Memcached负载均衡机制,并对该机制进行分析,通过实验进行测试得出当对数据的访问服从zipf分布时,会出现冷热数据访问带��
Tomcat要支持memcached管理Session,需要调用一些jar库文件如下(网上有的文章中可能所说的jar包不全,或者版本不样的会报错,但这里我已经经过验证了): 1) couchbase-client-1.2.2.jar 2) javolution-5.5.1....
在windows系统上nginx+memcached+tomcat的负载均衡 相关配置过去请查看 http://blog.csdn.net/xu_xiao_ji/article/details/51682693
nginx+tomcat+memcached集群和负载均衡所有资源包,具体集群方法请参见博文:http://blog.csdn.net/l1028386804/article/details/48289765
windows系统上nginx+memcached+tomcat的负载均衡
博客中讲解的负载均衡实例,所配置使用的java包和讲解手册
#对 "/Dossm3RabbitMQConsumer/" 启用负载均衡 location /Dossm3RabbitMQConsumer/ { proxy_pass http://localhost:8086; #保留用户真实信息 proxy_set_header X-Real-IP $remote_addr; proxy_set_header ...
Linux下Nginx+Memcached+Tomcat负载均衡集群服务搭建所需jar包
2 解压附件里的压缩包里的memcached-win64-1.4.4-14.zip 命令行cd 到根目录然后执行 (1)memcached.exe -d install (2)memcached.exe -d start 2 解压附件里的压缩包里的nginx-1.10.1.zip 将附件压缩包的nginx-...
在博客中,写出来的负载均衡中用到的所有jar,经过验证并整理,完全可行,请下载使用,谢谢
通过lvs+keepalived+nginx+tomcat实现服务负载均衡。 通过memcached实现不同服务器之间session共享。 包含jar文件。 本人亲测实验通过。
本人使用的是tomcat6.0.37,ngnix1.4.2,memcached1.4.15,本地测试没有任何问题,把jar整理了下,希望能帮到需要的人
nginx+memcached+tomcat 负载均衡+session共享实现所有代码 教程请看:https://blog.csdn.net/dayuang2009/article/details/80312249
Nginx.tomcat.memcached负载均衡和session共享.rar
使用nginx负载均衡可大幅度提高并发量,但是不同服务器中的tomcat无法实现session共享,需要配置memcached,即需要将额外的jar包加入到tomcat的lib下
鉴于每次读取文件的执行效率很低,将负载信息写在了memcached中,需要用户装有memcached缓存服务器。配置文件都用空格分离每个服务端连接元素。初始化和改变配置文件(conmem.cnf)时必须运行initcon.php进行初始化...