您现在的位置是:主页 > 数据库技术 > 数据库技术

如何分析memcached的分布式算法

IDCBT2021-12-29服务器技术人已围观

简介本篇文章为大家展示了如何分析memcached的分布式算法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 下面开始介绍memcached的分布式,

本篇文章为大家展示了如何分析memcached的分布式算法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

下面开始介绍memcached的分布式,不再介绍memcached的内部结构 。

memcached的分布式

memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。 服务器端内存存储功能,其实现非常简单。 至于memcached的分布式,则是完全由客户端程序库实现的。 这种分布式是memcached的最大特点。

memcached的分布式是什么意思?

这里多次使用了“分布式”这个词,但并未做详细解释。 现在开始简单地介绍一下其原理,各个客户端的实现基本相同。

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


图1 分布式简介:准备

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


图2 分布式简介:添加时

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

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


图3 分布式简介:获取时

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

接下来介绍第1次 中提到的Perl客户端函数库Cache::Memcached实现的分布式方法。

Cache::Memcached的分布式方法

Perl的memcached客户端函数库Cache::Memcached是 memcached的作者Brad Fitzpatrick的作品,可以说是原装的函数库了。

    Cache::Memcached - search.cpan.org

    该函数库实现了分布式功能,是memcached标准的分布式方法。

    根据余数计算分散

    Cache::Memcached的分布式方法简单来说,就是“根据服务器台数的余数进行分散”。 求得键的整数哈希值,再除以服务器台数,根据其余数来选择服务器。

    下面将Cache::Memcached简化成以下的Perl脚本来进行说明。

    use strict;
    use warnings;
    use String::CRC32;
    
    my @nodes = ('node1','node2','node3');
    my @keys = ('tokyo', 'kanagawa', 'chiba', 'saitama', 'gunma');
    
    foreach my $key (@keys) {
        my $crc = crc32($key);             # CRC値
        my $mod = $crc % ( $#nodes + 1 );
        my $server = $nodes[ $mod ];       # 根据余数选择服务器
        printf "%s => %s\n", $key, $server;
    }

    标签:

    很赞哦! ()

本栏推荐