大佬教程收集整理的这篇文章主要介绍了企业架构缓存中间件分布式memcached,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_696_94@一、大型网站优化
随着网站迭代开发,访问会变慢
LNMP架构中网站应用访问流程
访问流程越多,访问速度和出现问题的几率也越大
优化访问速度,就需要减少访问步骤或者提高单步骤的速度
根据网页的访问流程,可以进行以下优化:
①提高web服务器并发 负载均衡(多台服务器架构) Nginx
②页面静态化 把经常访问,但是数据不经常发生变动的动态页面,制作为静态页面
③内存缓存优化 把经常访问的数据,加载到内存中使用
④数据库优化 很多时候,还需要取数据库信息,所以优化数据库本身
@H_696_94@二、背景描述及其方案设计随着业务量增加,访问量越来越大,用户在访问某些页面数据时,通过慢查询日志发现慢查询sql,经过优化之后效果还是不够明显。而此类数据发生变动的频率又较小,故提出使用缓存中间件(一般会将数据存储到内存中)的方式,降低MysqL的读压力,提高整个业务架构集群的稳定和快速响应能力
根据以上业务需求,准备加入缓存中间件服务器
根据以上业务需求和方案,服务器架构升级为如下示意图
在本次业务架构中,使用缓存中间件解决以下两个问题:
①session共享
②缓存热点数据,首页面的分类信息
@H_696_94@三、memcached介绍和安装启动关于缓存的过期,有效期问题,由业务编程代码实现
①上传软件到服务器
软件包名称memcached-1.5.8.tar.gz
②解压并编译安装
#memcache依赖libevent 安装libevent-devel解决
sHell > yum -y install libevent-devel
#编译安装memcached
sHell > tar xvf memcached-1.5.8.tar.gz
sHell > cd memcached-1.5.8
sHell > ./configure --prefix=/usr/local/memcached
sHell > make && make install
③查看软件启动参数,并启动
sHell > cd /usr/local/memcached/bin
sHell > ./memcached -h
启动memcached
#进入memcached文件目录
sHell > cd /usr/local/memcached/bin
#后台启动memcached 可以创建一个普通用户(memcached) 用来启动管理memcached软件
sHell > ./memcached -uroot -d
#进程查看是否启动成功
sHell > ps aux |grep memcached
@H_696_94@四、memcached使用
#安装telnet客户端
sHell > yum -y install telnet
#通过telnet连接11211端口
sHell > telnet 127.0.0.1 11211
#连接之后敲击多次,如果看到error,即为连接成功
#显示error的原因是,没有输入命令,所以memcached服务器回复error
语法:set
set 命令用于将 value(数据值) 存储在指定的 key(键) 中
如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用
devops
flag 服务端提供的一个标识,默认没什么意义,默认可以传个0,这个标识是为了编程语言一个状态,例如:flag(0,1) 代表是否采用压缩机制 0代表不压缩,1代表压缩
bytes 字节 计算机存储的最小单位 KB MB GB TB BB YB ZB
语法:add
add 命令用于将 value(数据值) 存储在指定的 key(键) 中
如果 add 的 key 已经存在,则不会更新数据(过期的 key 会更新),之前的值将仍然保持相同,并且您将获得响应 NOT_STORED
@H_419_316@
语法:replace
replace 命令用于替换已存在的 key(键) 的 value(数据值)
如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED
语法:append
append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据
语法:prepend
prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据
语法:@R_674_9421@e
@R_674_9421@e 命令用于删除已存在的 key(键)
语法:flush_all
flush_all 命令用于清理缓存中的所有 key=>value(键=>值) 对
该命令提供了一个可选参数 time,用于在制定的时间后执行清理缓存操作
语法:get
get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空
语法:incr(相加)/decr(相减)
计数器 每做一次操作 +1
incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作
incr 与 decr 命令操作的数据必须是十进制的32位无符号整数
语法:stats
stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等
缓存命中率:命中数(get获取到数据)/获取次数(get的次数)
get_hits/cmd_get,如果命中率低,业务代码缓存有问题,命中率为0,缓存没有起作用
缓存穿透
访问的数据,数据库不存在的数据,每次都不能够生成缓存,每次请求都直接访问数据库,穿透了缓存,缓存没有起到作用。数据库压力没有得到缓解。
解决方案,数据库查不到的,也做一个空缓存。
缓存雪崩
缓存具有失效时间,如果缓存失效时间都是一样,本来应该请求缓存的,但是因为缓存失效了,全部请求到了数据库,数据库压力剧增,可能会造成数据库宕机,进而造成系统崩溃。
解决方案,设置缓存的失效时间均匀分布。
需要php的运行环境
上传到虚拟机主机可以访问的目录即可。
本次上传到了server01服务器的/usr/local/Nginx/html/tp5shop/public下
②修改连接参数
sHell > vim /usr/local/Nginx/html/tp5shop/public/memcached_tool.php
示例配置
登录地址看实际的地址,演示用,软件脚本在server01上,memcached服务在server08上,所以地址应该填写memcached服务所在地址server08的IP(192.168.17.107)
③查看使用
①如果key过期了,value会及时删除么,空间会及时清空么?
②如果分配的存储空间,写满了,还允许写么?
比如php的里session机制 懒惰机制 php垃圾回收机制 gc回收 python 变量垃圾回收机制
编程语言中,变量分配 栈空间(变量名称) 堆空间(变量值)
@H_840_157@memcached1.4.25之后 就不是懒惰机制了。
不过,有些情况下 LRU 机制反倒会造成麻烦。memcached 启动时通过“M”参数可以禁止 LRU
@H_696_94@五、php使用memcached在LNMP架构中,如果需要使用到memcached。首先需要安装对应的扩展,php7以上需要安装R_457_11845@emcached扩展。
①上传php扩展源码包
需要在web服务器的上安装扩展,server01和server03
@H_856_4@memcached-3.1.3.tgz php的扩展 依赖libmemcached1.x以上版本libmemcached-1.0.18.tar.gz 依赖
②解压编译安装
#1、解决libmemcached依赖
sHell > tar xvf libmemcached-1.0.18.tar.gz
sHell > cd libmemcached-1.0.18
sHell > ./configure --prefix=/usr/local/libmemcached && make && make install
#2、源码编译php扩展
sHell > tar xvf memcached-3.1.3.tgz
sHell > cd memcached-3.1.3
#扩展源码包和php关联生成configure文件
#如果执行找不到phpize,说明之前没有给php安装目录bin目录配置环境变量,重新配置即可
sHell > phpize
#编译安装php的R_457_11845@emcached扩展
sHell > ./configure --with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl
sHell > make && make install
编译完成生成的扩展文件
③在php.ini配置文件里开启
sHell > vim /usr/local/php/etc/php.ini
重启php-fpm服务
④检测扩展
方法一:php -R_457_11845@
通过php -R_457_11845@调用查看php所加载的依赖模块
sHell > php -R_457_11845@ |grep memcached
方法二:通过web页面访问phpinfo
<?php
phpinfo();
编写一个页面,通过web访问
php代码测试使用memcached
示例代码
<?php
//实例化类
$mem = new memcached();
//调用连接memcached方法 注意连接地址和端口号
$mem->addServer('192.168.17.107',11211);
//存数据
var_dump($mem->set('name','lnmp'));
//取数据
var_dump($mem->get('name'));
@H_696_94@六、企业案例实现
session共享:
分布式负载均衡架构中,web服务器间的session是不共享(默认session存储在本地的文件的),会造成session校验不一致。校验验证码不通过,登录之后session不一致,造成无法判断是否登录。
解决方案:
①session生成校验在同一台服务器 Nginx调度算法 ip_hash
②session共享 多台web服务器可以调用到session
文档参考
①修改项目配置文件
server01和server03都需要修改,并且web服务器都要安装好memcached扩展
sHell > vim /usr/local/Nginx/html/tp5shop/application/config.php
修改完成之后,之后的请求所生成的session,就被写入到memcached中了。
②访问测试
把经常访问到的数据,发生变动较小,可以存储到内存缓存中,提供使用速度
注意修改web服务器的文件时,一定要都修改web1和web2
①修改缓存数据
修改代码文件
sHell > /usr/local/Nginx/html/tp5shop/application/home/controller/Base.php
②修改项目缓存配置
sHell > vim /usr/local/Nginx/html/tp5shop/application
以上是大佬教程为你收集整理的企业架构缓存中间件分布式memcached全部内容,希望文章能够帮你解决企业架构缓存中间件分布式memcached所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。