一, 并发数问题
讲到并发数这个概念, 想必各位应该都知道是什么意思, 就是同时访问一个项目, 就比我们现在做的一些项目完工以后要放到公网环境下的时候, 所有人都能用, 比如, 你上百度, 同时别人也在上, 所以有多少人同时在, 又同时去处理, 这就是所谓的并发数;
tomcat 的并发数大概在 300 左右, 如果再多的话, 它的访问速度就会变的很慢, 这里值得提一下, 虽然只有 300, 但是并发数还是比较多的, 什么概念呢? 就死在一秒之内, 甚至不到一秒, 同时访问这个系统的并发量 300 左右, 当然它也受限于网络带宽的问题;
带宽越大, 我在你这个网页上下载的速度也就越快, 如果我的带宽只有一兆的话, 那么我的下载速度也就几十 KB, 所以这些并发数, 还受限于这写影响;
二, Nginx 解决并发数问题
刚才我也说了, Tomcat 的并发量大概也就 300, 同时连进来的人数若要超过这 300, 那么速度就会变得非常慢, 会出现丢包的情况, 至于什么是丢包我在这里就不详说了, 各位可以自行百度;
怎么解决这个问题呢?
那么就用 Nginx(静态资源服务武器)来解决这个问题;
nginx 是一个很强大的高性能的 wbe 和反向代理服务器, 它狙狗非常优越的特性:
在连接高并发的情况下, Nginx 是 Apache 服务器不错的替代品, 而它的并发量在 50000 左右, 简直无法跟 tomcat 相比, 就不是一个数量级的;
但是有一个疑问就是, 那直接学或直接用 Nginx 不就完了吗, 干嘛还要学 Tomcat,JBOSS....
Nginx 是一个 HTTP 和反向代理服务器, Tomcat 是应用服务器, 能够运行 java 程序, 执行 jsp,serviet;
Nginx 不行, 它是来处理静态资源的, 你往上面放一个静态的图片, 视频, 音频以及一个 html, 它能帮你处理, 你往上面放一个 java 源代码, 它就不能帮你处理了;
所以, Nginx 跟 Tomcat 这些应用服务器没有任何冲突, Nginx 的应用面, 跟 Tomcat 简直就是两个应用面, 他们之间没有任何冲突;
三, 使用 Nginx 访问静态资源
Ngxin 下载网盘地址[Windows] (腾讯微云):
链接: https://share.weiyun.com/5JpFX3u 密码: ryhjbc
下载安装好后打开, 我们需要配置一些属性来做负载均衡
Ⅰ. 启动 Nginx
解压到指定文件夹后, 我们双击 Nginx:
进去之后双击 nginx.exe, 运行即可[可以在系统资源管理器] 中查看 Nginx 运行状态;
Ⅱ. 配置 Nginx
在 conf 文件中, 双击 nginx.conf 使用记事本或者其他文本工具打开:
接下来我们开始对它的配置文件进行一系列的解读;
Ⅲ.Nginx.conf 配置文件解读
点进去后, 首先我声明一点, 我不是做运维的, 我是干开发的, 所以我只会说一些对于我们开发而言比较重要的一些配置;
第一部分:
- http {
- include mime.types;
- default_type application/octet-stream;
- #log_format main '$remote_addr - $remote_user [$time_local]"$request" '
- # '$status $body_bytes_sent"$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"';
- #access_log logs/access.log main;
- sendfile on;
- #tcp_nopush on;
- #keepalive_timeout 0;
- keepalive_timeout 65;
- #gzip on;
- server {
- listen 8888;
- server_name localhost;
- #charset koi8-r;
- #access_log logs/host.access.log main;
- location / {
- root HTML;
- index index.HTML index.htm;
- }
首先, http 是处理 http 协议的, setver 算是一个节点, 这代表其中一个服务, 服务监听端口是 8888 端口, 当你执行 8888 端口的时候, 他就会自动帮你映射到你 Nginx 所在的根目录;
这个根目录是在咱们的电脑上的 Nginx 安装目录:
在配置文件中可以清晰的看到, 它映射到这个 nginx 根目录中的 HTML 文件夹:
而这里面的资源, 你都可以通过 8888 来访问了;
比如我现在想访问我这里的一张图片, 很简单, 打开浏览器, 直接输入端口 8888, 加上你的文件地址全目录即可[前提是你先启动 Nginx]
地址栏输入:
这样就完成了静态资源的访问;
四, 反向代理(动静分离)
反向代理 (Reverse Proxy) 实际运行方式是指以代理服务器来接受 internet 上的连接请求, 然后将请求转发给内部网络上的服务器, 并将从服务器上得到的结果返回给 internet 上请求连接的客户端, 此时代理服务器对外就表现为一个服务器.
通俗点理解就是, 当你访问一个页面, 那个页面上肯定有一些什么图片啊音频视频, 当我们访问这个网页的时候, 相当于你发了两次请求, 比如百度, 你访问百度一次, 又向它的内外服务器发了一次请求, 而它的内网服务器就是 nginx, 它从内网服务器拿出你访问的一些图片, 音频, 从而可以看出, 静态资源与动态资源是放在一个不同的服务器上;
我访问百度, 百度一看我要访问的是图片就是一些静态资源, 那么, 它就是把你的这次请求转发给静态资源服务器, 获取图片后, 响应给你;
所以, 作为用户, 你不知道你到底访问的是哪一台服务器;
通过反向代理机制可以做负载均衡;
五, 负载均衡
先通过一张图大概了解一下:
我们需要在配置文件中配置一下, 首先, 还是在刚刚我在上面写的那个文件, 用记事本打开, 接下来, 我将介绍第二个比较重要的配置:
- # 配置应用服务器的 ip 端口
- http {
- upstream myproject {
- server 127.0.0.1:8081;
- server 127.0.0.1:8082;
- }
- server {
- listen 6565;
- server_name www.domain.com;
- location / {
- proxy_pass http://myproject;
- }
- }
- }
首先, 这段代码在配置文件中不内置, 需要自己手动添加进去, 我大概介绍一下;
upstream 是关键字来标识自己是一个配置反向代理的字段, 不可以更改, 后面的 myspringboot 可以随便更改;
后面的就是配置你的应用服务器集群, 用来帮你代理的;
配置完成后重启才能生效;
直接在任务管理器结束 Nginx 进程, 再开即可~
而下面的 server 就代表, 通过 6565 来访问以上两个应用服务器季集群, 从而达到, 负载均衡;
来源: http://www.jianshu.com/p/bd40620750b3