Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Memcached分析

3,646 views

Published on

Published in: Technology
  • Be the first to comment

Memcached分析

  1. 1. Memcached<br />cocowool@gmail.com<br />
  2. 2. Memcached的历史及现状<br />Memcached服务器端介绍<br />memcache使用最佳实践<br />memcache的分布式算法<br />Memcached运维讨论<br />
  3. 3. Memcached的历史及现状<br />2003年,LiveJournal<br />作者Brad Fitzpatrick<br />当前版本1.4.5(2010-4-3)<br />目前应用在许多大型网站中<br />Flickr、Twitter、Craiglist, etc<br />
  4. 4. Memcached的历史及现状<br />什么是Memcached<br />Memory Cache Daemon<br />memcached is a server that caches Name Value Pairs (NVPs) in memory<br />Memcached能做什么<br />任何元素:HTML片段、二进制对象、数据结果集<br />极大地提高数据的获取效率<br />Memcached不能做什么<br />Memcached不是持久化的存储<br />Memcached本身不支持分布式和高可用<br />
  5. 5. 一般情况下Memcached的用途<br />
  6. 6. Memcached的分布式<br />Memcached尽管是“分布式”服务器,但是服务器端并没有分布式的功能。各个Memcached不会互相通信以共享信息。Memcached的分布式,完全取决于客户端的实现。<br />
  7. 7. Memcached服务器端介绍<br />Memcached的安装<br />支持Linux、Windows多种平台<br />安装过程简单<br />Memcached的启动<br />端口、内存、Daemon<br />新版本对于多线程的支持<br />Memcached的几个限制:<br />Key的长度不能超过250个字符<br />存储的数据不能超过1MB<br />最大同时连接数200<br />
  8. 8. Memcached支持的参数<br />
  9. 9. Memcached服务器端介绍<br />可以使用telnet命令进行测试<br />telnet servername port<br />支持的命令<br />存储类命令<br />ADD、SET、REPLACE、APPEND、PREPEND、CAS<br />读取类命令<br />GET、GETS<br />DELETE,Least Recently Used(LRU)算法<br />INCR/DECR<br />
  10. 10. Memcached服务器端介绍<br />支持的命令<br />状态类命令<br />STATS、STATS ITEMS、STATS SLABS、STATSSIZES<br />flush_all<br />服务器效率的检查<br />Cache hits ratio 缓存命中率<br />get_hits / (get_hits + get_misses)<br />gets 和 sets 百分比<br />cmd_get / cmd_set<br />这个比例应当越高越好<br />curr_items/total_items/bytes<br />
  11. 11. memcache使用最佳实践<br />如何在应用中使用Memcached<br />需要有客户端支持,目前有丰富的客户端<br />Perl、PHP、Python、Ruby、Java、.NET/C#、C、Postgres、Chicken<br />客户端的作用<br />实现Memcache的分布式算法<br />提供压缩功能,使Memcached存储更大容量数据<br />
  12. 12. memcache使用最佳实践<br />PHP客户端<br />特点<br />以模块的方式提供支持<br />从PHP4.3.3以后的版本开始<br />依赖于zlib提供数据的压缩功能<br />配置参数<br />
  13. 13. memcache使用最佳实践<br />PHP客户端<br />配置参数<br />
  14. 14. memcache使用最佳实践<br />PHP客户端<br />支持的函数列表<br />
  15. 15. memcache使用最佳实践<br />Memcached的使用场景<br />Key的命名规范<br />ObjectName:ObjectType:Key<br />使用SQL语句作为键值<br />如何处理数据的更新<br />Flush Cache<br />预清除缓存(Proactively Clear Cache)<br />读取数据时强制重设缓存<br />
  16. 16. memcache使用最佳实践<br />如何避免多个客户端的更新<br />增加锁机制<br />依赖Memcached返回成功信息的机制<br />通过GET和SET实现<br />如何设置合适的过期时间<br />数据的请求频率<br />数据的更新频率,更新越频繁,过期时间宜短<br />数据是由外部程序来更新的(第三方)<br />避免数据过期时的并发访问<br />
  17. 17. memcache使用最佳实践<br />缓存什么内容<br />慢查询SQL<br />减少Memcached的影响<br />确保即便所有的服务器都Down了,服务仍正常<br />Client的重试动作<br />
  18. 18. memcache的分布式算法<br />
  19. 19. memcache的分布式算法<br />
  20. 20. memcache的分布式算法<br />Cache::Memcached的分布算法<br />根据余数进行分散(CRC32)<br />支持Rehash,可以设置关闭<br />在缓存服务器发生重组时代价较大<br />
  21. 21. memcache的分布式算法<br />Consistent Hashing<br />
  22. 22. memcache的分布式算法<br />Consistent Hashing<br />
  23. 23. memcache的分布式算法<br />Libketama<br />Take your list of servers (eg: 1.2.3.4:11211, 5.6.7.8:11211, 9.8.7.6:11211)<br />Hash each server string to several (100-200) unsigned ints<br />Conceptually, these numbers are placed on a circle called the continuum. (imagine a clock face that goes from 0 to 2^32)<br />Each number links to the server it was hashed from, so servers appear at several points on the continuum, by each of the numbers they hashed to.<br />To map a key->server, hash your key to a single unsigned int, and find the next biggest number on the continuum. The server linked to that number is the correct server for that key.<br />If you hash your key to a value near 2^32 and there are no points on the continuum greater than your hash, return the first server in the continuum.<br />
  24. 24. Memcached运维讨论<br />运维工具与方法<br />telnet与stats命令<br />memcached-tool<br />查看memcached中slab的使用状况<br />几个重要参数<br />curr_connections<br />listen_disabled_num<br />listen_disabled_num<br />
  25. 25. Memcached的扩展<br />memcached Storage Engine for MySQL<br />Apache memcached Session<br />repcached<br />memcachefs<br />Memcachedb<br />Flared<br />Tokyo Tyrant<br />
  26. 26. 参考资料<br />Using Memcached – How to scale your website easily<br />http://timyang.net/tag/cache/<br />http://www.mysqlperformanceblog.com/2006/08/09/cache-performance-comparison/<br />http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients<br />从Memcached分布式应用看一致性哈希散列函数的选择<br />Memcache的mutex设计模式<br />Memcached数据被踢(evictions>0)现象分析<br />Cache Performance Comparison<br />

×