zoukankan      html  css  js  c++  java
  • Tomcat集群

    问题:

    1.tomcat集群能带来什么?

    1).提高服务的性能(一般采用一台机器部署一个tomcat,如果一台机器部署多个tomcat,它们有共享瓶颈,它们要共享网卡、内存、I/O等),并发能力(一台tomcat的http线程池是有限的,根据机器的性能,如果是两台,则能承载的http线程就是两倍),以及高可用性(nginx下面如果有多台tomcat,当其中一台tomcat出故障了,可以把这个结点从nginx负载均衡tomcat集群的配置中去掉,nginx还可以达到tomcat其他可用的服务器上)

    2).提供项目架构的横向扩展能力(如果我有一台服务器,通过不断升级内存、CPU,这是纵向提高性能。比如在双11时,只需根据历史评估添加tomcat横向结点即可)

    2.tomcat集群实现原理

    通过nginx负载均衡进行请求转发。

    3.tomcat集群新旧架构对比解析

    一期架构:

    “想当然”二期架构:

    例如:user1登录信息存在第一台tomcat的session中,user1要生成订单,通过Nginx可能请求到了第二台tomcat,这时发现没有登录信息,会请求用户再次登录。也就是出现了session无法共享的问题。

    4.tomcat集群带来了什么新问题?

    1).session登录信息存储及读取的问题

    解决办法:采用nginx ip hash policy(即,根据请求的ip,对ip进行hash取模后分配到指定的服务器,那么这个ip发过来的请求都会发送到这台服务器上。优点:可以不改变现有技术架构,直接实现横向扩展。缺点:1.导致服务器请求(负载)不平均(完全依赖ip hash的结果)。例如,有两个用户,ip hash后都请求到第一台tomcat上,如果只有两个用户,两个tomcat,这样第二台tomcat就处于空闲状态。2.在IP变化的环境下无法服务。如果ip变化,有可能hash到不同的tomcat上,影响正常服务。)(这种办法在实操中基本不使用)

    2).服务器定时任务并发的问题(比如定时关单)

    二期架构:

    所有服务器的session登录信息,都缓存在分布式的redis中。进而可以做单点登录,利用分布式redis,来做一个分布式锁,解决tomcat A,B,C在同一时间点启动定时任务的问题。如果不做分布式锁,会造成CPU、内存的资源浪费,因为在同一时间点只需要一台机器启动定时任务即可,其他机器不需要启动,并且随便一台都行。

    5.单机部署多应用(一台服务器开启多个tomcat实例)/多机部署多应用(假设有A,B,C三台服务器,在这三台服务器上分别装有tomcat,然后把这三个做成一个集群)

    6.nginx负载均衡配置、策略、场景及特点

    1)轮询(默认)

    优点:实现简单。

    缺点:不考虑每台服务器处理能力。

    upstream www.mall.com {
        server www.mall.com:8080;
        server www.mall.com:9080;
    }

    2)权重(实际最常使用,默认是1)

    优点:考虑了每台服务器处理能力的不同。

    upstream www.mall.com {
        server www.mall.com:8080 weight = 15;
        server www.mall.com:9080 weight = 10;
    }

    3)ip hash

    优点:能实现同一个用户访问同一个服务器,就不会出现单点登录问题。

    缺点:根据ip hash不一定平均。

    upstream www.mall.com {
        ip_hash;
        server www.mall.com:8080;
        server www.mall.com:9080;
    }

    4)url hash(第三方)

    优点:能实现同一个服务访问同一个服务器。

    缺点:根据url hash分配请求会不平均,请求频繁的url会请求到同一个服务器上。

    upstream www.mall.com {
        server www.mall.com:8080;
        server www.mall.com:9080;
        hash $request_uri;
    }

    5)fair(第三方)

    优点:按后端服务器的响应时间来分配请求,响应时间短的优先分配。

    upstream www.mall.com {
        server www.mall.com:8080;
        server www.mall.com:9080;
        fair;
    }

    7.nginx+tomcat搭建集群

    8.tomcat集群验证

  • 相关阅读:
    Redis21:客户端与服务器端的通信与redis管道
    Redis20:keys、scan、bigkeys、查看key的存储方式
    Redis19:限流
    Redis18:分布式锁
    Redis17:cluster集群
    Redis16:两种redis集群解决方案:codis和cluster
    Android : 获取声卡信息的测试代码
    Android : 基于alsa库的音乐播放
    Android system :灯光系统_HAL_lights
    Android system :led_class驱动
  • 原文地址:https://www.cnblogs.com/cing/p/8576684.html
Copyright © 2011-2022 走看看