使用Memcached的8个要点

使用Memcached的8个要点

 

内存使用:

 

1.Memcached数据由slabs组成,slabs由pages组成,pages由chunks组成

大对象分一组,小对象分一组,分别存在不同的Memcached服务器上,这样优化可以尽可能地使用好内存。

2.键和值都占用内存,所以使用短的键名称可以节省空间

3.当内存满的时候,系统使用LRU(Least Recently Used)算法进行内存管理

 

你在使用过程中可能碰到以下问题:

1.如果连接服务器滞后,那么你可能达到最大连接数限制

2.如果处理命令滞后,有可能碰到一些问题,通常是硬件问题,没有足够的RAM来做内存交换,网络问题(带宽,丢包,半双工连接等),极少情况下可能是操作系统或者memcached本身的bug导致的。另外连接问题通常是防火墙设置问题。

3.请确保服务的时间是正确的,因为Memcached的超时设置是相对于服务器时间的,另外设置超时时间请精确到秒

 

理论限制:

1.你的客户端连接数是有限制的

2.在一个集群中的节点数量也是有限制的

A.从客户角度

大量的服务器可以从几个角度放缓的客户端。如果你正在计算在每次请求的服务器哈希表,当你添加服务器将放缓。大多数客户将计算表一次启动和重新使用它请求之间。

查找一个服务器发出一个请求是一个简单的哈希查找,所以它不是一个性能问题。
•从客户端废物RAM建立太多的TCP套接字
•禁用持久连接是指客户端可能会连接到所有服务器上的每个请求。 3次握手会增加延迟和数据包到每个请求。

B.Multiget洞

曾经有一个Facebook的笔记提的是,当你将服务器添加到集群中的讨论,更分散multigets的。如果您发出multiget要求10键针对2服务器集群,将转成两个系统调用;每个服务器一个。如果你有10台服务器,你最终会与每个服务器都有一个系统调用。本身做得更多的系统调用的服务器,以配合较小的传入请求,以及它们的容量下降。

这不是一个不可逾越的问题。它可能与许多客户将相关键一起。针对特定用户的配置文件的所有密钥最终会在相同的memcached实例,因此一个multiget将达到一个单一的服务器与所有其键并使用少得多的系统调用。

C.一个精心设计的二进制协议客户端

使用spymemcached作为一个例子;客户端可以采取许多应用程序线程,并使用单个TCP连接返回memcached。与二进制协议,它是可能的包装从不同的客户端的实例的请求到相同的TCP套接字,然后返回结果到正确的所有者。
这意味着一个应用服务器,在理论上可以只要求每台memcached的实例中的一个的TCP套接字。如果每个应用程序节点运行50个线程或进程,这可以极大地从大减少安装的开销。

D.记得摩尔定律

如果许多大型网站都使用相同的硬件,他们曾在2007年为新memcached的情况下,它们可以具有4倍以上的服务器计数比现在。随着时间的流逝内存变便宜,网络容量的增加。硬件的增加并不一定会留在你的成长曲线的后面,但他们承担着巨大的脱离,你可以在理论上减半服务器计算每隔几年。

E.经济规模

我将简要地指出,大规模的装置吸引更好的人才。的现实情况是更可能涉及领域的专家,如果你的流量是巨大的。该集群越大,您遇到的问题的怪异,就越有可能你是有一队人参与维护它。这些都是极端情况下的需要保证性能非常大的集群。大多数用户都会有偶尔的问题需要克服,但不足以保证员工。

 

参考:

 

Memcached启动参数:
http://linux.die.net/man/1/memcached

Memcached内存分配和优化
http://returnfoo.com/2012/02/memcached-memory-allocation-and-optimization-2/
Memcached监控工具:http://code.google.com/p/phpmemcacheadmin/

Memcached是如何工作的?
http://www.linuxjournal.com/article/7451?page=0,1

Memcached如何编程?
http://code.google.com/p/memcached/wiki/NewProgramming

关于Memcached的性能
http://code.google.com/p/memcached/wiki/NewPerformance

Memcached使用大量小对象有何影响?
http://dom.as/2008/12/25/memcached-for-small-objects/

优化Memcached:
https://www.reviewboard.org/docs/manual/2.0/admin/optimization/memcached/

Php Memcached优化讨论:
https://groups.drupal.org/node/306033

时间: 2024-12-31 02:57:49

使用Memcached的8个要点的相关文章

开发大型高负载类网站应用的几个要点

看了一些人的所谓大型项目的方法,我感觉都是没有说到点子上,有点难受. 我也说说自己的看法.我个人认为,很难衡量所谓项目是否大型,即便很简单的应用在高负载和高增长情况下都是一个挑战.因此,按照我的想法,姑且说是高负载高并发或者高增长情况下,需要考虑的问题.这些问题,很多是和程序开发无关,而是和整个系统的架构密切相关的. 数据库  没错,首先是数据库,这是大多数应用所面临的首个SPOF.尤其是Web2.0的应用,数据库的响应是首先要解决的. 一般来说MySQL是最常用的,可能最初是一个mysql主机

【原创】memcached 中的命令行参数解析

     本文主要是以 memcached 源码为例,讲解如何在 linux 下解析命令行参数.  安装 memcached 后,查看其可用选项:  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 [root@Be

Flume(NG)架构设计要点及配置实践

Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中.由原来的Flume OG到现在的Flume NG,进行了架构重构,并且现在NG版本完全不兼容原来的OG版本.经过架构重构后,Flume NG更像是一个轻量的小工具,非常简单,容易适应各种方式日志收集,并支持failover和负载均衡. 架构设计要点 Flume的架构主要有一下几个核心概念: Event:一个数据单元,带有一个可选的消息头 Flow:Even

实战Memcached缓存系统

 http://blog.csdn.net/column/details/memcached.html

分布式缓存系统之Memcached

简单介绍: Memcache缓存数据库:减少数据库压力.高性能的分布式内存缓存服务器,用于动态Web应用,减少I/O,提高web访问速度以减轻数据库负载,以提高动态Web应用的速度.提高可扩展性.利用 Memcached 处理实时数据读写:MySQL是影响性能的最大瓶颈,可以用一台MySQL主库(只写)+多台MySQL辅库(只读)的主辅库集群来解决.另外,访问计数等实时性很强的东西用Memcache做缓存.基于c#语言写的调用libevent库事件来实现. 1. hash表结构:key.valu

Memcached进程挂掉后的自动重启脚本

由于一台WEB服务器的Memcached死掉而导致在访问网站的某些页面时候打不开.下面脚本会自动检测Memcached的进程,如果挂掉则自动重启Memcached服务. vim memcached_check.sh #!/bin/sh #check memcached process and restart if down PATH=$PATH:/opt/env/memcache/bin/memcached DATE=`date -d "today" +"%Y-%m-%d-%

php的memcache和memcached扩展区别

老生长谈的问题了.我这里就整理一下. memcache的文档在:http://pecl.php.net/package/memcache memcached的文档在:http://pecl.php.net/package/memcached   首先看下时间,memcache最早是在2004年2月开发的,最后更新是在2013年4月,而memcached最早是在2009年1月开发的,最后更新是在2014年1月更新的.所以memcache的历史比memcached早. 在安装memcache扩展的时

iOS ARC 内存管理要点

前言 在讨论 ARC 之前,我们需要知道 Objective-C 采用的是引用计数式的内存管理方式,这一方式的特点是: 自己生成的对象自己持有.比如:NSObject * __strong object = [NSObject alloc] init];. 非自己生成的对象自己也能持有.比如:NSMutableArray * __strong array = [NSMutableArray array];. 自己持有的对象不再需要时释放. 非自己持有的对象自己无法释放. 而 ARC 则是帮助我们

接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点

不记得上一次写超过20行的matlab程序是什么时候了,大概是2013年吧,那个时候写过2篇文章,实际用到了 一些matlab的内容,超过200行的matlab程序应该要追溯到2011年了,最近为了帮助网友解决我博客一篇文章的问题,把自己2011年的matlab翻出来,感触颇多,一言难尽,看到昔日熟悉的代码,我居然能理解,然后还能修修改过,感觉好多年没用了,连基本函数都忘记了,还是碰到问题还是会写会改,这里面也说明了编程不简单是一个记忆和经验的问题,更重要的是学习的方法和解决问题方法的问题.所以