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. ...
随机推荐
- 线程本地存储(动态TLS和静态TLS)
线程本地存储(TLS) 对于多线程应用程序,如果线程过于依赖全局变量和静态局部变量就会产生线程安全问题.也就是一个线程的使用全局变量可能会影响到其他也使用此全局变量的线程,有可能会造成一定的错误,这可 ...
- SpringBoot系列——自定义统一异常处理
前言 springboot内置的/error错误页面并不一定适用我们的项目,这时候就需要进行自定义统一异常处理,本文记录springboot进行自定义统一异常处理. 1.使用@ControllerAd ...
- Ansible_常用模块
一.Ansible常用模块 1.ansible常用模块command.shell.raw的区别: command模块不是调用的shell的指令,所以没有bash的环境变量 shell模块调用的/bin ...
- k8s管理机密信息(12)
一.启动应用安全信息的保护 1.Secret介绍 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 ...
- shell基础之变量及表达式
本节内容 1. shell变量简介 2. 定义变量 3. 使用变量 4. 修改变量的值 5. 单引号和双引号的区别 6. 将命令的结果赋值给变量 7. 删除变量 8. 变量类型 9. 特殊变量列表 1 ...
- centos7 搭建 nginx web服务 反代理
Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. ...
- Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
前言 Windows上mingw32版本的openssl的编译是属于比较棘手的,OpenSSL本身不提供支持.. OpenSSL 介绍 OpenSSL是一个开放源代码的软件库包,应用程序可 ...
- 向pom.xml中配置Maven使用JDK8编译
maven项目会用maven-compiler-plugin默认的jdk版本来进行编译,如果不指明版本就容易出现版本不匹配的问题,可能导致编译不通过的问题. 解决办法:在pom文件中配置maven-c ...
- SpringMVC=>解决JSON乱码问题
<!-- 解决JSON乱码问题 --> <mvc:annotation-driven> <mvc:message-converters register-defaults ...
- python做反被爬保护的方法
python做反被爬保护的方法 网络爬虫,是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.但是当网络爬虫被滥用后,互联网上就出现太多同质的东西,原创得不到保护.于是,很 ...