nginx

1.Nginx

1.概念:
概念:反向代理web服务器,作用于服务器,管理多个服务器。
多进程,多个工作进程,一个主进程。
目的:单节点故障,实现负载均衡,load balance,非阻塞,解决大客户量并发请求问题。
2.代理:
(1).正向代理:作用于客户端。
(2).反向代理:作用在服务器端,客户端不知道反向代理服务器的存在。
3.单节点故障:
(1)大并发请求下,服务器只有一个,如果服务器挂掉,单节点发生故障,整个就不能正常运行了。
(2)解决方案:配置服务器集群。使用 nginx ,通过ip 管理多个 tomcat服务器。

2.模拟伪集群

1.解压两个tomcat,在serve.xml文件配置两套不同的端口,8080,8005,8009。
2.修改Nginx的nginx.conf配置文件,实现负载均衡。
(1).服务器集群配置
(2).nginx不能处理jsp页面,交由tomcat处理。
(3).代码参考:(这里要改nginx.conf里的配置)

#服务器集群配置
upstream test.com{
    server  127.0.0.1:18081 weight=1;
    #服务器配置,weight是权重,权重越大,分配的概率越大。
    server  127.0.0.1:28083 weight=2;
}   
#当前的nginx配置
server {
  listen 80;#侦听端口号
  server_name  localhost;
  #当前服务的域名.如果是localhost:8080的请求,则交给jeffrey.com的集群来处理。
  location / {
  proxy_pass   http://test.com ;
  #与服务器集群的名称一致
  proxy_redirect  default;
  }
  location = /50x.html {
    root html;
   }
}

3.关闭nginx :
(1)nginx -s stop
(2)nginx -s quit
4.这里出现一个新问题:
(1)一个服务器挂掉后,nginx不会立刻判断其死亡,而是等待,但是死掉的服务器里的信息怎么办?
(2)一个应用通常有多个服务器,登录成功后,session只会在一台存储,想要多台服务器都识别到这个session,后端统一存储。
(3)所以,集群产生的新问题:session共享。
5.解决session共享:
(1)session复制
(2)后端统一存储,后端统一找一个中间件将Session存起来即可,这个中间件是数据库redis或者缓存。此时,tomcat作为客户端,redis作为服务端。
(3)不要使用session。
6.redis实现session共享
7.改写tomcat底层
8.三个session的jar包复制到tomcat下的lib中,commons-pool2-2.2.jar,jedis-
2.5.2.jar,tomcat-redis-session-manager-2.0.0.jar。
9.安装redis server
10.tomcat修改conf/context.xml,新增

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="localhost"
port="6379"
database="0"       
maxInactiveInterval="60" />

启动redis-server.exe

//启动
redis-server redis.windows.conf
//关闭
shutdown

启动tomcat,启动nginx;
11.nginx,tomcat,redis集群中。redis处理了两件事情,session共享,缓存。
缓存的问题,缓存穿透和击穿。
缓存处理流程:

12.前台请求,后台先从缓存中取数据,取到直接返回结果。
取不到时从数据库中取,数据库取到更新缓存,并返回结果。
数据库也没取到,那直接返回空结果。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容