前言
个人备忘
正向代理
个人理解,代理服务器存在客户端。
1.客户端访问不了服务器。
2.代理服务器可以访问业务服务器。
3.我们通过访问 “代理服务器”访问业务服务器。
总结 :代理服务器跟客户端在同一网络区域。
反向代理
个人理解,代理服务器在服务端。
1.客户端通过访问“代理服务器”。
2.代理服务器分析客户的请求,映射到不同业务服务器上。
总结 :代理服务器 与 业务服务器处在统一网络区域。
Nginx简介 :
轻量级,高性能的web服务器(IO很强,单机几万并发量,配置忘了–)。
Webserver 的老大哥是 : Apache Http Server , nginx 。
Nginx 和 apache 的对比
Nginx : 轻量级,配置简单方便,高并发,高静态处理能力 。
Apache : php 支持的更好,插件更多,高动态处理能力。
Nginx主要作静态和反向代理服务器,处理前端静态请求。
Apache 用作动态代理服务器,处理后端动态请求。
Nginx配置详解
(1)配置tomcat负载
(2)配置静态资源访问路径
//说明:server我们是可以配置多个的
//样例
server {
listen 80;
server_name www.shuuy.com;
location / {
proxy_pass http://47.2.6.20:443/;
}
}
server {
listen 80;
server_name develop.sufuy.com;
location / {
proxy_pass http://47.3.1.16:8080/;
}
}
server {
listen 80;
server_name demo.sfuy.com;
location / {
proxy_pass http://47.9.11.6:9080/;
}
}
server {
listen 80;
server_name static.shouy.com;
location / {
root /home/sftppicupdate/upload;
}
}
//nginx.conf
/**不要粘过去直接用,建议都阅读一边然后去取舍。**/
#user nobody;
#启动几个worker线程 , 1 是根据物理cpu 的个数来设置 worker_processes
worker_processes 1;
#设置出错日志保存路径。
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#存放进程信息
#pid logs/nginx.pid;
#事件模型 , worker_connections 和 worker_processes息息相关,nginx 单机处理并发能力个数是 :他俩相乘。
events {
worker_connections 1024;
}
#配置tcp 响应服务信息
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;
#一般公司不会配置,有的浏览器支持,压缩响应的文件,css,js,img 等,使网络传输更小,节省流量。
#gzip on;
#配置tomcat映射
#agui 为 名称,随便起
#weight 配置权重
#upstream agui {
#server 192.168.232.132:8080 weight=9 ;
#server 192.168.232.133:8090 weight=10 ;
#}
#标识nginx 服务器响应的一些参数
server {
#默认端口
listen 80;
#响应的地址(ip/域名)如果是域名,需要解析和备案
server_name www.wqnmb.com;
#charset koi8-r;
#access_log logs/host.access.log main;
# / 代表根目录,例如访问localhost ,响应内容为 根目录html(root表权限)下的 index.html
location / {
root html;
index index.html index.htm;
#proxy_pass http://agui;
#proxy_pass http://123.206.43.122:80;
}
#配置静态资源
#alias
#在nginx安装根目录下创建 resource文件夹,在他下面继续创建 img,pdf两个文件夹
#测试 :http://www.wqnmb.com/resource/pdf/test.pdf
#测试 :http://www.wqnmb.com/resource/img/2.jpg
location /resource/img/ {
alias resource/img/ ;
}
location /resource/pdf/ {
alias resource/pdf/ ;
}
#root
#测试 :http://www.wqnmb.com/test.pdf
#location / {
#root /home/sftppicupdate/upload;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#错误的编码 : 500 502 503 504 /50x.html , 还是去root权限 根目录下 html 目录下去找页面
error_page 500 502 503 504 404 /50x.html;
location = /50x.html {
root html;
}
}
其他:
负载均衡:
再议
缓存服务:
再议
Nginx具有高性能原因
想要理解高性能还需要从最近本概念说起,要不是不好理解它为什么会性能高。一个线程通常具有五中状态,以及它们之间的转换关系如下,不可逆转。
1.新生—>就绪: 通过调用start()方法
2.就绪--->运行: 处于就绪状态的线程一旦得到CPU,就进入运行状态并自动调用自己的run()方法
3.运行--->阻塞: 处于运行状态的线程,执行sleep()方法,或等待I/O设备资源,让出CPU并暂时中止自己运行,进入阻塞状态
4.阻塞--->就绪: 睡眠时间已到,或等待的I/O设备空闲下来,线程便进入就绪状态,重新到就绪队列中等待CPU。当再次获得CPU时,便从原来中止位置开始继续运行。
5.运行--->死亡: (1)(正常情况下)线程任务完成
(2)(非正常状况)线程被强制性的中止,如通过执行stop()或destroy()方法来终止一个线程
线程
这里重点说一下阻塞状态,当web服务器如tomcat处理大量请求时,会频繁进行磁盘IO读写操作,CPU轮训时会使运行状态的请求进入“阻塞”状态,这就是阻塞产生的原因,接下来说一下非阻塞。
非阻塞
把整个过程切换成小的任务,通过任务间协作完成。 由一个专门的线程来处理所有的 IO 事件,并负责分发。
事件驱动机制:事件到的时候触发,而不是同步的去监视事件。
线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的进程切换。
Master/Worker并发工作模式
该模式来用来处理高并发的一种设计模式,多线程请求时,模式工作图如下
Master-Worker模式是常用的并行模式之一,它的核心思想是,系统有两个进程协作工作:Master进程,负责接收和分配任务;Worker进程,负责处理子任务。当Worker进程将子任务处理完成后,结果返回给Master进程,由Master进程做归纳汇总,最后得到最终的结果。
同一时刻只有一个worker建立连接,用到了锁的概念来保证只有一个worker处理请求。采用多线程好处,如果一个worker挂掉,对于其他没有影响
下面是一个简单的master、worker多线程实现,
Worker:用于实际处理一个任务;
Master:任务的分配和最终结果的合成
Main:启动程序,调度开启Master。