使用Nginx+Lua(OpenResty)开发高性能Web应用 末蓝、 2022-07-14 06:14 193阅读 0赞 OpenResty ™ 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。 OpenResty 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。 OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。 参考 组件 可以知道 OpenResty 中包含了多少软件。 参考 上路 学习如何从最简单的 hello world 开始使用 OpenResty 开发 HTTP 业务,或前往 下载 直接获取 OpenResty 的源代码包开始体验。 ## 基于Nginx+Lua的常用架构模式 ## 1、负载均衡 **![345ff12f-a4a0-3e7e-84d7-ef338e554156.png][]** 如上图,我们首先通过LVS+HAProxy将流量转发给核心Nginx 1和核心Nginx 2,即实现了流量的负载均衡,此处可以使用如轮训、一致性哈希等调度算法来实现负载的转发;然后核心Nginx会根据请求特征如“Host:item.jd.com”,转发给相应的业务Nginx节点如单品页Nginx 1。此处为什么分两层呢? 1、核心Nginx层是无状态的,可以在这一层实现流量分组(内网和外网隔离、爬虫和非爬虫流量隔离)、内容缓存、请求头过滤、故障切换(机房故障切换到其他机房)、限流、防火墙等一些通用型功能; 2、业务Nginx如单品页Nginx,可以在在业务Nginx实现业务逻辑、或者反向代理到如Tomcat,在这一层可以实现内容压缩(放在这一层的目的是减少核心Nginx的CPU压力,将压力分散到各业务Nginx)、AB测试、降级;即这一层的Nginx跟业务有关联,实现业务的一些通用逻辑。 不管是核心Nginx还是业务Nginx,都应该是无状态设计,可以水平扩容。 ![e0abfcf7-adc9-30a2-bb96-7665d589c4ed.png][] 业务Nginx一般会把请求直接转发给后端的业务应用,如Tomcat、PHP,即将请求内部转发到相应的业务应用;当有的Tomcat出现问题了,可以在这一层摘掉;或者有的业务路径变了在这一层进行rewrite;或者有的后端Tomcat压力太大也可以在这一层降级,减少对后端的冲击;或者业务需要灰度发布时也可以在这一层Nginx上控制。 **2、单机闭环** 所谓单机闭环即所有想要的数据都能从本服务器直接获取,在大多数时候无需通过网络去其他服务器获取。 ![点击查看原始大小图片][4819b18c-91c2-3b10-8722-4549e01797a1.png] 还一些业务型应用场景如下图所示 ![dcd069c5-071d-3324-a9f4-80ca0d8879e1.png][] 商品页面是由商品框架和其他维度的页面片段(面包屑、相关分类、商家信息、规格参数、商品详情)组成;或者首页是由首页框架和一些页面片段(分类、轮播图、楼层1、楼层N)组成;分维度是因为不同的维度是独立变化的。对于这种静态内容但是需要进行框架内容嵌入的方式,Nginx自带的SSI(Server Side Include)可以很轻松的完成;也可以使用Lua程序更灵活的完成(读取框架、读取页面片段、合并输出)。 比如商品页面的架构我们可以这样: ![91fdf6ee-0407-36a8-9e0d-d9475353716e.png][] 首先接收到商品变更消息,商品页面同步Worker会根据消息维度生成相关的页面推送到Nginx服务器;Nginx应用再通过SSI输出。 [345ff12f-a4a0-3e7e-84d7-ef338e554156.png]: /images/20220714/4fb0a9d333bf49779c7a9b93c9f4c89d.png [e0abfcf7-adc9-30a2-bb96-7665d589c4ed.png]: /images/20220714/8647ea2c391b407c9493ba396644660b.png [4819b18c-91c2-3b10-8722-4549e01797a1.png]: /images/20220714/c0463208c8bd4da0b54bdb43d4591fd9.png [dcd069c5-071d-3324-a9f4-80ca0d8879e1.png]: /images/20220714/8cf75611c0774bc88950d7693b54a68e.png [91fdf6ee-0407-36a8-9e0d-d9475353716e.png]: /images/20220714/89e469d1bbfa49c8adcb81f1ca4dfdf2.png
相关 如何使用Flutter开发web应用 > 前言:Flutter系列的文章我应该会持续更新,从User Interface(UI)到数据相关(文件、数据库、网络)再到Flutter进阶(平台特定代码编写、测试、插件开 骑猪看日落/ 2022年10月02日 14:58/ 0 赞/ 301 阅读
相关 高性能WEB开发 nginx HTTP服务器篇 第一篇:HTTP服务器 因tomcat处理静态资源的速度比较慢,所以首先想到的就是把所有静态资源(JS,CSS,image,swf) 提到单独的服务器, 今天药忘吃喽~/ 2022年08月13日 11:28/ 0 赞/ 162 阅读
相关 使用Nginx+Lua(OpenResty)开发高性能Web应用 http://www.itwendao.com/article/detail/137461.html 在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡、反向 柔光的暖阳◎/ 2022年07月14日 12:16/ 0 赞/ 147 阅读
相关 使用Nginx+Lua(OpenResty)开发高性能Web应用 OpenResty ™ 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高 末蓝、/ 2022年07月14日 06:14/ 0 赞/ 194 阅读
相关 高性能web开发经验分享 看到此文标题,我想要表述的你应该会很明确,我所说的“[高性能][Link 1]”——本文主要只针对提高用户体验:(网页)快速响应和能支持较多(1000人以上)的用户同时访问而谈 布满荆棘的人生/ 2022年07月14日 04:58/ 0 赞/ 170 阅读
相关 使用Nginx+Lua(OpenResty)开发高性能Web应用 在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡、反向代理、代理缓存、限流等场景;而把Nginx作为一个Web容器使用的还不是那么广泛。Nginx的高性能是大 刺骨的言语ヽ痛彻心扉/ 2022年06月14日 05:37/ 0 赞/ 239 阅读
相关 使用Nginx+Lua(OpenResty)开发高性能Web应用 在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡、反向代理、代理缓存、限流等场景;而把Nginx作为一个Web容器使用的还不是那么广泛。Nginx的高性能是大 ゝ一世哀愁。/ 2022年06月06日 05:59/ 0 赞/ 168 阅读
相关 使用Nginx+Lua(OpenResty)开发高性能Web应用 [http://jinnianshilongnian.iteye.com/blog/2280928][http_jinnianshilongnian.iteye.com_blo 雨点打透心脏的1/2处/ 2022年06月02日 12:26/ 0 赞/ 154 阅读
相关 使用Chrome开发工具优化Web应用 当我们写了一组炫(fu)酷(za)的H5动效后,发现在移动端上会卡顿,该怎么办? 目前市场上大多数设备的屏幕刷新频率是60Hz,想要用户滑动页面或者播放动画没有卡顿,浏览器 阳光穿透心脏的1/2处/ 2022年05月21日 11:52/ 0 赞/ 268 阅读
还没有评论,来说两句吧...