WorkFlowy分享链接:https://workflowy.com/s/weblogictomcat/LMZWgQF4zBXUEceU
**************************************************************************************************************************************************
以下为WorkFlowy笔记中的无格式内容:
weblogic和tomcat培训学习整理
- welogic #weblogic
- 美国BEA公司出品的基于JavaEE的Java应用服务器
因基于JavaEE,所以支持所有符合JavaEE规范的技术,如EJB等(区别于tomcat)- EJB,Java企业bean,服务端组件,核心应用是部署分布式应用程序
组件是存放在容器中,容器起到提供环境和管理的作用 调用组件的被称为EJB客户端,客户端可运行在Web容器中,如jsp,servlet,we'b- EJB的基础是基于RMI技术,通过RMI,JavaEE将EJB组件创建为远程对象,客户端通过RMI技术在服务器上调用,实现了分布式调用
- RMI技术--远程方法调用
通过RMI技术,将实现不同模块的服务器相互连接通信,实现一个完整的功能---即实现了服务器集群
- RMI技术--远程方法调用
- EJB的基础是基于RMI技术,通过RMI,JavaEE将EJB组件创建为远程对象,客户端通过RMI技术在服务器上调用,实现了分布式调用
- 重量级,支持的技术很多,还原生支持集群和session共享、
- EJB,Java企业bean,服务端组件,核心应用是部署分布式应用程序
- 应用部署
- 安装成功后,登陆weblogic控制台,按界面提示逐步部署(手动)
- 将应用(或是war包、jar包等)拷贝到weblogic下的一个autodeploy目下下,重启weblogic即可实现自动部署(自动)
- weblogic中集群相关概念
- 服务器
- AdminServer
只负责管理- 用于管理。包括应用部署,动态创建server、各种服务配置
- 充当管理者,监控其他服务器状态
- ProxyServer
负责受理分配--类似nginx的负载均衡- 处理外部请求,将工作分配给具体服务器
- 客户端访问的地址就是ProxyServer提供的ip和端口
- ManagedServer
真的部署应用干活的- 接受来自ProxyServer的请求,处理后返回客户端
- AdminServer
- 集群
- 设置各个Server间多播通信,看是否可用,是否可以将请求分配给该Server
- 计算机
- 受管服务器的ip、端口(即集群中的ManagedServer),配合节点管理器使用
- 节点管理器
- 将受管服务器的真实物理机和服务器以及AdminServer绑定
达成在控制台控制集群中Managed Server的重启、关闭等功能,大大节省时间
- 将受管服务器的真实物理机和服务器以及AdminServer绑定
- 服务器
- 美国BEA公司出品的基于JavaEE的Java应用服务器
- tomcat #tomcat
- Apache旗下的一款开源的实现Jsp规范的Servlet容器
也可以处理传统的静态Html页面,但效率不如Apache,因此也就引入了动静分离的概念(tomcat配合nginx) 也是基于Java架构- 轻量级,要达到集群,需要其他的组件支持(如,nginx实现负载均衡,redis等缓存数据库实现session共享)
- 注:由于tomcat的支持并发量不高,在高并发和大型项目中不适合
linux系统中一个进程最大支持线程数不超过1000,因此,一个tomcat容器下的应用最大并发量不会超过1000- 经常采用集群来处理高并发场景
- 注:由于tomcat的支持并发量不高,在高并发和大型项目中不适合
- 轻量级,要达到集群,需要其他的组件支持(如,nginx实现负载均衡,redis等缓存数据库实现session共享)
- tomcat服务器结构
Ref:https://blog.youkuaiyun.com/xlgen157387/article/details/79006434 (大神写的,通俗易懂)- 一个Server
控制tomcat的生命周期- 多个Service
用于对外具体提供服务- 多个Connector
因为一个服务可以有多个链接)(同时提供http和https连接,提供相同协议不同端口的链接等) 用于处理连接相关的事情,并提供Socket与Request和Response相关的转化- Connector的结构
- ProtocolHandler
使用它来接受请求- Endpoint
处理底层Socket的网络连接 实现TCP/IP协议- 实现AbstractEndpoint定义的Acceptor和AsyncTimeout两个内部类和一个Handle接口
- Acceptor
- 监听请求
- AsyncTimeout
- 检查异步Request的超时
- Handle
- 处理接受到的Socket,在内部调用Processor处理
- Processor
将Endpoint接受的Socket封装成Request 实现HTTP协议 - Adapter
将Request交由Container进行具体的处理
- Endpoint
- ProtocolHandler
- Connector如何接受请求
- 1.通过Acceptor监听到请求后
- 2.通过AsyncTimeout处理请求是否超时
- 3.未超时的请求,Socket被Handle接受,在内部调用Processor封装成Request
- 如何将请求封装成Response和Request
- 由Endopoint中的Handle接受Socket,并调用Processor进行封装
- 封装完的Response和Request怎么交由Container
- 由Adapetr交由Container进行具体的处理
- Container处理完后怎么交由Connector并返回给客户端
- 经由Pipeline-Valve管道模式从最上层容器Engine到最底层Wrapper依次执行后,请求处理完成,并将返回结果返回给Connector,Connector通过Socket方式返回给客户端
- Connector的结构
- 一个Engine(Container)
封装和管理Servlet,处理具体的Request请求 管理多个站点(Host)- 多个Host
代表一个站点(虚拟主机) 类似于文件目录中的webapps- 多个Context
代表一个应用程序 类似于文件目录下的webapps下的子目录(如ROOT,默认主应用)- 多个Wrapper
每个Wrapper封装着一个Servlet
- 多个Wrapper
- 多个Context
- Container怎么处理请求
- 利用Pipeline-Valve管道来处理
- Pipeline-Valve---责任链模式
- 责任链模式
- 一个请求处理过程,被多个处理者以此进行处理,没个处理者负责自己的部分,处理接受后返回请求给下一个处理者
- Pipeline-Valve不同于普通的责任链模式
- 在每层容器的管道的最后一步,必会执行一个Valve,叫做BaseValve,BaseValve是不可删除的
- 上层容器的管道的BaseValve会调用下层容器的管道
类似链表一样将整个处理流程连接起来
- container由四层容器,因此有四个管道,每层容器的管道会以此执行Vavle,并在BaseVavle调用下一层容器的管道
- 当到了最后一层,Wrapper时,会在其BaseVavle创建FilterChain,并调用其doFilter方法来处理请求,此doFilter方法会调用所有Fileter的doFilter方法和Servlet的service方法,至此,请求处理完成
- 利用Pipeline-Valve管道来处理
- 多个Host
- Connector和Container的关系
- 1.当一个请求到达tomcat时,首先经由Service交由Connector
- 2.Connector接受请求并封装成Response和Request,封装完后,交由Contatiner处理
- 3.Container处理完后返回Connector,
- 4.Connector通过Socket将处理的结果返回给客户端
Connector底层是通过Socket来进行连接的,封装Request和Response又是按照HTTP协议进行的 Connector需实现TCP/IP协议和HTTP协议
- 多个Connector
- 多个Service
- 一个Server
- tomcat的简单优化
- 运行方式优化
- tomcat的三种运行方式
- BIO--阻塞式
- tomcat 7 及以下版本默认为此方式
- 阻塞运行线程,导致进行IO时,cpu一直在等待,浪费资源,一个线程只能去处理一个请求
1000并发时,会开启1000线程,在linux下达到了进程的最大线程数
- NIO--非阻塞式
- tomcat 8 及以上版本默认此方式,区别于BIO,可以用少量线程去处理大量并发的请求
- APR--操作系统层面解决io阻塞问题
- tomcat 7或tomcat 8 在win7及以上win系统中启动默认为此方式
- linxu下,需安装apr和native依赖
- APR时在高并发下最优的选择
- BIO--阻塞式
- tomcat的三种运行方式
- 线程池优化
- 可以适当的加大线程池的最大线程数、最小线程数、最大空闲线程数
- 由于tomcat的限制,但tomcat应用注定不适合高并发场景
- 解决方案:nginx负载均衡,构建集群
- Jvm优化
- 可适当调整Xms、Xmx和PermSize、MaxPermSize大小
- Xms与Xmx大小最好一致,否则GC后会重新分配内存空间
- 永久代的常见内存溢出
- 当jsp预编译时,如果应用中存在大量的第三方jar,可能会超出一定一的4m内存,导致报错
- 可适当调整Xms、Xmx和PermSize、MaxPermSize大小
- 运行方式优化
- Apache旗下的一款开源的实现Jsp规范的Servlet容器