1 概念
1.1 中间件
中间件是位于平台(硬件、操作系统、网络与数据库)和应用之间的通用服务,不会像应用程序一样提供业务,上面有很多应用接口。当系统升级时,只需要将中间件升级,接口的标准不变,这样上层的应用就可以照常使用。
1.1.1 中间件有以下几个功能
1)由于中间件有很多不同类型的应用接口,所以不同的应用之间、不同的操作系统之间、以及不同的应用与不同操作系统可以通过中间件通信。即相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。
2)中间件可以为上层应用程序提供运行与开发的环境;
3)提供Java脚本的动态网页服务。用PHP脚本编写的动态网页,在被客户端访问时,客户端会访问到web服务器后直接访问数据库调用存储的数据;而用Java脚本编写的动态网页在被客户端访问时,客户端在访问到web服务器后还需要通过中间件才能访问数据库进而调用存储的数据。
注1:数据库是软件,类似于高级的文件系统,定义了共享存储的存储和访问的格式。
注2:HTML语法编写的网页属于静态网页,静态网页被客户端访问时,web服务器会直接从本地的 /var/www/html 下调用页面返回给客户而不需要访问数据库。
1.1.2 中间件的分类
web应用型中间件:如Tomcat(free)、weblogic(pay)
消息性中间件:如rabbit(free,是erlang语言编写的)、mq(IBM)(pay)
缓存型中间件:如memcached(PHP语言编写的)
业务型中间件:如WAS、tuxedo
rabbit消息型中间件的工作原理——例如,Windows系统A想要传达消息给Linux系统B,那么A会采用断点续传的方式发送消息给rabbit的,类似于发短信,A发出消息给rabbit后不会理会到底能不能传到、什么时候能传到;如果B此时宕机不能立即收到消息,则等B恢复正常后还是能收到消息。
缓存型中间件工作模型:client——VIP——若干node节点——缓存型中间件——数据库——共享存储。所以当客户访问VIP时,VIP会根据算法分配任务给某一个节点,那么该节点就会访问数据库调用存储的数据。而缓存型中间件有缓存功能,当访问过VIP的客户再次访问时,节点可以直接调用中间件缓存中的数据,这样就能减缓数据库的压力,并且能加快数据的调用速度。
1.1.3 中间件应具有如下一些特点
1)满足大量应用的需要 ;
2)运行于多种硬件和OS平台;
3)支持分布计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互;
4)支持标准的协议;
5)支持标准的接口。
2 实现memcache型中间件
2.1 memcache概念
1)Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
2)Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
3)Memcached 同时是一个开源的、高性能、具有分布式内存对象的缓存系统。它通过减轻数据库负载加速动态WEB应用。
4)缓存一般用来保存一些常用存取的对象或数据,通过缓存来存取对象或数据要比磁盘存取快。
5)Memcached是一种内存缓存,把经常需要存取的对象或数据缓存在内存中,内存中缓存的这些数据通过API的方式被存取,数据就像一张大的HASH表一样,以Key-value对的方式存在。
6)Memcached通过缓存经常被存取的对象或数据,来减轻数据库的压力,提高网站的响应速度,构建速度更快的可扩展的WEB应用。
2.1.1 memcached与数据库写流程
1)检查客户端请求的数据是否在Memcache中,如果存在,直接将请求的数据返回,不在对数据进行任何操作。
2)如果请求的数据不在Memcache中,就去数据库查询,把从数据库中获取的数据返回给客户端,同时把数据缓存一份Memcache中
3)每次更新数据库的同时更新Memcache中的数据库。确保数据信息一致性。
4)当分配给Memcache内存空间用完后,会使用LRU(least Recently Used,最近最少使用)策略加到其失效策略,失效的数据首先被替换掉,然后在替换掉最近未使用的数据。
2.1.2 memcached特征
1)协议简单:使用基于文本行的协议,能直接通过telnet在Memcached服务器上存取数据
2)基于libevent的事件处理:libevent利用C开发的程序库,它将BSD系统的kqueue,Linux系统的epoll等事件处理功能封装成为一个接口,确保即使服务器端的链接数增加也能发挥很好的性能。Memcached利用这个库进行异步事件处理
3)内置的内存管理方式:Memcached有一套自己管理内存的方式,这套方式非常高效,所有的数据都保存在Memcached内置的内存中,当存入的数据占满空间时,使用LRU算法自动删除不使用的缓存,即重用过期的内存空间。Memecached不考虑数据的容灾问题,一旦重启所有数据全部丢失。
4)互不通信的分布式:各个Memecached服务器之间互不通信,都是独立的存取数据,不共享任何信息。通过对客户端的设计,让Memcached具有分布式,能支持海量缓存和大规模应用。
2.2 配置memcached
1)配置memcached
配置epel.repo源,略
# yum --enablerepo=epel install memcached libmemcached -y
# yum install httpd php php-mbstring php-pear php-pecl-memcache -y
# memcached -d -m 256 -u root -p 11211 -c 1024
-P /tmp/memcached.pid
//-d 指定守护进程;-m指定缓存大小;-u指定属主;-p指定端口号;-c指定最大连接数;-P指定文件位置/tmp目录下
# systemctl restart memcached
# telnet 127.0.0.1 11211 或者 telnet 本机名 11211
stats 查看状态 quit 退出Telnet ; Ctrl+】 返回telnet> ; ? 帮助
2)使其支持PHP脚本
# vim /etc/php.d/z-memcached.ini ,写入:
extension = " memcached.so " //添加一个扩展模块memcached.so
# echo "<?php phpinfo()?>" > /var/www/html/index.php
# systemctl resetart httpd
3)使用真实机浏览器测试,能看到PHP测试页面有一个单独的memcached区域
http://memcached服务器的IP
转载请注明出处,谢谢!