zoukankan      html  css  js  c++  java
  • OpenResty高并发(四)

    在电商项目中所有的访问都是通过首页访问进去的,那么首页门户的访问频率会是非常高的,用我们专业术语来说就是并发量高,这时问题就来了,并发量高我们在做程序时就要保证首页的抗压能力强,而且还要保证抗压的同时数据的加载速度还要保证也能高。这时就要说下OpenResty并发站点架构的思想了。

    一、OpenResty简介

    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的说明。下面附上两个官方网址:

    二、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搭建

    关于OpenResty的搭建,可以参考官方提供的网址进行搭建。http://openresty.org/cn/installation.html,还有一个是官方提供了源码安装的方式:http://openresty.org/cn/linux-packages.html;我是用centos8在我云上安装的,教程可以看如下链接http://openresty.org/cn/linux-packages.html

    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 即可。

    上面是官方给出的安装命令,安装完后输入下面命令启动OpenResty
     
    systemctl start openresty

    然后直接在浏览器上打出http://ip/就可以看到页面了

     补充内容,建议大家还是不要用我上面的安装过程,我是做到后面才发现问题的,官网上CentOS 方法是默认你所有插件配置都配置好了,因为后面我有用到ngx_cache_purge-2.3导致走了很多坑,建议大家用我下面的配置方法搭建OpenResty

    1、下载源码包

    wget https://openresty.org/download/openresty-1.17.8.1.tar.gz
    wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
    wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz

    2、解压

    tar -xzvf openresty-1.17.8.1.tar.gz
    tar -xzvf ngx_cache_purge-2.3.tar.gz
    tar -xzvf v0.3.0.tar.gz

    3、将ngx_cache_purge和nginx_upstream_check_module移动至openresty-1.17.8.1/bundle下

    cp -r ngx_cache_purge-2.3 openresty-1.17.8.1/bundle/
    cp -r nginx_upstream_check_module-0.3.0 openresty-1.17.8.1/bundle/

    4、进入openresty

    cd openresty-1.17.8.1

    5、编译安装

    ./configure --prefix=/usr/local/openresty --with-luajit --with-http_ssl_module --user=root --group=root --with-http_realip_module --add-module=./bundle/ngx_cache_purge-2.3/ --add-module=./bundle/nginx_upstream_check_module-0.3.0/

    出现如下所示,表示成功了

    出现如下表示OK:
    Configuration summary
      + using system PCRE library
      + using system OpenSSL library
      + using system zlib library
    
      nginx path prefix: "/usr/local/openresty/nginx"
      nginx binary file: "/usr/local/openresty/nginx/sbin/nginx"
      nginx modules path: "/usr/local/openresty/nginx/modules"
      nginx configuration prefix: "/usr/local/openresty/nginx/conf"
      nginx configuration file: "/usr/local/openresty/nginx/conf/nginx.conf"
      nginx pid file: "/usr/local/openresty/nginx/logs/nginx.pid"
      nginx error log file: "/usr/local/openresty/nginx/logs/error.log"
      nginx http access log file: "/usr/local/openresty/nginx/logs/access.log"
      nginx http client request body temporary files: "client_body_temp"
      nginx http proxy temporary files: "proxy_temp"
      nginx http fastcgi temporary files: "fastcgi_temp"
      nginx http uwsgi temporary files: "uwsgi_temp"
      nginx http scgi temporary files: "scgi_temp"
    
    cd ../..
    Type the following commands to build and install:
        make
        make install

    接着再执行如下:

    make && make install

    不报错并再/usr/local/目录下发现openrestry,就表示安装成功。

    6、启动

    cd /usr/local/openresty/nginx
    
    ./sbin/nginx

    界面效果,如图所示:

     

     三、静态页面的发布

    上面讲了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:WindowsSystem32driversetcHOSTS 文件就可以了,在HOSTS文件最后一行加上ip  域名就行例如

    192.168.32.32  www.ljx.com

    这样页面就加载出来了

     

    这短短的一生我们最终都会失去,不妨大胆一点,爱一个人,攀一座山,追一个梦
  • 相关阅读:
    重启远程windows计算机
    web.xml文件的作用及基本配置
    DB2编码问题而导致连接不上上数据库
    合理使用表空间
    自动做题
    怎么给二年级小学生讲鸡兔同笼问题
    DB2 性能分析工具介绍:Event Monitor 篇(摘自IBM官方)
    delphi 对应 c# 的一些函数及类型的转换方法(从网络摘录)
    DB2 基础: 使用重定向恢复克隆 DB2 数据库(部分从IBM官方网站引用)
    response.setContentType()的作用及MIME参数详解
  • 原文地址:https://www.cnblogs.com/xing1/p/14932992.html
Copyright © 2011-2022 走看看