首页 > 互联网技术 > 如何部署memcached以及memcached的一些参考资料

如何部署memcached以及memcached的一些参考资料

2009年10月4日 2,915 views 发表评论 阅读评论
部署memcached需要注意以下要点:
1.memcached是一个缓存系统,不应该用来保存不可丢失的数据;
2.memcached没有内建的安全机制.所以需要用防火墙和加密等措施来保障信息安全;
3.memcached没有失败切换的机制,因为各memcached实例并不互相通信;
4.只shi用一个memcached会造成单点故障.所以应该用一组memcached实例.
关于名称空间
客户端可以使用名称空间来方便标识数据.一般是加一个前缀标识.  注意仅仅是标识数据而已,而不是高级语言里的名称空间可以限定范围.
数据的过期
memcached实例有两种数据过期策略.
第一种是LRU算法,达到size限制,那么删除最近最少使用的数据.(也可以设置仅返回错误).
第二种是显示设定过期时间.使用过期时间可以确保你的数据是最新的,满足应用程序的需求.memcached server不会监视过期的数据,memcached使用的是一种lazy过期机制,即在get数据的时候比对时间戳,看是否过期,只有没有过期的数据才被返回.
memcached的分布式算法
memcached server号称是分布式的,实际上分布式是在客户端用算法来保障的. memcached客户端支持多种分布式算法. 为了保证数据的一致,在所有客户端我们要采用一致的算法.
现在有两种常用算法.一种是modula hash. 使用key的hash值,对服务器组取模,来选取服务器,这种方式,在增减memcached server时,由于要重新分布数据,短时间会命中率会大降,从而对数据库造成很大压力,可能造成短时间内服务不可用;
另一种方式是:一致性哈希. great .当使用一致性哈希算法,同样的key总是使用同样的server存取数据,即使server列表更改了.这意味着你能从配置列表里添加移除server而仍然使用同样的server存取一个key.当前有两种一致性哈希算法,Ketama,Wheel.两种都被libmemcached支持,在php,java都实现了.一致性哈希也有一些限制,略.
如果你仅使用一个memcached实例,或者你的memcached server列表从不改变(比较少的客户端),那么哈希算法无所谓.
但是,如果你频繁的更改memcached server list,或者你有一组memcached server 被大量客户端共享,那么使用一致性哈希算法可以帮助你确保你的cache 数据不是重复的且数据是均匀地分布的.
关于使用DTrace
memcached包括了一些DTrace探测.可以用来监视memcached的性能.可以用来监视连接,slab分配,哈希表更改等等. DTrace在solaris 10,opensolaris,mac os,freebsd中支持.
memcached的内存分配
memcached默认情况下采用了名为Slab Allocator的机制分配、管理内存.
默认启动memcached是不会初始分配内存的.当存储数据的时候,才分配内存. #有参数可以初始就分配内存,我未测试,没这个必要.我们只需要确保不使用到swap空间即可.
分配给slab的内存基本单位是页(page).默认1M大小. 每个slab在切割为相同的大小size的块(chunk)(以避免碎片,虽然可能造成一定的空间浪费).当存储数据的时候,memcached检查内存空间,选取合适chunk size的slab存储数据,或者分配新的slab存储数据. 最终,你会有多个页,每个页1M大小(默认),一个slab可能有多个页.每个页将包含相同size的一些chunks(chunk组).
“memcached在启动时指定 Growth Factor因子(通过-f选项), 就可以在某种程度上控制slab之间的差异。默认值为1.25。 但是,在该选项出现之前,这个因子曾经固定为2,称为“powers of 2”策略。将memcached引入产品,或是直接使用默认值进行部署时, 最好是重新计算一下数据的预期平均长度,调整growth factor, 以获得最恰当的设置。内存是珍贵的资源,浪费就太可惜了。” #引用,见后参考.
memcached的多线程支持.
参考本站”memcached的安装”.
多线程适用于多cpu,但多少个线程合适,却需要衡量,验证 ,以达到最大性能.
网上一些优秀的参考资料,日本人写的,翻译得很不错.

连接到memcached之后,输入stats再按回车,即可获得包括资源利用率在内的各种信息。 此外,输入”stats slabs”或”stats items”还可以获得关于缓存记录的信息。 结束程序请输入quit。
这些命令的详细信息可以参考memcached软件包内的protocol.txt文档。
另外,如果安装了libmemcached这个面向C/C++语言的客户端库,就会安装 memstat 这个命令。 使用方法很简单,可以用更少的步骤获得与telnet相同的信息,还能一次性从多台服务器获得信息。
$ memstat –servers=server1,server2,server3,…
二进制协议从下一版本1.3系列开始支持。(看当前版本:http://memcached.org/)
我去年曾经试验性地将memcached的存储层改造成了可扩展的(pluggable)。
http://alpha.mixi.co.jp/blog/?p=129
MySQL的Brian Aker看到这个改造之后,就将代码发到了memcached的邮件列表。 memcached的开发者也十分感兴趣,就放到了roadmap中。现在由我和 memcached的开发者Trond Norbye协同开发(规格设计、实现和测试)。 和国外协同开发时时差是个大问题,但抱着相同的愿景, 最后终于可以将可扩展架构的原型公布了。 代码库可以从memcached的下载页面 上访问。
 » 如果喜欢可以: 点此订阅本站
分类: 互联网技术 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.