LAMP架构演进到LAMPGC,再演进到LNMLGC(linux+nginx+mysql+lua+gearman+C)

LAMP是一个大众的架构了,linux+apache+mysql+php

在我们系统的架构中,做了进一步的演进,linux+apahce+mysql+php+gearman+C

php作页面的展示

核心业务逻辑由C语言实现,php通过gearman中间件调用C任务

由于apache在高并发方面不太给力,因此在需要高并发的场景中,我们进一步演进,linux+nginx+mysql+php+lua+gearman+C

页面部分由nginx+fastcgi+php-fpm来展示

高并发的业务调用由nginx+lua+gearman+C来实现

在这里重点介绍nginx怎样调用gearman中间件

先看下apache+php调用gearman的情况,同步一调用一gearman任务,假如这个任务要3S钟,那么当前这个apache的httpd进程就会被阻塞,它无法为其它客户端服务了

nginx在高并发异步调用的性能够强,这地球人都知道了

lua的协程,也可以实现并发的异步调用

再来看看nginx+lua调用gearman的实现:

nginx同样是一个worker,worker进程里通过lua协程调用gearman任务,即使任务要3S钟,在这3S钟内这个worker进程还是可以为其它客户端服务,这依赖于nginx的epoll的事件触发非阻塞调用和lua协程异步调用的优势,这种方式可以实现高并发的业务调用。

下面给出lua-nginx-module的安装及简单配置过程:

1、需要的源码文件
shell> ls
drwxr-xr-x  6 1000 1000    4096 Feb 26 03:14 LuaJIT-2.0.3
drwxrwxr-x 10 root root    4096 Jun  1  2014 lua-nginx-module-0.9.8
drwxr-xr-x  9 1001 1001    4096 Feb 18 03:14 nginx-1.7.2
drwxrwxr-x  9 root root    4096 Sep 26 02:43 ngx_devel_kit-0.2.19
drwxr-xr-x  8 1169 1169    4096 Feb 26 03:17 pcre-8.21

2、安装luajit
http://luajit.org/download/LuaJIT-2.0.3.tar.gz

shell> cd LuaJIT-2.0.3
shell> make
shell> make install

因为安装在缺省路径,所以LuaJIT对应的lib,include均在/usr/local目录里。

3、编译nginx
https://codeload.github.com/openresty/lua-nginx-module/tar.gz/v0.9.8
https://codeload.github.com/simpl/ngx_devel_kit/tar.gz/v0.2.19

shell> ./configure --prefix=/usr/local/nginx --add-module=../ngx_devel_kit-0.2.19 --add-module=../lua-nginx-module-0.9.8 --with-pcre=../pcre-8.21

4、启动nginx
shell> cd /usr/local/nginx/sbin
shell> ./nginx
./nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
提示找不到luajit库文件

shell> echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
shell> ldconfig

shell> ./nginx
成功

5、nginx应用
将下列配置加入到/usr/local/nginx/conf/nginx.conf中:
        location /lua {
            set $test "hello, world.";
            content_by_lua '
                ngx.header.content_type = "text/plain";
                ngx.say(ngx.var.test);
            ';
        }

shell> ./nginx -s reload

浏览顺访问: http://172.16.18.114/lua
显示:hello, world.

大功造成!

6、安装lua-resty-gearman模块
https://github.com/zhhchen/lua-resty-gearman/tree/master/lib/resty

7、nginx通过lua脚本调用gearman
在nginx.conf的http段增加:
lua_package_path "/usr/local/lua-resty-gearman/lib/?.lua;;";

在server下增加:
        location /test {
            content_by_lua '
                local gearman = require "gearman"
                local gm = gearman:new()

                gm:set_timeout(1000)    -- 1 sec

                ngx.header.content_type = "text/plain"

                local ok, err = gm:connect("172.16.18.162", 4730)
                if not ok then
                    ngx.say("failed to connect: ", err)
                    return
                end

                ok, err = gm:submit_job("reverse", "abcdef")
                -- submit_job,submit_job_bg,submit_job_high,submit_job_high_bg,submit_job_low,submit_job_low_bg are supported
                -- submit_job(function_name, workload[, unique])

                if not ok then
                    ngx.say("failed to submit job: ", err)
                    return
                else
                    ngx.say(ok)
                end

                -- put it into the connection pool of size 100,
                -- with 0 idle timeout
                local ok, err = gm:set_keepalive(0, 100)
                if not ok then
                    ngx.say("failed to set keepalive: ", err)
                    return
                end

                -- or just close the connection right away:
                -- local ok, err = gm:close()
                -- if not ok then
                --     ngx.say("failed to close: ", err)
                --     return
                -- end
            ';
        }

浏览顺访问: http://172.16.18.114/test
显示:fedcba

LAMP架构演进到LAMPGC,再演进到LNMLGC(linux+nginx+mysql+lua+gearman+C),布布扣,bubuko.com

时间: 2024-10-24 13:27:45

LAMP架构演进到LAMPGC,再演进到LNMLGC(linux+nginx+mysql+lua+gearman+C)的相关文章

LNMT架构部署:Linux+Nginx+Mysql+Tomcat(负载均衡,动静分离)

环境描述:虚拟机准备两台,一台作为nginx服务器+mysql服务器,IP为:192.168.55.129:另外一台作为2台Tomcat服务器,IP为:192.168.55.130.客户端发来请求,首先由nginx处理,如果为静态内容直接由nginx响应,将结果直接给客户端:如果为动态内容,则由nginx反代至后端的Tomcat服务器. 在IP为192.168.55.129的服务器上安装和配置nginx关闭防火墙和selinux [[email protected] ~]# systemctl

LNAMP(Linux+Nginx+Apache+Mysql+PHP)高性能架构配置实战版

LNAMP(Linux+Nginx+Apache+Mysql+PHP)架构受到很多IT企业的青睐,取代了原来认为很好的LNMP(Linux+Nginx+Mysql+PHP)架构. 那我们说LNAMP到底有什么优点呢,还得从Nginx和apache的优缺点说起. 1)Nginx处理静态文件能力很强 2)Apache处理动态文件很强而且很稳定,把二者综合在一块,性能提升很多倍. 可能很多Linux SA在从事LNMP运维中,会发现PHP(FastCGI)模式会出现一些502错误的现象,这是因为Ngi

LAMP架构搭建+Discuz论坛搭建【weber出品必属精品】

一.     本机简介: 本机系统: CentOS-6.4-x86_64 主机名:oracle.ywb IP地址:192.168.146.129 二.     在Linux环境下安装Apache步骤 首先将准备好的文件通过PSCP发送至Linux的/Root/test/soft目录下 在windows下按住Ctrl+R,打开运行,输入CMD进入DOS命令行.在dos命令行中使用pscp –scp  命令将要上传的文件上传至Linux中. 上传成功后.我们总共要安装四个文件.第一个我们首先解压:a

LAMP架构搭建以及基于LAMP架构的主流论坛和博客搭建过程详解

了解网站架构的朋友都知道,现在很多网站的架构都是采用LAMP(Linux+Apache+Mysql/Mariadb+Php)的,至于LAMP架构本身我们就不做过于深入的探讨了,今天我给大家分享的是关于如何搭建LAMP构架,以及如何基于lamp架构去搭建目前国内比较流行的两大开源论坛(phpwind.discuz)一大开源博客(wordpress),通过这个过程也就能让大家明白我们经常上的论坛以及博客,包括包括我们访问的各个网站到底是如何工作起来的. 注意:为了方便给大家展示实验效果,我们就直接关

Linux之LAMP架构搭建配置

Linux之LAMP架构搭建配置 LAMP简介 LAMP定义指Linux(操作系统).ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和PHP(有时也是指Perl或Python) 的第一个字母,一般用来建立web应用平台. 对于大流量.大并发量的网站系统架构来说,除了硬件上使用高性能的服务器.负载均衡.CDN 等之外,在软件架构上需要重点关注下面几个环节: 使用高性能的操作系统 (OS) . 高性能的网页服务器 (Web Server) .高性能的数据库(Data

linux搭建LAMP架构服务

实验环境以及目标:一台Rad Hat linux 6.5-64位操作系统作为服务器,搭建LAMP架构,搭建动态PHP以及BBS论坛.一台windows 7-32位虚拟机作为客户端能够正常访问linux服务器所搭建的服务. 实验步骤总体分为:1.使用linux先搭建apache网站服务:然后搭建MySQL数据库用来存放论坛文件:然后是搭建PHP服务,用于加载论坛动态模块:最后是BBS论坛.最最后再搭建一个DNS服务用来解析域名服务. 下面是详细操作过程,由于前面已经写了关于apache和MySQL

11.1 LAMP架构介绍 11.2 MySQL、MariaDB介绍 11.3/11.4/11.5 MySQL安装

11.1 LAMP架构介绍 11.2 MySQL.MariaDB介绍 11.3/11.4/11.5 MySQL安装 扩展 mysql5.5源码编译安装 http://www.aminglinux.com/bbs/thread-1059-1-1.html mysql5.7二进制包安装(变化较大) http://www.apelearn.com/bbs/thread-10105-1-1.html 11.1 LAMP架构介绍 Linux + Apache(httpd)+ MySQL + PHP  PH

LAMP架构介绍、MySQL,MariaDB介绍、MySQL安装

LAMP架构介绍 LAMP指的L(linux).A(Apache).M(mysql).P(php):apache+php需要在一台主机,mysql可以分开也可以在同一台主机上运行. 工作模式如下: 静态文件:图片.文档,不用通过加载mysql去取数据 动态文件:js等通过php模块调用mysql,再通过apache展示来实现的动态资源 MySQL,MariaDB介绍 mysql:关系型数据库,由sun公司研发,后被oracle公司收购: 其版本: community 社区版:enterprise

LAMP架构介绍及mysql安装

LAMP架构介绍 LAMP是Linux+Apache(httpd)+MySQL+PHP的简写,即把Apache.MySQL以及PHP安装在linux系统上,组成一个运行环境来运行PHP脚本语言,通常是网站.比如Google.淘宝.百度.51cto博客.猿课论坛等就是用PHP语言写出来的. httpd.PHP.MySQL三个角色可以在一台机器.也可以分开,但httpd和PHP要安装在一台机器上,这也是PHP作为Apache的一个模块存在的,它们两必须在一起. httpd.PHP.MySQL三者如何