OpenResty高并发
在电商项目中所有的访问都是通过首页访问进去的,那么首页门户的访问频率会是非常高的,用我们专业术语来说就是并发量高,这时问题就来了,并发量高我们在做程序时就要保证首页的抗压能力强,而且还要保证抗压的同时数据的加载速度还要保证也能高。这时就要说下OpenResty并发站点架构的思想了。
一、OpenResty简介
二、OpenResty解决的问题
上面官方的术语说的很官方,可能看完了也不知道这玩意有啥好的,那就用大白话这样说吧!OpenResty解决的是高并发的痛点。现在服务的后台大部分是java写的,但是用java写出稳定的高并发服务是很复杂的一件事,首先是服务器的选择,web服务器有几个选型,tomcat,apache,weblogic,还有商用webphere. 1、tomcat官方宣称的并发量是1000,厉害点的做点参数调优,也不过3000并发,如果要开发一个并发百万的服务,1000000/3000,需要1000台服务器,想想都不可能。 2、apache的并发比tomcat更不堪,200-300 3、weblogic的并发稍好,平均能达到3000左右,但是也没有达到好一个数量级;但是nginx就不一样了,处理几万的请求很轻松,内存占用也不高,在几年前我朋友他们公司把它用作负载均衡,没想过当做一个web服务器,OpenResty的出现解决了享受nginx高并发优势的拦路虎,因为nginx是使用异步事件模型,跟传统的编程思想不一样,而lua是用c解释执行的脚本语言(执行效率很高),可以用传统的同步编程思想上,在nginx请求接进来后处理稍复杂的逻辑。
对于高并发的系统来说,都是基于内存的,或者说是基于缓存的,这时有的人可能会想用mysql支撑高并发,mysql的并发量在4000-8000,超过这个量mysql性能就会急剧下降。一次内存读取的时间是几十纳秒,一次缓存读取是几毫秒,一纳秒等于1秒的1000000000分之一,一毫秒等于1秒的1000分之一,请求过来之后直接走内存读取,在需要和数据库交互的时候把数据写入内存,然后再批量入库,快速响应。
web流量也符合二八原则,百分之八十的流量集中在百分之二十的页面,比如电商的首页,产品详情页,使用openResty支撑产品详情页的高并发访问,在处理订购单,购物车等环节用其他的高并发框架处理,比如java的NIO网络框架netty。
三、OpenResty搭建
CentOS
你可以在你的 CentOS 系统中添加 openresty 仓库,这样就可以便于未来安装或更新我们的软件包(通过 yum check-update 命令)。 运行下面的命令就可以添加我们的仓库(对于 CentOS 8 或以上版本,应将下面的 yum 都替换成 dnf):
# add the yum repo:
wget https://openresty.org/package/centos/openresty.repo
sudo mv openresty.repo /etc/yum.repos.d/
# update the yum index:
sudo yum check-update
然后就可以像下面这样安装软件包,比如 openresty:
sudo yum install -y openresty
如果你想安装命令行工具 resty,那么可以像下面这样安装 openresty-resty 包:
sudo yum install -y openresty-resty
命令行工具 opm 在 openresty-opm 包里,而 restydoc 工具在 openresty-doc 包里头。
列出所有 openresty 仓库里头的软件包:
sudo yum --disablerepo="*" --enablerepo="openresty" list available
参考 OpenResty RPM 包页面获取这些包更多的细节。
对于 CentOS 8 及更新版本,我们只需要将上面的 yum 命令都替换成 dnf 即可。
systemctl start openresty
然后直接在浏览器上打出http://ip/就可以看到页面了

三、静态页面的发布
上面讲了OpenResty的作用以及安装,这个过程看过官网还是比较简单的,接下来就说下作用。在电商平台中很多都是图片,这些图片都是静态资源。可以打开购物平台看下。

可以发现就只查找一个产品请求链接就达到了471个,如果把滚动条向下滚动请求会更多,可以通过控制台发现这里面大部分都是静态资源,很少的动态请求。针对一个网店来说有这么多的静态资源如果都用tomcat去处理的话,tomcat的压力是很大的。用一个例子说明下,前面说过OpenResty的抗压能力非常好,他能非常轻松的达到10K到1000K,前面说过OpenResty里面包含了Nginx,如果一个请求过来先经过Nginx,Nginx并发能力虽然很强,但是如果后端用Tomcat集群承接的话,这时会导致服务很容易挂掉(上面说过Toncat的并发量)。

那么这个问题出现了怎么解决呢,解决思路其实也很简单,那就是让很多Nginx能处理的静态请求直接让Nginx自己直接处理,让需要查询数据库的动态请求交给tomcat处理,这样一来整体抗压能力就提交很多了。这个思想其实就是动静分离的处理思想。

下面就关于动静分离的实践做一个发布,玩过nginx发布vue项目的朋友对这一步来说是很简单的,我把vue打包后的文件通过工具上传到我的linux中了,这一步比较简单我就不说明了。目录如下

接下来要做的就是通过Nginx发布代码。先进入到openresty目录
cd /usr/local/openresty/

然后进入到nginx目录

然后进入他的核心配置文件conf里面修改文件nginx.conf文件

修改红框内的两个内容就可以了,上面那个是要访问的网址,下面那个是打包项目的路径

保存文件后重新加载一下用命令
nginx -s reload

报了个错,这个错是我环境变量没有配置,输入命令
vi /etc/profile
在文件最后一行配置如下配置
export PATH=/usr/local/openresty/nginx/sbin:$PATH
然后再输入下面命令就可以让配置生效了
source /etc/profile
再用nginx -s reload执行一下就不会报错了

现在访问下自己配置的网址www.ljx.com,发现域名没用

这个也简单,花钱买是不可能的,饭都吃不起的人怎么可能浪费钱去买域名。修改本地文件 C:\Windows\System32\drivers\etc\HOSTS 文件就可以了,在HOSTS文件最后一行加上ip 域名就行例如
192.168.32.32 www.ljx.com
这样页面就加载出来了

OpenResty高并发的更多相关文章
- Nginx与Redis解决高并发问题
原文链接:http://bbs.phpchina.com/forum.php?mod=viewthread&tid=229629 第一版产品采用的是Jquery,Nginx,PHP(CI框架) ...
- 使用ngx_lua构建高并发应用(1)
转自:http://blog.csdn.net/chosen0ne/article/details/7304192 一. 概述 Nginx是一个高性能,支持高并发的,轻量级的web服务器.目前,Apa ...
- nginx+lua+redis高并发应用建设
ngx_lua将lua嵌nginx,让nginx运行lua脚本.高并发,非堵塞过程中的各种请求. url要求nginxserver,然后lua查询redis,返回json数据. 一.安装lua-ngi ...
- java亿级流量电商详情页系统的大型高并发与高可用缓存架构实战视频教程
亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 完整高清含源码,需要课程的联系QQ:2608609000 1[免费观看]课程介绍以及高并发高可用复杂系统中的缓存架构有哪些东西2[免费观看]基于 ...
- golang高并发的理解
前言 GO语言在WEB开发领域中的使用越来越广泛,Hired 发布的<2019 软件工程师状态>报告中指出,具有 Go 经验的候选人是迄今为止最具吸引力的.平均每位求职者会收到9 份面试邀 ...
- golang高并发
golang 为什么能做到高并发 goroutine是go并行的关键,goroutine说到底就是携程,但是他比线程更小,几十个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这 ...
- SpringCloud、Nginx高并发核心编程 【2020年11月新书 】
文章太长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典极品 : 三大本< Java 高并发 三部曲 > 面试 + 大厂 + 涨薪必备 疯狂创客圈 经 ...
- [ 高并发]Java高并发编程系列第二篇--线程同步
高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...
- 如何在高并发分布式系统中生成全局唯一Id
月整理出来,有兴趣的园友可以关注下我的博客. 分享原由,最近公司用到,并且在找最合适的方案,希望大家多参与讨论和提出新方案.我和我的小伙伴们也讨论了这个主题,我受益匪浅啊…… 博文示例: 1. ...
随机推荐
- Pytorch系列:(五)CNN
卷积 Conv2d 2D卷积函数和参数如下 nn.Conv2d( in_channels, out_channels, kernel_size, stride=1, padding=0, dilati ...
- Educational Codeforces Round 96 (Rated for Div. 2)
A. Number of Apartments 题意:求方程的解 思路:直接模拟就行 代码: #include<iostream> #include<cstdio> #incl ...
- (转)解决c#自带的HttpClient(Http.GetFromJsonAsync Http.GetStringAsync等)返回中文乱码问题
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var aa = await Http.GetByteArrayAsync ...
- NABCD-name not found
项目 内容 课程 2020春季计算机学院软件工程(罗杰 任健) 作业要求 团队项目选择 项目名称 FOTT 项目内容 在OCR-Form-Tools开源项目的基础上,扩展功能,支持演示更多的API,例 ...
- 如何通过Zoho Books门户管理供应商
作为一个企业,不管规模大小,都有自己的供应商来为业务提供相关的服务和配件.随着采购的频率和供应商数量的增加,采购的管理和付款的跟踪难度就会增加,进而影响到企业和供应商之间的关系. 为了解决这个问题,Z ...
- [Java] Git
版本控制 VCS(Version Control System):版本控制系统 主要功能:版本控制.主动提交.中央仓库 中央仓库功能:保存版本历史.同步团队代码 DVCS(Distributed VC ...
- RHCE脚本题目详解
目录 RHCE脚本题目详解 题目一 shell脚本之if语句实现: shell脚本之case语句实现: 题目二 实现 测试 解析 写在后面 RHCE脚本题目详解 题目一 在system1上创建一个名为 ...
- ScreenToGif: 屏幕录制神器
ScreenToGif:一款小众但很好用的屏幕录制神器 牛人干货 2020-01-07 00:23:08 今天干货君给大家介绍一款电脑屏幕录制神器-ScreenToGif . ScreenToGif ...
- openstack总结复习
一.云计算概念 1.云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问, 通过互联网进入可配置的计算资源共享池(资源包括网络,计算,存储,应用软件,服务) 2.云计算所包含的几 ...
- bond4以及vlan子接口配置
场景: 前提,交换机的配置由网络工程师配合! 1.跨交换机做bond,模式为LACP,linux双网卡做bond4,模式为4: 2.系统为centos7.0-123: 3.服务器仅有两张万兆网卡,为e ...