欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

伪分布式内存缓存之Memcached

程序员文章站 2024-01-09 13:33:10
...

为什么标题称Memcached为伪分布式内存缓存呢?

1. Memcached服务端没有集群化方案,存在单点故障的风险。

2. Memcached服务端没有持久化机制,数据存放在内存中,进程退出数据丢失。

 

1. Memcached安装与使用

 官方网站:http://memcached.org/

 下载地址:http://www.memcached.org/files/memcached-1.4.34.tar.gz

 

 Memcached依赖libevent库:

apt-get install libevent-dev

 

yum install libevent-devel

   

   其它系统安装脚本可以自己搜索......   

 

 

解压memcached-1.x.x.tar.gz安装包:

wget https://memcached.org/latest
[you might need to rename the file]
tar -zxf memcached-1.x.x.tar.gz
cd memcached-1.x.x
./configure --prefix=/usr/local/memcached
make && make test && sudo make install

  

 

2. Memcached内存管理机制

伪分布式内存缓存之Memcached
            
    
    博客分类: 分布式缓存 缓存Memcached架构单点故障 
 说明:memcached服务端进程启动,通过 -m 参数分配一块指定大小的内存区域(默认:64M)。    

memcached内存划分机制如图,首先理解几个概念:

1. Slab Class: 内存大小相同的Slab属于一个Slab Class,通过 -f 参数区分每个Slab的内存区块增长

2. Slab: 包含多个Chunk,每个Slab(默认:1M)按照最小内存大小进行切分

3. Chunk: 存储 [K-V] 数据的最小内存单元,通过 -n 参数指定最小内存分配空间

 

启动参数参考(部分命令未用过,注意是否支持):

-p                             指定端口号(默认: 11211  

-U <num>                UDP监听端口 (默认: 11211, 0 时关闭) 

-s <file>                   用于监听的UNIX套接字路径(禁用网络支持)

-a <mask>               UNIX套接字访问掩码,八进制数字(默认:0700)

-m                             指定最大使用内存大小(默认:64MB)

-t                               线程数(默认:4)

-l <ip_addr>             绑定地址 (默认:允许所有地址绑定,存在安全隐患) 

-d start                      启动memcached服务   

-d restart                   重起memcached服务   

-d stop|shutdown     关闭正在运行的memcached服务   

-u <username>         绑定使用指定用于运行进程 <username>  (只有root用户可以使用这个参数)

-P <file>                    将PID写入文件<file>,这样可以使得后边进行快速进程终止, 需要与 -d 一起使用

-M                               内存耗尽时返回错误,而不是删除项

-c                                 最大同时连接数(默认:1024)

-f                                 块大小增长因子(默认:1.25)

-n <bytes>                 最小分配空间,key+value+flags默认是48

-k                                锁定所有内存页。注意你可以锁定的内存上限。试图分配更多内存会失败的,所以留意启动守护                                                  进程时所用的用户可分配的内存上限。(不是前面的 -u <username> 参数;在sh下,使用命                                                令"ulimit -S -l NUM_KB"来设置)

-v                                提示信息(在事件循环中打印错误/警告信息)

-vv                              详细信息(还打印客户端命令/响应)

-vvv                            超详细信息(还打印内部状态的变化)

-h                                打印这个帮助信息并退出。

-i                                 打印memcached和libevent的许可。

-L                                尝试使用大内存页(如果可用的话)。提高内存页尺寸可以减少"页表缓冲(TLB)"丢失次数,提                                                 高运行效率。为了从操作系统获得大内存页,memcached会把全部数据项分配到一个大区块

-D <char>                  使用 <char> 作为前缀和ID的分隔符。这个用于按前缀获得状态报告。默认是":"(冒 号)。如果                                               指定了这个参数,则状态收集会自动开启;如果没指定,则需要用命令"stats detail on"来开启

-R                                每个连接可处理的最大请求数

-C                                禁用CAS

-b                                设置后台日志队列的长度(默认:1024)

-B                                绑定协议 - 可能值:ascii,binary,auto(默认)

-I                                 重写每个数据页尺寸。调整数据项最大尺寸

 

客户端写入命令,服务端的处理流程大致如下图:

伪分布式内存缓存之Memcached
            
    
    博客分类: 分布式缓存 缓存Memcached架构单点故障 
 

 

3. Memcached如何解决单点故障?

    方案一:采用客户端分片,例如:一致性哈希

    方案二:引入中间层代理,例如:Twemproxy

    

4. Memcached如何支持高可用方案?

    1. 主备复制:http://repcached.lab.klab.org/

    引入主备复制方案后,实践中可以结合LVS作为前端负载均衡,以及Keepalived节点心跳检查。网上的架构案例非常多LVS+Keepalived+Twemproxy。总之,具体的方案落地结合具体的业务场景去设计。

 

5. 简单企业架构设计

伪分布式内存缓存之Memcached
            
    
    博客分类: 分布式缓存 缓存Memcached架构单点故障 
 图中仅显示Memcached在企业架构中充当的角色,之所以称为简单企业架构,由于以上所描述的架构图在实践中依然存在许多细节性的问题,而这些问题也算比较严重,甚至影响到系统运行的稳定性。实际开发中应该根据业务特点进行适当的调整或者重新设计。

 

6. 性能测试报告

 [待补充]

 

  • 伪分布式内存缓存之Memcached
            
    
    博客分类: 分布式缓存 缓存Memcached架构单点故障 
  • 大小: 28.4 KB
  • 伪分布式内存缓存之Memcached
            
    
    博客分类: 分布式缓存 缓存Memcached架构单点故障 
  • 大小: 13.6 KB
  • 伪分布式内存缓存之Memcached
            
    
    博客分类: 分布式缓存 缓存Memcached架构单点故障 
  • 大小: 17.7 KB