zoukankan      html  css  js  c++  java
  • Memcached分布式缓存

    工作中,同事提到用memcached缓存,因此特意学习了一些相关知识。

    memcached简介

      Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

      Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

      许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。

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

    memcached缓存特点

      1.协议简单

      2.基于libevent的事件处理

      3.内置内存存储方式

      4.memcached不相互通信的分布方式

     memcached分布式原理

      memcached的分布式实现主要依赖客户端的实现:

      如图:假设memcached服务器有node1~node3三台,应用程序要保存键名为“tokyo”“kanagawa”“chiba”“saitama”“gunma” 的数据。

      首先向memcached中添加“tokyo”。将“tokyo”传给客户端程序库后,客户端实现的算法就会根据“键”来决定保存数据的memcached服务器。服务器选定后,即命令它保存“tokyo”及其值。

      同样,“kanagawa”“chiba”“saitama”“gunma”都是先选择服务器再保存。

      接下来获取保存的数据。获取时也要将要获取的键“tokyo”传递给函数库。函数库通过与数据保存时相同的算法,根据“键”选择服务器。使用的算法相同,就能选中与保存时相同的服务器,然后发送get命令。只要数据没有因为某些原因被删除,就能获得保存的值。

      这样,将不同的键保存到不同的服务器上,就实现了memcached的分布式。 memcached服务器增多后,键就会分散,即使一台memcached服务器发生故障无法连接,也不会影响其他的缓存,系统依然能继续运行。

    余数计算分散法——是memcached标准的memcached分布式方法

    Consistent Hashing的简单说明

      Consistent Hashing算法描述如下:首先求出memcached服务器(节点)的哈希值, 并将其配置到0~232的圆(continuum)上,这个圆我们可以把它叫做值域。 然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。 然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。 如果超过0~232仍然找不到服务器,就会保存到第一台memcached服务器上。

      如果新添加或移除一台机器,在consistent Hashing算法下,如下图添加一个节点node5:

      node5被放在 node4 与 node2之间,本来映射到 node2 和 node4 之间的区域都会找到node4,当有node5的时候,node5 和 node4之间的还是找到node4,而node5 和 node2 之间的此时会找到node5,因此当添加一台服务器的时候受影响的仅仅是 node5 和 node2 区间。

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

  • 相关阅读:
    函数的缺省参数和函数初始化示例以及布尔型参数的使用示例
    指针使用示例程序
    按值传递对象和按址传递对象
    详解js跨域
    CSS之BFC及其应用
    js图片预加载、有序加载
    12个非常有用的JavaScript技巧
    MySQL使用pt-online-change-schema工具在线修改1.6亿级数据表结构
    nodeJS实现一个在线填表应用
    浏览器的缓存机制
  • 原文地址:https://www.cnblogs.com/luckyliulin/p/7163854.html
Copyright © 2011-2022 走看看