在上文“在Windows .NET平台下使用Memcached”中,我给大家介绍了如何在Windows平台上部署Memecached服务端,如何在.NET平台中应用Memcached,详细介绍了两种流行的客户端组件的配置,使用(存储、取值、替换、删除、缓存时间设定等),优缺点等。在我们的测试项目中,主要是针对“单台服务器”的应用场景。

事实上,在我们实际开发中,往往需要多台服务器。这样才能形成真正的“分布式架构”,才能更好的发挥memcached的巨大优势。当然,也不是绝对优势。任何架构都不可能绝对完美。回顾一下memcached的基本原理,其实就是在内存中维护一张巨大的hash表嘛。通俗点说,就是通过键值对的方式将数据缓存在服务器内存中,降低数据库服务器的负载,更重要的就是,数据库的性能瓶颈主要在于I/O环节(这也是关系型数据库最大的弱点,虽然具有良好的稳定性,但面对日益暴涨的用户数量,海量数据,高并发等问题,确实很难应付。所以近一两年,很多开源团队和技术爱好者很推崇“NoSql”技术)。稍微懂点计算机的都知道,内存的读写肯定要比磁盘I/O操作效率高很多。但是有了memcached就能彻底的放弃传统“关系型数据库”吗?当然不是,memcached这东西用不好,可能反而会降低性能,而且还可以造成致命的数据丢失。

开始思考一些问题,在多台memcached服务器共存的情况下,数据到底是如何存储的呢?如果是数据是实时同步的话,那同步工作到底是如何完成的呢?是服务器端的机制还是客户端的操作?假如是分布存储的,那么其中一台服务器宕机之后,那数据不就是丢失了吗?还有就是,如何才能真正实现多台memcached服务器的“负载均衡”呢?

带着这些疑惑,动手进入实例。通过反复的测试,监控,得出结论。往往比听别人的更可靠(有些技术或者理论,就算官方的也可能有出错或者遗漏)。

这里,首先推荐两款memcached的性能监视工具。通过工具,我们能够清楚的看到,数据是如何分布在多台服务器内存中的,读取/设置的操作次数等信息。

第一款工具,名字叫MemCacheDManager,下载地址:http://download.csdn.net/detail/dinglang_2009/3843109。

这是一款基于.NET技术开发的memcached管理工具,界面非常简单,操作也很方便。下载安装后,目录如图所示:

使用最新版的memcached.exe,替换掉BinaryFiles目录下的memcached.exe(老版本的)。

可以看看该管理工具的界面:

监控界面如下:

我个人不太熟悉这个工具,这里就不做太多的介绍,有兴趣的读者可以自己研究一下。我将介绍另外一个web版本的监控工具--memAdmin

其实memcached自带的命令行也可以监控这些参数信息,但是不太直观。这些工具也是通过读取这些信息,提供界面显示和操作,这里不做太多深入探讨,有兴趣的读者可以深入研究系统的源码,甚至可以像周公那样自己做一个简单的memcached监视工具。

memAdmin是一款轻量级的监控工具,基于基于 PHP5 & JQuery技术开发。可以到其官方网站去下载:http://www.junopen.com/memadmin/。

首先下载最新版的php(以php 5.38为例),由于笔者使用的是windows系统,所以应该到http://windows.php.net/download/这个地址去下载。当然,如果使用Linux类的操作系统,可以到http://php.net/downloads.php这个地址去下载。这里提醒大家一点,“.tar.gz”一般是Linux下的压缩格式,在windows下面也可以使用winrar解压出来,但是没有windows中特有的“exe”或者“dll”等信息。所以无法使用。笔者当时在下载memcached的时候,第一次就下载到了一个“.tar.gz”(其实就是for linux的版本),后果可想而知。

我这里使用的是 PHP 5.3 (5.3.8)      VC9 x86 Non Thread Safe 这个版本的(笔者其实使用的X64的windows操作系统,但实在找不到X64版本的php,所以就将就一下)。这里为什么要特别的提一下这个版本呢?因为后面我们在配置memcache_php.dll扩展的时候,需要根据具体php的版本信息,去下载对应的扩展dll。

关于PHP的PHP现在推出5.3.3版本了,不过下载的时候有几个不同版本选择。那就是VC6 X86和VC9 X86。 首先我来解答: VC6是什么? VC6就是legacy Visual Studio 6 compiler,就是使用这个编译器编译的。 VC9是什么? VC9就是the Visual Studio 2008 compiler,就是用微软的VS编辑器编译的。那我们如何选择下载哪个版本的PHP呢? 如果你是在windows下使用Apache的,请选择VC6版本; 如果你是在windows下使用IIS+PHP的,请选择VC9版本。

好了,下载完memAdmin和php之后,下面开始配置php的web服务器,部署memAdmin这个工具。其实读者完全可以下载安装“appserver”之类的wamp集成开发包,可以快速集成php、mysql、mysqladmin等。但笔者早就听说在IIS 7.5可以通过CGI扩展跑php,甚至可以集成apache 、tomcat等web服务器。集成方式如下:

第一种,是比较早期的,用CGI方式加载PHP环境。也就是在IIS里面配置解释器为php.exe,早期比较常见,目前使用较少。特点是:稳定,但效率太低。

第二种,通过ISAPI方式加载PHP环境,就是IIS里面配置解释器为php5isapi.dll,目前使用最多,应用最广。特点是:多线程,效率较高,但不够稳定。

其实还有一种效率更高的PHP和IIS的集成方式,就是利用FastCGI方式加载PHP环境。

尤其在windows 7以后,在IIS环境里可以直接装载FastCGI了。这种方式高效率,高稳定性,属于将来发展趋势。

而在PHP 5.3以后的PHP版本中,已经不支持ISAPI模式。

第一步,将下载好的php压缩包解压大C盘根目录下(可以解压到任意目录),找到php.ini.devleper这个文件,重命名为php.ini。

第二部,下载并安装phpManager,安装完成后,打开IIS 7.5,如果在IIS的主面板中看到下面图标,说明phpManager安装成功。

然后可以添加php的处理程序扩展等。值得注意的是,IIS7.5 和IIS 6.0的界面和配置还是有很大区别的,笔者使用了很多年的IIS 6.0,一开始也不太适应。

然后找到FastCGI的设置界面:

好了   在IIS中新建一个普通站点,然后在物理目录中新建一个index.php文件,加入如下代码(打印当前php信息):

  1. <?php
  2. phpinfo();
  3. ?>

浏览网站,如果出现如下的界面,说明php及IIS已经配置完毕。

好了,下面将添加一个网站,直接指向下载好的memAdmin(解压后的文件夹目录)。添加完成后,浏览一下:

会出现红色的提示“php为安装memcache扩展...”。这是因为当前的php包中,没有配置对memcached的支持和扩展,所一该工具无法初始化,自然没法工作(无法正常访问和读取memcached服务器上的数据)。好了,在这个地址去下载对应的版本:http://downloads.php.net/pierre/

看到了吗?有两个版本哦。由于我们使用的php5.3.8  是VC9 x86 Non Thread Safe版本的,所以选上面那个带有“nts”的(笔者曾因为下载到了下面的那个版本,导致无法运行,花了中午吃饭,午睡的时间才搞定)。下载了扩展压缩包之后,解压出来,其实是一个名为"php_memcahe.dll"的文件,将该文件复制到php包目录下的ext文件夹中,然后在修改php.ini文件,加入一行“extension=php_memcache.dll”。保存后。重启IIS服务(iisreset),再浏览,就可以看到了memAdmin的登录界面了。

登录memAdmin后,就可以添加memcached服务器,进行监视和管理,具体操作实在很简单,毋庸赘述。由于篇幅有限,本文只能带大家入门,教大家如何配置并使用监视工具,便于大家去探索和解答那些关于memcached集群、负载、单点故障等相关的疑惑。这样也好,留给读者一点自由思考和自己动手的空间。下文中,我将使用监视工具,去探索memcached内部的数据分布算法,解答并总结本文最上面所说的那些疑惑。敬请期待。

memcached性能监控的更多相关文章

  1. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

  2. jvm系列(五):tomcat性能调优和性能监控(visualvm)

    tomcat服务器优化 1.JDK内存优化 根据服务器物理内容情况配置相关参数优化tomcat性能.当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃.因此一般建议堆的最 ...

  3. spring拦截器 实现应用之性能监控

    package cn.ximi.erp.web.common.interceptors; import cn.ximi.core.common.utils.string.StringUtil; imp ...

  4. Performance Monitor1:开始性能监控

    Performance Monitor是Windows内置的一个可视化监控工具,能够在OS级别上实时记录系统资源的使用情况,通过收集和存储日志数据,在SQL Server发生异常时,能够还原系统当时的 ...

  5. 前端性能监控方案window.performance 调研(转)

    1. 业界案例 目前前端性能监控系统大致为分两类:以GA为代表的代码监控和以webpagetest为代表的工具监控. 代码监控依托于js代码并部署到需监控的页面,手动计算时间差或者使用浏览器的的API ...

  6. Apache服务器性能监控

    Apache服务器性能监控 1.使用自带mod_status模块监控 1)加载mod_status.so 模块 在httpd.conf中打开LoadModule status_module modul ...

  7. jvm性能监控与故障处理工具

    jdk为我们提供了一系列的jvm性能监控和故障处理工具,在这里根据学习进度进行整理记录.便于之后查阅 1.jps 虚拟机进程工具  类似于Linux系统中的ps命令,用于查看虚拟机进程,常用的有以下功 ...

  8. [整]磁盘 I/O 性能监控指标和调优方法

    在介绍磁盘 I/O 监控命令前,我们需要了解磁盘 I/O 性能监控的指标,以及每个指标的所揭示的磁盘某方面的性能. 磁盘 I/O 性能监控的指标主要包括: 指标 1:每秒 I/O 数(IOPS 或 t ...

  9. cAdvisor0.24.1+InfluxDB0.13+Grafana4.0.2搭建Docker1.12.3 Swarm集群性能监控平台

    目录 [TOC] 1.基本概念 ​ 既然是对Docker的容器进行监控,我们就不自己单独搭建cAdvisor.InfluxDB.Grarana了,本文中这三个实例,主要以Docker容器方式运行. 本 ...

随机推荐

  1. 论Oracle字符集“转码”过程

    本文将通过实验来演示一下Oracle字符集“转码”的确认过程. 1.实验环境说明 客户端是Windows XP操作系统的SQL*Plus程序,客户端字符集是936(对应Oracle的ZHS16GBK字 ...

  2. install window7

    install window7 http://www.zhujixc.com/win7home/http://jingyan.baidu.com/album/5bbb5a1b3e301713eba17 ...

  3. POJ 2516 最小费用最大流

    每一种货物都是独立的,分成k次最小费用最大流即可! 1: /** 2: 因为e ==0 所以 pe[v] pe[v]^1 是两条相对应的边 3: E[pe[v]].c -= aug; E[pe[v]^ ...

  4. Delphi XE5 android openurl(转)

    直接上代码: unit OpenViewUrl; interface // URLEncode is performed on the URL// so you need to format it p ...

  5. tomcat集群时统计session与在线人数

    tomcat集群时,原来通过HttpSessionListener实现类监听session的创建和销毁来统计在线人数的方法不再有效,因为不是每个人登陆都会在同一个tomcat服务器上,而在另一台tom ...

  6. 【弱省胡策】Round #5 Construct 解题报告

    这个题是传说中的 Hack 狂魔 qmqmqm 出的构造题.当然要神. 这个题的本质实际上就是构造一个图,然后使得任意两点间都有长度为 $k$ 的路径相连,然后对于任意的 $i < k$,都存在 ...

  7. ACM题集以及各种总结大全!

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  8. mac忘记密码的解决办法

    开机, 启动时按"cmd+S".这时,你会进入Single User Model,出现像DOS一样的提示符 #root>.请在#root>下 输入 (注意空格, 大小写 ...

  9. pthread_create()之前的属性设置

    一.pthread_create()之前的属性设置1.线程属性设置我们用pthread_create函数创建一个线程,在这个线程中,我们使用默认参数,即将该函数的第二个参数设为NULL.的确,对大多数 ...

  10. Android 图片缩放

    以下演示将一个ImageView的高度设置为两倍: 布局文件main.xml <?xml version="1.0" encoding="utf-8"?& ...