欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

理解Oracle WebLogic服务器的关键概念

程序员文章站 2024-02-15 08:37:58
...

为了完全理解WebLogic服务器如何工作,并让它表现出最佳性能,我们很有必要理解几个概念。最重要的概念都在下面的内容中谈到了。本文为第一部分。 执行线程和队列 本部分内容简单描述了Oracle WebLogic服务器的内部架构,大家可以了解到该服务器如何执行工作

为了完全理解WebLogic服务器如何工作,并让它表现出最佳性能,我们很有必要理解几个概念。最重要的概念都在下面的内容中谈到了。本文为第一部分。

  执行线程和队列

  本部分内容简单描述了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,你不能把任何管理请求指向标准端口。下面是服务器启动时显示两个默认监听端口行为的提示信息:




  虽然使用管理端口是可选的,但要注意的是,只有在使用管理端口的时候,你才可以以备用模式启动服务器。在备用模式中,标准端口是不可用的,因此你必须使用管理端口来管理服务器。此外,还有两个独立的端口,一个用于管理行为操作,另一个用于应用程序流量,这是为了避免这两种类型之间网络流量的冲突。因此在生产环境下,你可以确保关键的管理行为(比如:启动和停止服务器,部署应用程序)不与应用程序通信竞争。管理端口仅接受安全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。