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

AI智能体升级实战:从规则匹配到Function Call,准确率提升86%的技术选型之路 AI智能体升级实战:从规则匹配到Function Call的技术演进 文章记录了AI邮件助手从传统规则匹配升级到Function Call的技术迭代过程。通过案例分析,揭示了规则匹配的三大核心问题:覆盖不全(用户表达千变万化)、组合困难(多条件容易漏掉)、维护噩梦(每个需求都要新增规则)。测试数据显示,规则匹配在复杂查询中的准确率仅51%,严重影响用户体验。 技术团队对比了三种升级方案:1) 继续优化规则匹配(天花板明显);2) 微调专用NLP模型(成本高);3) 采用Function Call(灵活高效) 阅读详情

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

信创服务器(麒麟 V10 SP3)安装 NVIDIA GeForce RTX 5070 驱动 本文介绍了在麒麟V10 SP3系统上安装NVIDIA RTX 5070显卡驱动的详细步骤。首先需要关闭nouveau驱动,安装必要的编译环境和工具,确保内核版本与kernel-devel完全一致。最后运行NVIDIA驱动安装程序,关键选择包括启用DKMS支持、编译模块、禁用32位兼容和nouveau驱动。整个流程适用于海光CPU和Blackwell架构GPU的国产操作系统环境。 阅读详情

相关推荐

XGBoost算法案例 - 红酒品质分类

数据集共包含 11 个特征,共计 3269 条数据. 我们通过训练模型来预测红酒的品质, 品质共有 6 个各类别,分别使用数字: 0、1、2、3、4、5 来表示。

YIAN爱学习的博客 449

LNMP架构——Nginx介绍

LNMP架构——Nginx介绍

乐猿 645

2025年最新Cesium学习示例:Cesium-Examples

2025年最新Cesium学习示例:Cesium-Examples

2403_88103571的博客 1009

从lamp到高可用的web架构的演进

本文受互联网架构大会中美团、滴滴等互联网公司架构演进的启发,并结合自己的实践和实验,从宏观的角度讲述从简单lamp(linux apache mysql php)到高可用web架构的一步步迭代过程。 下面的内容主要是从单一业务的角度考虑的,假设业务的复杂性不变,只有用户量和并发访问量的不断增加。 简单的lamp架构 最原始的web架构,一个httpd、php-fpm、mysql就可以...

GeorgeGuo 2432

CCS配置MSPM0G3507(七) 编码器(TIMER-QEI)

1.选择时钟源 BUSCLK2.时钟分频配置为1分频3.分频系数配置为14.若勾选 Start ,则生成程序后会自动开启定时器的计数,否则需手动在程序中开启5.Load Value 设置为65535。

kaneki_lh的博客 1万+

芯片良率提升:从设计到制造的系统性工程实践

在半导体制造领域,良率是衡量生产效率和成本控制的核心指标,直接关系到芯片的经济效益与市场竞争力。其本质是合格芯片占总产出芯片的百分比,提升良率需要从设计源头到制造末端的全流程协同优化。从技术原理看,它涉及可制造性设计、工艺过程控制、缺陷检测与根因分析等多个复杂环节,尤其在先进制程下,随机缺陷和参数变异成为主要挑战。其技术价值不仅在于降低单颗芯片成本,更能加速产品上市、保障可靠性,并成为企业技术实力的关键体现。应用场景贯穿智能手机、数据中心、自动驾驶和人工智能等所有高端芯片领域。本文将结合【芯片制造】与【良率

weixin_42526068的博客 632

CentOS 安装Gearman及其PHP扩展

一、简介 Gearman是一个分发任务的程序架构,由三部分组成: Gearman client:提供gearman client API给应用程序调用。API可以使用C,PHP,PERL,MYSQL UDF等待呢个语言,它是请求的发起者。 Gearman job server:将客户端的请求分发到各个gearman worker的调度者,相当于中央控制器,但它不处理具体业务逻辑。 Gear

企鹅漫步 2637

麒麟V10等保三级配置实战:从auditd规则到PAM锁定的可信基线构建

Linux安全基线是信息系统可信运行的基础能力,其核心在于身份鉴别、访问控制与安全审计三大机制的协同落地。在国产化信创环境中,麒麟V10作为深度适配飞腾/鲲鹏平台的操作系统,其等保三级合规并非简单套用CentOS加固脚本,而是需围绕内核审计(auditd)、可插拔认证模块(PAM)及国产安全增强机制(如kysec)进行精细化编排。技术价值体现在将抽象条款(如GB/T 22239-2019中6.1.2、6.3.3条)转化为可验证的命令行操作,确保登录失败可锁定、关键行为可追溯、时间偏差不致日志失效。典型应用场

weixin_29969209的博客 594

lnmp架构——架构理解

lnmp架构——架构理解1 lnmp简介2 lnmp工作原理3 lnmp特点4 lamp与lnmp的区别4.1 lamp简介4.2 对比 1 lnmp简介 LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。其中L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。 一般情况下LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。其中PHP是一种在服务器端执行的嵌入HTML文档的

weixin_54719086的博客 1763

手把手教你学Simulink——基于Simulink的输入输出线性化精确转矩控制

由于IOFL控制律中实时引入了当前状态的反馈(id​,iq​,ωe​),电感的变化被非线性项自动补偿,转矩仅出现微小幅度的波动(< 2%),展现出极强的参数鲁棒性。:电压方程中的耦合项(ωe​Lq​iq​和 −ωe​Ld​id​)仅通过前馈补偿,当转速 ωe​较高时,微小的前馈误差会导致显著的d-q轴电流交叉耦合;其中,ud​,uq​为定子电压,id​,iq​为定子电流,Rs​为定子电阻,Ls​为定子电感,ωe​为电角速度,ψf​为永磁体磁链,p为极对数。(步长 Ts​=10μs,即100ns?

MHD0815的博客 82

一文吃透 SAP HANA JSON Document Store:从架构到实战的完整指南

本文详细介绍了SAP HANA的JSON Document Store功能,包括其定位、架构、典型场景以及具体使用方法。文章首先分析了半结构化数据场景下传统关系模型的局限性,说明Document Store如何通过集合(Collection)存储JSON文档来提供灵活性。随后详细阐述了启用方式、SQL语法、与Column Store的联动机制,并提供了大量可直接复用的实战案例。特别强调了Document Store作为HANA内建服务的优势,包括企业级一致性、备份恢复等能力。最后给出了数据类型处理和跨引擎协

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 200

Centos6.5下 Gearman的安装及使用

Gearman简介概况Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。组成Gearman是一个分发任务的程序架构,由三部分组成: Gearman client:提供gearman client API给应用程序调用。API可以使用C,PHP,PERL,MYSQL UDF等待呢个语言,它是请求的

Webben 947

COMSOL介电弹性体数值仿真指南:预拉伸圆形DEA的稳态变形分析(II)

本期博客是《COMSOL介电弹性体数值仿真指南》系列博客中的一期。聚焦于介电弹性体驱动器(DEA)中最为经典的预拉伸圆形DEA驱动器构型,对其在COMSOL平台中的具体建模步骤进行介绍与讨论。

忘了面孔的Batou 353

LNMP架构

一、了解LNMP架构 LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。 (1)Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。 (2)Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。 (3)Mysql...

qq_42711214的博客 4358

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LNMP架构介绍

LNMP架构 LLNMP和·LAMP唯一不同·的是指提供web服务的是Nginx, 在Apache中,PHP是作为一个模块存在的。而在Nginx中,PHP是作为一个独立服务存在的,这个服务叫做php-fpm。 Nginx直接处理静态请求,动态请求会转发给php-fpm. mysql安装 由于之前做LAMP时安装过这里想要安装MySQL,就要先将前面的MySQL删除。 删掉一下文

aoli_shuai的博客 2233

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ngx_lua连接gearmand

lua连接geraman并丢任务 function F.unzip() local cjson = require &quot;cjson&quot; local datas = {} local reqdata={} local gearman = require &quot;gearman&quot; local gm = gearman:new() datas[&quot;...

一方 340

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LAMP架构简述

阅读目录 图片架构详解               LAMP架构以及通信过程 LNMP架构优缺点 Nginx/APACHE + tomcat + MySQL                    图片架构详解               LAMP/LNMP:是有Linux系统,Apache网络服务器或者Nginx服务器,MySQL数据库。php。LAMP/LNMP具有...

哎呦喂的博客 4463

lua-resty-gearman模块

粘贴一段百度对gearman的解释: Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。 lua-resty-gearman模块用于在lua中调用gearman github地址 https://github.com/zhhchen/lua-resty-gearman 调用的代码样...

weixin_33701617的博客 163

Gearman调研/测试/原理分析

http://www.phpboy.net/2014-05/40-gearman-instruction.html 不错!

很多时候,你缺少的不是知识而是热情 1389

LAMP架构之Tomcat

版本声明:jdk6+eclipse4.3+myeclipse2014GA+apache-tomcat8   注意:如今tomcat有两种安装包:jakarta-tomcat这是5之前的;apache-tomcat这是6之后的,其实都是一样的 我用的是这款   1.    安装:我在/usr/local/下tar –zxvf *.tar.gz (这不是标准步骤) 2.    启动tomc

MicroBoy的博客 787

Linux中Gearman安装与使用,分布式消息队列(CentOS-6.5:gearmand-1.1.12)

1 Gearman简介 1.1 概况 Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。 1.2 组成 Gearman是一个分发任务的程序架构,由三部分组成: 1)Gearman client:提供gearman client API给应用程序...

CleverCode的博客 8517

实战搭建Gearman 分布式处理框架 + python客户端

本文只陈述gearman框架的搭建过程,相关的知识点可以去http://gearman.org/查阅 操作系统:SUSE  linux 10 1、 安装gearmand      下载地址为      http://launchpadlibrarian.net/70884576/gearmand-0.20.tar.gz      下载完毕后,解压缩包      tar xvzf  gearmand-0.20.tar.gz      然后进入目录gearmand-0.20执行      ./c

robby213的专栏 1万+

LAMP架构(Ⅰ)

./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php7/etc --with-pdo-mysql=/usr/l...

282

Redis集群,利用Gearman做mysql 的缓存服务器(lnmp架构)

实验环境:rhel7.3 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。Redis集群并不支持处理多个keys的命令,因为这需要 在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误. Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势: 自动分割数据...

Treasured ——的博客 633

gearman

1,gearman的使用需要配置host与port 2,对于分布式网络环境或者有大量任务的应用,我们需要将任务在不同的服务器之间进行分布,这个时候正好是Gearman发挥实力的时候。 3,使用Gearman的应用通常有三部分组成:一个Client、一个Worker、一个 任务服务器。 Client的作用是提出一个 Job 任务 交给 Job Server 任务服务器。Job Serve

吕纬甫 542

查找gearman非法注册函数进程

使用gearman时,由于gearman没有权限控制,导致任何能连接到job server的程序都能注册函数,尤其在开发阶段,可能有来自不同机器上的程序连接了job server注册了一些测试函数。当使用gearadmin –status查看query status时,会发现一些不知所云的注册函数,如:test 0 0 1那怎样知道这个test函数是哪个程序注册的呢?

很多时候,你缺少的不是知识而是热情 1379
上一篇: redis设计思想
下一篇: 用lua扩展你的Nginx(整理)
笑天居士
博客等级 码龄24年 292粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值