zoukankan      html  css  js  c++  java
  • memcached基础知识

    memcached基础

         memcached是高性能的分布式内存缓存服务器, 一般的使用的是通过其缓存数据库的查询结果,减少数据库的访问次数,以提高动态web应用的速度,提高可扩展性.

        

     协议简单

         memcached的服务器客户端通信并不使用复杂的XML等格式    而使用简单的基于文本行的协议

    基于libevent的事件处理 

         libevent是个程序库,它将Linux的epoll,BSD类操作系统的kqueue等事件处理功能封装成统一的接口.即使对服务器的连接数增加,也能发挥O(1)的性能

    内置内存存储方式      

         为了提高性能 memcached中保存的数据都存储在memcached内置的内存存储空间中.由于数据仅存在于内存中,因此重启memcached,重启操作系统会导致全部数据消失

    memcached不互相通信的分布式 

        memcached尽管是分布式缓存服务器,但服务器端并没有分布式功能.各个memcached不会互相通信以共享信息.具体如何实现分布式,这完全取决于客户端的实现。

    内部结构

       memcached默认情况下采用了名为Slab Allocator的机制分配、管理内存.在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的.但是,这种方式会导致内存碎片,加重操作系统内存管理器的负担,最坏的情况下,会导致操作系统比memcached进程本身还慢.Slab Allocator就是为解决该问题而诞生的.

       Slab Allocator的基本原理是按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题.

       Slab Allocation的原理相当简单.将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk的集合)

    slab allocator还有重复使用已分配的内存的目的.也就是说,分配到的内存不会释放,而是重复利用.

    Page

            分配给Slab的内存空间,默认是1MB.分配给Slab之后根据slab的大小切分成chunk

     Chunk

            用于缓存记录的单位内存空间

    Slab Class

            特定大小的chunk的组

    memcached根据收到的数据的大小,选择最适合数据大小的slab.memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk.然后将数据缓存于其中

    Slab Allocator的缺点

        Slab Allocator解决了当初的内存碎片问题,但新的机制也给memcached带来了新的问题.这个问题就是,由于分配的是特定长度的内存,因此无法有效利用分配的内存.例如,将100字节 的数据缓存到128字节的chunk中,剩余的28字节就浪费了.

       

    分散算法

       1.根据余数计算分散

          根据服务器台数的余数进行分散   求得键的整数哈希值,再除以服务器台数,根据其余数来选择服务器.

           缺点:

               余数计算的方法简单,数据的分散性也相当优秀,但也有其缺点.那就是当添加或移除服务器时,缓存重组的代价相当巨大.添加服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器,从而影响缓存的命中率.

      2. Consistent Hashing  一致性哈希  

           首先求出memcached服务器(节点)的哈希值,并将其配置到0~232 的圆(continuum)上.然后用同样的方法求出存储数据的键的哈希值,并映射到圆上.然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上.如果超过232仍然找不到 服务器,就会保存到第一台memcached服务器上.

    因此,Consistent Hashing最大限度地抑制了键的重新分布.而且,有的Consistent Hashing的实现方法还采用了虚拟节点的思想.使用一般的hash函数的话,服务器的映射地点的分布非常不均匀. 因此,使用虚拟节点的思想,为每个物理节点(服务器)在continuum上分配100~200个点.这样 就能抑制分布不均匀,最大限度地减小服务器增减时的缓存重新分布.

    服务器台数(n)和增加的服务器台数(m)       计算增加服务器后的命中率计算公式如下:    (1 ­ n/(n+m)) * 100

    应用

        随着网站访问量的急剧增加,单纯为数据库添加 slave已无法满足需要,因此引入了memcached.

       

  • 相关阅读:
    Windows10 搭建 ElasticSearch 集群服务
    python开发目录
    nohup命令使用
    shell脚本概述
    关于ELK
    keepalived+DR
    shell脚本中awk的用法
    shell脚本中sed的用法
    shell脚本中grep的用法
    shell检测入侵与邮件报警
  • 原文地址:https://www.cnblogs.com/yxh168/p/9326064.html
Copyright © 2011-2022 走看看