文档章节

Nginx与Redis解决高并发问题

epiclight
 epiclight
发布于 2015/05/31 22:40
字数 688
阅读 411
收藏 1

 

Nginx与Redis解决高并发问题

分类: PHP2013-01-13 20:40 4895人阅读 评论(0) 收藏 举报

原文链接:http://bbs.phpchina.com/forum.php?mod=viewthread&tid=229629

第一版产品采用的是JqueryNginxPHPCI框架),MemcacheMysql这种常用的架构。作为一名PHP工程师对于这种架构已经非常的熟悉了,目前站点并发并不是很高,线上环境使用的是阿里云主机,1.5G的内存,PHP并发能支持400~500左右。因为使用memcache的原因,如果在并发特别高的情况下,除了带宽瓶颈以外就可能会是一直引以为傲PHP瓶颈了。增加机器便会增加成本,对于一个刚刚上线运行的项目,要求公司扩大投入是不合理的。

 

     于是在第二次改版的过程中我们尝试放弃PHP,采用OpenResty中的LuaJit模块直接读取redis中的数据以Json的格式返回给前端页面展示,使用PHP脚本定时执行向redis里面更新内容。这样整合个前端过程就没啥phpmysql哈事了(除后端定时执行脚本之外)。凭着nginxredis的高并发,还怕啥呀!。下图为新的架构主要结构。

 

Nginx.bmp


        Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcache这类key-value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了PythonRubyErlangPHP客户端,使用很方便。
性能测试结果:SET操作每秒钟110000 次,GET操作每秒钟81000 

        有了Redis作为保障,新架构就可以开搞了,使用到的主要关键词由openRestyLuaJitLuaRedisPHPPHPRedisJSonJQuery等组成。读者可以搜索下各名词了解它们的功能。下面是openResty中的Nginx配置:

nginx.conf
server {
        listen   80;

        root/home/boolean/Htdocs/lib.bincent.com;
        index index.htmlindex.htm;
        server_namelib.bincent.cn;

        #默认请求Html转发到apache,这里你可以根据自己情况配置
        location /
        {
                proxy_redirect off; 
                proxy_set_header HOST$host;  
                proxy_set_headerSERVER_ADDR $server_addr;  
                proxy_set_headerSERVER_PORT $server_port;  
                proxy_set_headerREMOTE_ADDR $remote_addr;  
                proxy_set_headerREMOTE_PORT $remote_port;  
                proxy_pass  http://lib.bincent.cn:8080;
        }

           #更新redis
        location /set_redis
        {
            internal;
            set_unescape_uri$key $arg_key;
                set_unescape_uri$val $arg_val;
                redis2_queryset $key $val;
            redis2_pass127.0.0.1:6379;
        }

           #读取redis
        location /get_redis
        {
            internal;
            set_unescape_uri$key $arg_key;
            redis2_queryget $key;
            redis2_pass127.0.0.1:6379;
        }

           模拟的简单请求
        location /json
        {
            default_typetext/html;
                 content_by_lua_file/home/boolean/Htdocs/lib.bincent.com/lua/redis.lua;
        }

}

redis.lua文件
#通过URL更新redis

functionsetRedis(key, val)

    localres = ngx.location.capture('/set_redis', {

                args= {

                     key= key,

                     val= val

                    }

                })

    ifres.status == 200 then

        returntrue

    else

        returnfalse

    end

end

#通过URL读取redis

functiongetRedis(key)

    localcapture = ngx.location.capture('/get_redis', {

                args= {

                    key= key

                    }

                })

    localparser = require 'redis.parser' --require redis.parser

    localres, err = parser.parse_reply(capture.body)

   

    returnres

end

#URL参数$_GET['a']

locala = ngx.var.arg_a

if'clean' == a then

    --重置redis

    ifsetRedis('love_number', 0) then

        ngx.say("CleanRedis Is Success!")

    else

        ngx.say("CleanRedis Is failted!")

    end

else

    --读取redis

    locallove_number = getRedis('love_number') + 1

    setRedis('love_number',love_number)

    ngx.say("CurrentLove Number Is: ", love_number)

end


本文转载自:http://blog.csdn.net/vboy1010/article/details/7892120

epiclight
粉丝 3
博文 41
码字总数 79
作品 0
深圳
架构师
私信 提问
亿级流量电商详情页系统的大型高并发与高可用缓存架构实战

对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术。然而,行业里很多朋友对缓存技术的了解与掌握,仅仅停留在掌握redis/memca...

登录404
2017/06/05
1K
0
大型站点高并发架构技术

大型站点高并发架构技术 高并发: 高并发主要是由于网站PV访问量大,单台服务器涌承载大量访问所带来的压力,所以会采用多台服务器进行分流,采用服务器集群技术,对于每个访问会被发送到哪台...

浮躁的码农
2018/01/15
0
0
求MySQL单库在高并发下通过读取数据判断是否写入数据的替代方案?

环境:mysql5单库(innodb),php5,nginx 现在的逻辑判断如下: 通过mysql进行查询,有数据不进行任何操作,无数据进行写入一条新数据 问题:当并发量大的时候,mysql会同时插入相同的数据3...

Sturn
2015/04/26
1K
13
「码渣充电」《Nginx核心知识》反向代理与负载均衡原理

反向代理与负载均衡原理 第四部分中介绍反向代理与负载均衡,分为两大块,先介绍http 7层的反向代理,再介绍stream模块提供的4层负载均衡。在介绍反向代理的过程中,还会按照一种顺序,一个请...

java知识分子
01/17
0
0
百度、阿里、腾讯、京东、大型互联网分布式架构必备技能

分布式架构 迎接高并发大数据的挑战,从深度到广度完善知识体系,成为下一个互联网高薪人才。 理论结合实战,透彻理解分布式架构及其解决方案。 面向人群 1、工作1-5年需要突破瓶颈; 2、传统...

Java高级架构
2017/12/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

css3D 全景图 - 含有定位的文字Label

查看全景效果 完整代码 <style type="text/css"> body { margin: 0px; } .canvasWrap { width: 100%; height: 600px; backgro......

tianyawhl
16分钟前
0
0
JS利用新的参数刷新easyui的tab的panel的url

思路:根据浏览器地址,截图?之前的url作为head,然后把url后面的参数解析为object对象,再根据传入的参数对象,重置参数对象,最后重新拼接url JS: /** * 更新panel的url * @returns */fu...

文文1
17分钟前
0
0
jmeter集群测试。

jmeter集群测试的官方文档:http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html 一、测试机器。 集群测试的电脑,分为2种: Master 运行JMeter GUI 界面(j...

王坤charlie
17分钟前
0
0
网页结构简介

有人说“互联网中有50%以上的流量是爬虫”,第一次听这句话也许你会觉得这个说法实在太夸张了,怎么可能爬虫比用户还多呢?毕竟会爬虫的相对与不会爬虫的简直少之又少。 但是很多爬虫工程师或...

猪哥66
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部