在上文“在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信息):
- <?php
- phpinfo();
- ?>
浏览网站,如果出现如下的界面,说明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内部的数据分布算法,解答并总结本文最上面所说的那些疑惑。敬请期待。