RabbitMQ消息队列
消息队列:用来存储不需要立即响应的消息,可以实现削峰、异步、解耦的作用;
消息队列中间件应用场景:
异步处理: 在注册服务的时候,如果同步串行化的方式处理,让存储数据、邮件通知等挨着完成,延迟较大,采用消息队列,可以将邮件服务分离开来,将邮件任务之间放入消息队列中,之后返回,减少了延迟,提高了用户体验;流量消峰(消除高峰):如淘宝购物节,先进先出原则。 秒杀活动中,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。 服务器在接收到用户请求后,首先写入消息队列。这时如果消息队列中消息数量超过最大数量,则直接拒绝用户请求或返回跳转到错误页面。秒杀业务根据秒杀规则读取消息队列中的请求信息,进行后续处理;架构解耦: 电商里面,在订单与库存系统的中间添加一个消息队列服务器,在用户下单后,订单系统将数据先进行持久化处理,然后将消息写入消息队列,直接返回订单创建成功,然后库存系统使用拉/推的方式,获取订单信息再进行库存操作;
队列框架
RabbitMQ server:消息队列服务,用于接收生产者产生的消息,并将消息分配给消费者producer:生产者, ...
Redis集群
Redis集群:非关系型数据库,以键值对的形式来存储数据,数据存储在内存中,支持数据的持久化,通过持久化文件RDB,AOF,也可以用作缓存服务器,从redis3版本开始支持cluster(集群)功能
Redis集群的特点1)redis集群是去掉中心化,群集中每一个节点都可以接收客户端的连接请求,节点之间通过总线端口互相通信,总线端口与redis对客户端提供服务的端口之间有固定的偏移量10000,例:redis监听的端口为7000,则总线端口为17000
2)redis集群中的节点通过哈希槽的槽点来分配要读取和写入的数据,槽点数量为16384个取值范围为0-16383,集群中的主节点平均分配着些槽点,当数据要写入或者读取时,会对数据的键进行CRC16算法的计算得到的值在对16384范围内进行提取数据,对最终结果进行和槽点的匹配,来判断该数据应该写入到哪个节点或者从哪个节点读取
3)Redis支持主从复制,每隔主节点可以有一个到多个从节点,主节点对外提供服务,从节点只是备份数据,当主节点故障时会从它的从节点中随机选一台作为新的主节点提供服务
4)Redis集群中节点直接可以互相投票,当超过 ...
Redis缓存
Redis介绍非关系型数据库,基于键值对进行存储数据,可以用来缓存动态数据,将动态数据缓存在内存中,通过aof或者持久化方式写入到硬盘中
特点:支持多种数据类型支持分布式存储功能丰富
常用命令
12345678910set key value :添加键值对get key:查看指定键对应的值mset key1 value [key2 value2]... :批量创建键值对mget key1 [key2]...:批量查看键对应的值del key1 [key2]..:批量删除键值对append key value:对指定键的值进行追加select index:切换数据库move key db:迁移数据keys *:查看当前数据库中所有的键值对flushall:清空redis中所有键值对
Redis缓存搭建Redis缓存lnmp中MySQL的数据,通过php中间件
实验环境
一台lnmp环境的linux即可
最终效果
用户多次访问动态页面时,从redis缓存中读取数据
调整php-fpm配置文件1234vim /usr/local/php5/etc& ...
Varnish多机缓存
修改配置文件
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143vim /usr/local/varnish/default.vcl probe health { .url = "/"; # 检查请求的url路径 .timeout = 3s; # 超时时间3s . ...
Varnish配置文件参数
配置文件模块123456789101112131415vcl_recv:用来接收处理用户的请求vcl_hash:如果请求时静态的数据,则去查看varnish本身的缓存vcl_pass:当请求为动态数据时,则去后端(fetch)获取vcl_pipe:不符合的请求返回错误页面vcl_hit:本地找到客户端请求的数据vcl_miss:本地没有找到客户端请求的数据vcl_fetch(backend_response):将数据交给后端的节点vcl_deliver:将响应交给客户端
预设变量123456789101112131415161718192021222324req:客户端发送给varnish请求使用的变量(req=request)req.url:客户端请求urlreq.http:客户端请求的请求头部bereq:varnish给后端的服务端的请求使用的变量(bereq:backend request)bereq.url:varnish请求urlbereq.http:varnish请求头部信息resp:varnish向客户端响应使用的变量(resp:response)resp.ht ...
Varnish单机缓存
部署略……
修改配置文件12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485[root@localhost ~]# vim /usr/local/varnish/default.vcl probe health { # 健康检查 .url = "/"; # 健康检查根目录 .timeout = 5s; # 健康检查超时时间 .interval = 1s; # 间隔时间 .window = 5; # 同时开启5个窗口 .threshold = 3; # 至少保证三个窗 ...
Varnish反向代理+负载均衡
Varnish:可用来部署反向代理服务,将静态数据缓存在内存中,响应速度快,但是不支持数据持久化,可以对缓存的数据的缓存时间精确到秒,使用VCL进行管理、支持状态引擎、自带日志、监控、命令行管理模式等工具
varnish的特点1、数据缓存在内存中,速度比较快,支持虚拟内存,I/O性能好,能够很好的嵌入到磁盘当中2、数据不支持持久化,断电或者重启后,数据会丢失(存放不必要的数据)3、varnish支持精确到秒的缓存4、支持vcl管理5、抗DDOS攻击,1个varnish可以抗1个G的DDOS攻击
varnish负载均衡调度算法:round_robin 动态轮询 rrfallback 选择第一个正常的服务器random:随机hash:会话保持
服务器信息
IP
环境
172.16.1.12
Varnish
172.16.1.13
WEB-One
172.16.1.14
WEB-Two
172.16.1.15
Client
varnish反向代理最终效果
客户机通过访问varnish代理服务器,获取web终端的页面
部署varnish解决依赖关系1yum -y ...
memcache动态缓存
Memcache:分布式缓存服务器,将数据缓存在内存中,基于键值对存储数据,不支持数据持久化,可以提高用户的访问速度并且缓解后端数据库的压力
服务器信息
IP
环境
172.16.1.12
LNMP
安装libevent123tar zxf libevent-2.0.22-stable.tar.gzcd libevent-2.0.22-stable./configure --prefix=/usr/local/libevent && make && make install
安装memcached123tar zxf memcached-1.5.9.tar.gzcd memcached./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent && make && make i ...
rsync-inotify实时同步
Rsync命令格式:推送数据1rsync [选项] src user@host:dest
提取数据1rsync [选项] user@host:src dest
常用选项:-r:递归同步目录-l:同步软链接文件-z:同步大文件时进行压缩-v:同步时显示详细信息-o:同步时不修改属主-g:同步时不修改属组-p:同步时不修改权限–delete:同步时,如果目标端存在源端没有的数据,则先将这些数据删除再进行同步,需要搭配选项-r使用-a:具有以上选项的功能除了-v
服务器信息
IP
角色
172.16.1.12
Rsync
172.16.1.13
Client
Client创建一个接收数据的目录1mkdir /datatest
Rsync配置配置免密登录123ssh-keygenssh-copy-id -i root@172.16.1.12ssh-copy-id -i root@172.16.1.13
创建数据目录并在目录中创建普通文件12mkdir /data && cd /datatouch test
推送数据到Clien ...
负载均衡+反向代理
修改配置文件123456vim /usr/local/nginx/conf/nginx.conf在http字段中添加: upstream webs { server {web IP+端口} weight=1; server {web IP+端口} weight=1; }
1234567在server字段中添加: location ~ \.html { proxy_pass http://webs; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_ser_header X-Forwarded-For $proxy_add_x_forwarede_for; proxy_next_upstream http_5 ...
