执行线程和队列
本部分内容简单描述了Oracle WebLogic服务器的内部架构,大家可以了解到该服务器如何执行工作来满足用户请求的。当客户端向WebLogic发起请求时,响应该请求的实际工作是由叫做执行线程的Java线程执行的。用户可以使用指向Servlet引擎的基于HTTP的请求,或者访问诸如企业级JavaBean(EJB)这类对象的远程方法调用(RMI)来提交工作。当服务器进程启动时,它会把自己绑定到一个端口,并给该端口分配一个针对传入请求的监听线程。一旦该请求建立了连接,服务器就把该连接的控制传递给socket muxer。Socket muxer从socket读取请求,并在请求到达时把工作请求放到自调整的执行队列中。一个空闲的执行线程将从执行队列取出请求,再把这些请求的响应工作转发给专门的处理线程。执行线程执行请求并返回响应。
Oracle WebLogic服务器使用socket muxer(软件模块)读取服务器上的传入请求。Muxer从网络上读取消息,并把它们打成工作包,然后放入工作管理器队列,通过某个线程执行工作并确保响应回到请求来源的同一个socket去。有两种类型的muxer,一种是Java Muxer,另一种是本地muxer。Java muxer使用专门平台的本地二进制包。默认情况下,Oracle WebLogic使用本地muxer——也就是说,该服务器的“启用本地IOP”参数是选中状态。要注意的是,若使用本地muxer,该服务器会创建固定数量的线程来读取传入请求;而使用Java muxer,你可以在管理控制台中修改“Socket读取器百分比”参数来配置线程数量。本地muxer分配特定比例的服务器线程来用作socket读取器线程,形成线程池功能,同时剩下的服务器线程忙着处理客户端请求。一般情况下,你需要小心修改socket读取器线程的数量。在许多情况下,最优化的配置是设置为“1”。
如果你想知道使用的是本地muxer还是Java muxer,看看消息涉及的执行线程就知道了。如果你用的是本地muxer,服务器错误信息会提示“weblogic.socket.EPollSocketMuxer”;而如果你使用的是Java muxer,你看到的就会是“weblogic.socket.SocketMuxer”。要注意的是,“EPollSockerMuxer”只与运行于Linux服务器上的JRockit JVM有关。如果配置为本地muxer,你还可以看到“poll”字样,因为它使用了轮询机制来查询socket数据。本地muxer被认为能提供更优越的性能,尤其是在扩展为大用户群的情况下,因为它们使用了无阻塞线程模型。在管理WebLogic服务器实例时,你会经常遇到“阻塞线程”的情况,这种情况一般发生在某个线程不能在设定时间内(默认是十分钟)返回线程池的时候发生。
执行JMX API和MBeans
WebLogic服务器是用Sum的Java管理扩展实现的部署系统管理基础架构。执行JMX API涉及到使用Java MBeans(受管bean)给系统管理任务建模。如果你理解MBean和JMX API,你可以使用它们创建你自己定制的管理工具。然而,所有的管理工具(比如,管理控制台)都使用相同的MBean和JMX API,所以你不必重新发明轮子来创建定制管理工具。虽然WebLogic服务器管理员不需要知道如何用JMX API编程,但是如果对其编程有所了解的话,有助于理解不同类型的MBean以及理解JMX API如何与它们交互。
WebLogic服务器使用两种基本类型的MBean——配置MBean和运行时MBean——来配置、监视和管理服务器以及其资源。
配置MBean包含服务器和资源的配置信息,存储在域配置文件中,比如“config.xml”文件或者其它XML文件。这些都是持久的MBean,而域配置文件(config.xml)为这些MBean存储属性值。不管什么时候你用管理工具(比如管理服务器)修改了配置属性,这些变更都会持久化到“config.xml”文件中。通过修改启动脚本,在Java启动命令中添加额外参数“-D”选项,也可以修改配置值。如果你修改了任何配置设置,“config.xml”文件都会自动更新。当受管服务器启动时,它会联系管理服务器,获得配置信息副本,在内存中存储为配置MBean。因此,域中的所有服务器在内存中都有相同的配置副本。要注意,在启动受管服务器时,你修改的任何属性都不会影响“config.xml”文件;只有在管理服务器上修改的属性值,才会保存到“config.xml”文件中。当你关闭服务器实例时,该服务器托管的所有配置MBean都会被销毁。
运行时MBean帮助监视运行服务器实例,它包含保持服务器实例和应用程序运行时信息的属性。每个服务器的资源都会更新相关运行时MBean,包括其状态变化。例如,“ServerRuntimeMBean ”在服务器启动时会初始化,其中包括了该服务器的运行时数据。运行时MBean只由运行时数据构成,没有其它内容。当你关闭服务器时,“ServerRuntimeMBean ”中的运行时统计都被销毁了,其它所有运行时MBean的情况也类似。
MBean服务器充当着各种MBean容器的角色,该服务器创建并提供对MBean的访问。Oracle提供三种类型的MBean服务器。管理服务器托管域运行时MBean服务器实例,它为域范围内的服务管理MBean。受管服务器和管理服务器都托管运行时MBean服务器,它支持你配置服务器实例。管理服务器还托管编辑MBean服务器,它管理挂起的配置变更。管理服务器和受管服务器还可以选择性地托管JVM的平台MBean服务器,它控制包含JDK监视信息的MBean。
你可以在服务器实例运行时动态修改大部分域配置属性。对于不支持动态配置的属性,你就必须重启服务器实例了。你配置的运行时属性值将立即反映出你所作的变更,这些值会持久地保存在“config.xml”文件中。
开发模式和产品模式
默认情况,WebLogic服务器域运行在开发模式下,使用的是Sum的Java开发包(JDK)。在这种模式下,应用自动部署是启用状态,管理服务器会在启动时自动创建“boot.properties ”文件。你还可以为安全套接字层(SSL)使用演示版认证,在WebLogic服务器中不会得到任何警告。开发模式是提供给开发者快速运行用的,无需担心高级部署、配置和安全问题。
在产品模式中,WebLogic服务器默认使用JRockit作为默认JDK。此外,在产品模式中你不能使用自动部署功能,而且如果你为SSL使用演示版认证,WebLogic服务器会发出警告。在生产模式中,启动实例时会提示输入用户名和密码。
监听端口和监听线程
监听端口用来监听连接请求;当连接到来时,服务器会把监听线程分配给监听端口去接受连接请求,建立连接并把请求传递给socket muxer。
默认情况下,Oracle WebLogic服务器使用两个监听端口监听传入的连接请求。第一个监听端口我称之为标准监听端口,它接受任何类型的请求——不管是管理行为的请求还是用户请求。标准监听端口接受来自各种协议的连接,比如:HTTP、t3、IIOP、COM、LDAP和SNMP。当你启动WebLogic服务器实例时,它会启动监听两个不同的端口。第一个是标准普通文本端口,第二个是SSL监听端口。第二个监听端口也接受诸如HTTPS、t3s、IIOPS、COMS和LDAPS协议的客户端连接请求。
第二个监听端口称为管理端口。在配置管理端口时,你的请求必须使用SSL,你不能把任何管理请求指向标准端口。下面是服务器启动时显示两个默认监听端口行为的提示信息:
<Jan 30, 2011 12:12:01 PM EST> <Notice> <Server> <BEA-002613> <Channel "Default[7]" is now listening on fe80:0:0:0:e066:c24c:22cc:3d30:7001 for protocols iiop,t3, ldap, snmp, http.><Jan 30, 2011 12:12:01 PM EST> <Notice> <Server> <Channel "DefaultSecure[3]"is now listening on 192.168.1.2:7002 for protocols iiops, t3s, ldaps, https.>
虽然使用管理端口是可选的,但要注意的是,只有在使用管理端口的时候,你才可以以备用模式启动服务器。在备用模式中,标准端口是不可用的,因此你必须使用管理端口来管理服务器。此外,还有两个独立的端口,一个用于管理行为操作,另一个用于应用程序流量,这是为了避免这两种类型之间网络流量的冲突。因此在生产环境下,你可以确保关键的管理行为(比如:启动和停止服务器,部署应用程序)不与应用程序通信竞争。管理端口仅接受安全SSL通信,所以通过该端口的所有连接都必须有认证。要注意,只有管理用户可以在管理端口认证;如果你启用了管理端口,就不会有管理通信在非管理端口被拒绝。
选择JVM
要运行Oracle WebLogic服务器,你需要一个Java虚拟机(JVM)。在你安装Oracle WebLogic服务器的时候,Oracle提供了两种类型的JVM供你选择:Sum Hotspot JVM和Oracle JRockit JVM。Oracle推荐你在生产环境中使用JRockit JVM,因为与Sum JVM相比,它提供了很多益处,包括更优越的性能,具备更好的可扩展性和管理功能。
在使用配置向导或者WebLogic脚本工具(WLST)创建域时,你可以为域配置JVM。在配置向导的域创建流程中,如果你在配置服务器启动模式中选择了产品模式,那么在JDK页中默认的JVM就是JRockit SDK。如果选择的是开发模式,你的域默认配置就是Sun JDK。
创建域之后要修改JDK配置也很容易。只需要在“startWebLogic.cmd”脚本(或者startWebLogic.sh脚本)中设置“JAVA_VENDOR”环境变量就可以了,如下面脚本所示:
$ set JAVA_VENDOR=BEA /* For JRockit JVM
$ set JAVA_VENDOR=sun /* for Sun JVM
在最新发布的WebLogic服务器中,你还可以给Oracle设置“JAVA_VENDOR”变量值,可以指定JRockit JVM。你可以在启动WebLogic服务器实例之后,通过查看命令窗口输出信息确认服务器的JVM版本。如果你对JRockit JVM不熟悉,那你一定要看看这款JVM的文档,会有一些特定供应商的选项。你可以使用JRockit运行任何用Sun JDK创建的应用程序。
使用Web服务器插件
虽然WebLogic服务器带有内建的web服务器,但你也可以使用第三方web服务器,比如Apache HTTP服务器。Web服务器可以被用于简单的外部请求,静态文本页;但是动态内容,比如由JSP或者Servlet开发的Java Web应用程序递交的内容,是由WebLogic服务器托管的,web服务器只是把这些请求转给WebLogic服务器。Web服务器可以使用WebLogic代理插件或者WebLogic服务器提供的名为“HTTPClusterServlet ”的servlet,把servlet和JSP请求转给集群。如果你想使用“HTTPClusterServlet ”代替代理插件,你必须把它配置为代理服务器计算机的默认web应用。
你可以在web服务器上安装WebLogic插件,这就允许服务器与运行于WebLogic服务器上的应用程序进行对话。WebLogic服务器上安装的自带插件支持以下Web服务器:
Apache HTTP 服务器
Microsoft IIS服务器
Sun Java System Web 服务器
你可以使用代理插件代理来自web服务器的请求,转给集群WebLogic服务器实例,为那些请求提供负载均衡和故障切换功能。你可以配置SSL协议,在Apache HTTP服务器插件和WebLogic服务器之间实现安全数据交换。
WebLogic服务器不仅可用来托管动态企业级应用,还可用作完整的web服务器,用来托管高容量网站和服务器静态HTML文件,以及servlet和JSP。