memcached完全剖析之五

Memcached进程监控 winform版Memcached监控程序,进程死掉重启,开机运行,最小化至托盘,禁止关闭 立即下载
原文链接:http://gihyo.jp/dev/feature/01/memcached/0005
memcached的连载终于要结束了。 到上次为止, 我们介绍了与memcached直接相关的话题,
本次介绍一些mixi的案例和实际应用上的话题,并介绍一些与memcached兼容的程序。

mixi案例研究
mixi在提供服务的初期阶段就使用了memcached。 
随着网站访问量的急剧增加,单纯为数据库添加slave已无法满足需要,因此引入了memcached。 
此外,我们也从增加可扩展性的方面进行了验证,证明了memcached的速度和稳定性都能满足需要。 
现在,memcached已成为mixi服务中非常重要的组成部分。


图1 现在的系统组件

一、服务器配置和数量
mixi使用了许许多多服务器,如数据库服务器、应用服务器、图片服务器、 反向代理服务器等。
单单memcached就有将近200台服务器在运行。 


memcached服务器的典型配置如下:
CPU:Intel Pentium 4 2.8GHz
内存:4GB
硬盘:146GB SCSI
操作系统:Linux(x86_64)

这些服务器以前曾用于数据库服务器等。
随着CPU性能提升、内存价格下降, 我们积极地将数据库服务器、应用服务器等换成了性能更强大、内存更多的服务器。 
这样,可以抑制mixi整体使用的服务器数量的急剧增加,降低管理成本。 
由于memcached服务器几乎不占用CPU,就将换下来的服务器用作memcached服务器了。

二、memcached进程
每台memcached服务器仅启动一个memcached进程。分配给memcached的内存为3GB, 


启动参数如下:
/usr/bin/memcached -p 11211 -u nobody -m 3000 -c 30720

由于使用了x86_64的操作系统,因此能分配2GB以上的内存。
32位操作系统中, 每个进程最多只能使用2GB内存。
也曾经考虑过启动多个分配2GB以下内存的进程, 但这样一台服务器上的TCP连接数就会成倍增加,管理上也变得复杂, 
所以mixi就统一使用了64位操作系统。

另外,虽然服务器的内存为4GB,却仅分配了3GB,
是因为内存分配量超过这个值, 就有可能导致内存交换(swap)。

连载的第2次中 前坂讲解过了memcached的内存存储“slab allocator”,
当时说过,memcached启动时 指定的内存分配量是memcached用于保存数据的量,
没有包括“slab allocator”本身占用的内存、 以及为了保存数据而设置的管理空间。
因此,memcached进程的实际内存分配量要比 指定的容量要大,这一点应当注意。

mixi保存在memcached中的数据大部分都比较小。
这样,进程的大小要比 指定的容量大很多。
因此,我们反复改变内存分配量进行验证, 确认了3GB的大小不会引发swap,这就是现在应用的数值。

三、memcached使用方法和客户端
现在,mixi的服务将200台左右的memcached服务器作为一个pool使用。 
每台服务器的容量为3GB,那么全体就有了将近600GB的巨大的内存数据库。 
客户端程序库使用了本连载中多次提到车的Cache::Memcached::Fast, 与服务器进行交互。
当然,缓存的分布式算法使用的是 第4次介绍过的 Consistent Hashing算法。
Cache::Memcached::Fast - search.cpan.org

应用层上memcached的使用方法由开发应用程序的工程师自行决定并实现。 
但是,为了防止车轮再造、防止Cache::Memcached::Fast上的教训再次发生, 
我们提供了Cache::Memcached::Fast的wrap模块并使用。

四、通过Cache::Memcached::Fast维持连接
Cache::Memcached的情况下,与memcached的连接(文件句柄)保存在Cache::Memcached包内的类变量中。 
在mod_perl和FastCGI等环境下,包内的变量不会像CGI那样随时重新启动, 而是在进程中一直保持。
其结果就是不会断开与memcached的连接, 减少了TCP连接建立时的开销,
同时也能防止短时间内反复进行TCP连接、断开 而导致的TCP端口资源枯竭。
但是,Cache::Memcached::Fast没有这个功能,所以需要在模块之外 将Cache::Memcached::Fast对象保持在类变量中,
以保证持久连接。

package Gihyo::Memcached;

use strict;
use warnings;
use Cache::Memcached::Fast;

my @server_list = qw/192.168.1.1:11211 192.168.1.1:11211/;
my $fast;  ## 用于保持对象

sub new {
    my $self  = bless {}, shift;
    if ( !$fast ) {
        $fast = Cache::Memcached::Fast->new({ servers => \@server_list });
    }
    $self->{_fast} = $fast;
    return $self;
}

sub get {
   my $self = shift;
   $self->{_fast}->get(@_);
}
上面的例子中,Cache::Memcached::Fast对象保存到类变量$fast中。

五、公共数据的处理和rehash
诸如mixi的主页上的新闻这样的所有用户共享的缓存数据、设置信息等数据, 会占用许多页,访问次数也非常多。
在这种条件下,访问很容易集中到某台memcached服务器上。 访问集中本身并不是问题,
但是一旦访问集中的那台服务器发生故障导致memcached无法连接, 就会产生巨大的问题。
连载的第4次 中提到,Cache::Memcached拥有rehash功能,
即在无法连接保存数据的服务器的情况下, 会再次计算hash值,连接其他的服务器。
但是,Cache::Memcached::Fast没有这个功能。不过,它能够在连接服务器失败时, 短时间内不再连接该服务器的功能。

my $fast = Cache::Memcached::Fast->new({
    max_failures     => 3,
    failure_timeout  => 1
});

在failure_timeout秒内发生max_failures以上次连接失败,就不再连接该memcached服务器。 
我们的设置是1秒钟3次以上。
此外,mixi还为所有用户共享的缓存数据的键名设置命名规则, 
符合命名规则的数据会自动保存到多台memcached服务器中, 取得时从中仅选取一台服务器。
创建该函数库后,就可以使memcached服务器故障 不再产生其他影响。

六、memcached应用经验
到此为止介绍了memcached内部构造和函数库,接下来介绍一些其他的应用经验。

1. 通过daemontools启动
通常情况下memcached运行得相当稳定,但mixi现在使用的最新版1.2.5 曾经发生过几次memcached进程死掉的情况。
架构上保证了即使有几台memcached故障 也不会影响服务,
不过对于memcached进程死掉的服务器,只要重新启动memcached, 就可以正常运行,
所以采用了监视memcached进程并自动启动的方法。 
于是使用了daemontools。

daemontools是qmail的作者DJB开发的UNIX服务管理工具集, 
其中名为supervise的程序可用于服务启动、停止的服务重启等。

daemontools
这里不介绍daemontools的安装了。mixi使用了以下的run脚本来启动memcached。
#!/bin/sh

if [ -f /etc/sysconfig/memcached ];then
        . /etc/sysconfig/memcached
fi

exec 2>&1
exec /usr/bin/memcached -p $PORT -u $USER  -m $CACHESIZE -c $MAXCONN $OPTIONS

2. 监视
mixi使用了名为“nagios”的开源监视软件来监视memcached。
Nagios: Home
在nagios中可以简单地开发插件,可以详细地监视memcached的get、add等动作。 
不过mixi仅通过stats命令来确认memcached的运行状态。

define command {
  command_name  check_memcached
  command_line  $USER1$/check_tcp -H $HOSTADDRESS$ -p 11211 -t 5 -E -s 
  'stats\r\nquit\r\n' -e 'uptime' -M crit
}

此外,mixi将stats目录的结果通过rrdtool转化成图形,进行性能监视, 
并将每天的内存使用量做成报表,通过邮件与开发者共享。

3. memcached的性能
连载中已介绍过,memcached的性能十分优秀。我们来看看mixi的实际案例。 
这里介绍的图表是服务所使用的访问最为集中的memcached服务器。

图4 TCP连接数
从上至下依次为请求数、流量和TCP连接数。
请求数最大为15000qps, 流量达到400Mbps,这时的连接数已超过了10000个。 该
服务器没有特别的硬件,就是开头介绍的普通的memcached服务器。 
此时的CPU利用率为:


图5 CPU利用率
可见,仍然有idle的部分。因此,memcached的性能非常高, 
可以作为Web应用程序开发者放心地保存临时数据或缓存数据的地方。

七、兼容应用程序
memcached的实现和协议都十分简单,因此有很多与memcached兼容的实现。
 一些功能强大的扩展可以将memcached的内存数据写到磁盘上,实现数据的持久性和冗余。 
连载第3次 介绍过,以后的memcached的存储层将变成可扩展的(pluggable),逐渐支持这些功能。

这里介绍几个与memcached兼容的应用程序。
repcached
为memcached提供复制(replication)功能的patch。
​
Flared
存储到QDBM。同时实现了异步复制和fail over等功能。

memcachedb
存储到BerkleyDB。还实现了message queue。

Tokyo Tyrant
将数据存储到Tokyo Cabinet。不仅与memcached协议兼容,还能通过HTTP进行访问。

1. Tokyo Tyrant案例
mixi使用了上述兼容应用程序中的Tokyo Tyrant。
Tokyo Tyrant是平林开发的 Tokyo Cabinet DBM的网络接口。
它有自己的协议,但也拥有memcached兼容协议, 也可以通过HTTP进行数据交换。
Tokyo Cabinet虽然是一种将数据写到磁盘的实现,但速度相当快。
mixi并没有将Tokyo Tyrant作为缓存服务器,而是将它作为保存键值对组合的DBMS来使用。 
主要作为存储用户上次访问时间的数据库来使用。它与几乎所有的mixi服务都有关, 
每次用户访问页面时都要更新数据,因此负荷相当高。MySQL的处理十分笨重, 
单独使用memcached保存数据又有可能会丢失数据,所以引入了Tokyo Tyrant。 
但无需重新开发客户端,只需原封不动地使用Cache::Memcached::Fast即可, 这也是优点之一。
关于Tokyo Tyrant的详细信息,请参考本公司的开发blog。
mixi Engineers' Blog - Tokyo Tyrantによる耐高負荷DBの構築
mixi Engineers' Blog - Tokyo (Cabinet|Tyrant)の新機能


总结
到本次为止,“memcached全面剖析”系列就结束了。
我们介绍了memcached的基础、内部结构、 分散算法和应用等内容。
读完后如果您能对memcached产生兴趣,就是我们的荣幸。 
关于mixi的系统、应用方面的信息,请参考本公司的开发blog。 
感谢您的阅读。
记一次完整的RPG Maker MV游戏逆向过程(思路一) 了解RPG Maker MV的文件建构 上一篇文章,我们已经成功在PC上运行了游戏,那我们如何对游戏进行逆向呢? 首先要了解正常的RPG Maker MV制作的游戏应该具有哪些文件,以及他的结构 那如何了解他的结构呢,很简单,我们只需要用RPG Maker MV创建一个默认工程,来看看一个游戏的最简结构是怎么样的 创建新项目 项目创建完成 查看项目目录结构 是不是和之前解包出来的很像呢? 通... 阅读详情

相关推荐

达梦数据库与sharding-jdbc的深度适配实践

本文详细介绍了达梦数据库与sharding-jdbc的深度适配实践,包括驱动与依赖管理、核心适配实现、注册与配置等关键步骤。通过扩展shardingSphere的方式,成功实现了达梦数据库的分库分表功能,并提供了常见问题解决方案和性能优化建议,助力企业级应用高效处理海量数据。

weixin_30300225的博客 623

Memcached

NoSQL是对 Not Only SQL、非传统关系型数据库的统称。NoSQL一词诞生于1998年,2009年这个词汇被再次提出指非关系型、分布式、不提供ACID的数据库设计模式。随着互联网时代的到来,数据爆发式增长,数据库技术发展日新月异,要适应新的业务需求。而随着移动互联网、物联网的到来,大数据的技术中NoSQL也同样重要。Memcached 只支持能序列化的数据类型,不支持持久化,基于Key-Value的内存缓存系统。

2301_81307988的博客 1041

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 487

【Memcached】一文详解 Memcached

Memcached 是一个开源的,支持高性能,高并发的分布式内存缓存系统,由 C 语言编写,总共 2000 多行代码。从软件名称上看,前 3 个字符Mem就是内存的意思,而接下来的后面 5 个字符cache就是缓存的意思,最后一个字符d,是daemon的意思,代表的是服务器端守护进程模式服务。

Data · Model · Agent · Repeat 9951

避开这些坑!RK3588安卓系统内置输入法的正确姿势(含.mk文件修改指南)

本文详细解析了在RK3588安卓系统定制中预置第三方输入法的完整流程与关键避坑指南。重点涵盖APK签名、Android.mk文件编写、系统默认输入法配置(使用adb ime list命令获取服务名)以及SeLinux策略适配等核心步骤,并指出RK3566/RK3568等兄弟平台的通用性与差异点,帮助开发者实现稳定、深度的系统集成。

tgb34567890的博客 437

STM32CUBEMX配置SDRAM

STM32CUBEMX配置SDRAM

Master_0_的博客 2982

Memcached使用整理

Memcached使用整理

云原生devsecops 7029

PLC编程标准之争:IEC61131与IEC61499核心区别与选型指南

在工业自动化领域,PLC编程长期依赖IEC61131标准,它定义了梯形图、结构化文本等语言,通过周期扫描机制保证确定性执行。然而,随着工业4.0和分布式控制场景的兴起,IEC61499以事件驱动模型打破传统范式,让功能块能跨设备协同,实现更灵活的柔性产线和模块化系统。理解两者在程序结构、数据交互、部署方式和实时性上的差异,是选型与工程落地的关键。本文从基础概念出发,剖析执行模型与架构演进,结合一线调试经验,帮助工程师在传统PLC与下一代标准之间做出理性决策。

weixin_27014595的博客 267

查看memcached进程

转载于:https://www.cnblogs.com/xiaobiaomei/p/10736059.html

weixin_30508241的博客 497

华为OD机考双机位A卷 - 流浪地球(Java & Python& JS & C/C++ & GO )

华为OD机考双机位A卷 - 流浪地球(OD上机考试双机位A卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 4039

为 ABAP BSP 与 ICF 量身打造的错误页实践:从 CX_ROOT 到 SICF 的端到端落地指南

摘要 本文系统讲解SAP ABAP平台中BSP与ICF层的错误页定制方法。在BSP层,通过标记错误页属性和绑定ERROR_OBJECT异常对象,实现友好的错误展示与日志记录。ICF层通过SICF事务码统一配置错误页、登录与登出逻辑,支持服务树继承。文章包含可直接落地的代码示例,并针对现代Fiori架构给出演进建议,帮助开发者提升用户体验与系统安全性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 223

memcached完全剖析

版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2008/07/10/memcached-001/以及本声明。 memcached是什么? memcached是以LiveJournal旗下Danga Interacti...

choucankua9416的博客 151

VSCode 搭建C/C++编程环境 2025新版图文安装教程(VSCode安装 + C/C++环境搭建 + 运行测试 + 背景图设置)

100%搭建成功,VSCode 搭建C++编程环境 2025新版图文安装教程(VSCode安装+C++环境搭建+运行测试+背景图设置)

Code_流苏:在代码中寻诗意,在实践中觅真知 2974

memcached完全剖析–1. memcached的基础

我是mixi株式会社开发部系统运营组的长野。日常负责程序的运营。从今天开始,将分几次针对最近在Web应用的可扩展性领域的热门话题memcached,与我公司开发部研究开发组的前坂一起,说明其内部结构和使用。memcached是什么? memcached的特征 协议简单 基于libevent的事件处理 内置内存存储方式 memcached不互相通信的分布式安装

半道出家的和尚 1536

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

memcached完全剖析详解

原贴:http://tech.idv2.com/2008/07/31/memcached-005/memcached完全剖析–1. memcached的基础版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2008/07/10/memcached-001/以及本声明。翻译一篇技术评论社的文章,

Zfrong繁荣的IT技术、IT项目、解决方案专栏Blog-上海 7042

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

memcached 完全剖析–1. memcached的基础

http://kb.cnblogs.com/page/42731/] 本系列文章导航 memcached完全剖析–1. memcached的基础 memcached全面剖析–2.理解memcached的内存存储 memcached全面剖析–3.memcached的...

124

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Memcached完全剖析》

系列文章索引:《Memcached完全剖析》 本次不再介绍memcached的内部结构,开始介绍memcached的分布式。 memcached的分布式 memcached的分布式是什么意思? Cache::Memcached的分布式方法 根据余数计算分散 根据余数计算分散的缺点 Consistent Hashing Consis

jiangfeng08的专栏 965

Memcached完全剖析

作者:前坂徹(Toru Maesaka)  来源:idv2.com系列文章目录:memcached完全剖析–1. memcached的基础memcached全面剖析–2.理解memcached的内存存储memcached全面剖析–3.memcached的删除机制和发展方向memcached全面剖析–4. memcached的分布式算法memcached全面剖析–5. memcached的应用和兼容

玉龙(支付宝, 小微金服, 高级产品开发工程师) 985

memcached完全剖析--1. memcached的基础 和 memcached全面剖析--PDF总结篇

翻译一篇技术评论社的文章,是讲memcached的连载。fcicq同学说这个东西很有用,希望大家喜欢。 发表日:2008/7/2作者:长野雅广(Masahiro Nagano)原文链接:http://gihyo.jp/dev/feature/01/memcached/0001 我是mixi株式会社开发部系统运营组的长野。 日常负责程序的运营。从今天开始,将分几次针对最近在Web应用的可扩展

xiaowanggedege的专栏 2457

[转]memcached完全剖析–1. memcached的基础

版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2008/07/10/memcached-001/以及本声明。 翻译一篇技术评论社的文章,是讲memcached的连载。fcicq同学说这个东西很有用,希望大家喜欢。 发表日:2008/7/2 作者:长野雅广(Masahiro Nagano) 原文链接:ht...

aizong2453的博客 171
上一篇: memcached完全剖析之四
下一篇: 一致性 hash 算法( consistent hashing )
北雨南萍
北雨南萍 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄20年 2665粉丝 453原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值