【译】resin4.0 API——resin.xml
原文:http://caucho.com/resin-4.0/admin/config-resin-xml.xtp#Resourcesdatabasesqueuescachesandcustom resin中,所有的用户自定义配置都配在resin.xml里。resin.xml概要着重描述了资源,集群,域名映射与URL映射控制,以及习惯性配置。 目录
1.概念和命名约定 ·cluster(集群)- 一个集群包含多个server。 ·environment(环境) - 应用的(原文是独立类加载环境 insolated class-loader contexts)的上下文,即应用享有的资源。server,host,web-app是最主要的环境。 ·host - 一个HTTP虚拟host ·proxy cache(代理缓存) - HTTP代理缓存(译注:收到请求之后,检查本地的缓存来确定是否要向后端服务器发起请求,向后端发起请求并收到回复的情况下,把响应回复又缓存在本地。类似nginx) ·resource(资源)- 应用可使用的驱动或服务。含:JNDI,CDI,JMS队列,习惯性CDI配置。resin特有的资源含:安全,身份验证,健康检测和重定向/URL映射系统。 ·rewrite/dispatch(重定向/调度) - 定向HTTP请求到servlet和相应响应代码。类似于使用apache的mod_rewrite进行URL地址的重定向。 ·server(服务) - 一个Resin JVM实例。一台机器上可以有多个server。 ·watchdog(监控) - 一个用于监控Resin server的JVM实例,它可以在它认为有必要的时候自动重启server。 ·web-app (web应用)– 一个HTTP web应用,里面包含了servlet。 2.resin.xml概要 例: <resinxmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <cluster-default> <!-- shared configuration across allclusters --> <resin:importpath="classpath:META-INF/caucho/app-default.xml"/> <resin:importpath="${__DIR__}/health.xml" optional="true"/> </cluster-default> <cluster id="my-cluster"> <server-default> <!-- thread limits,JVM config,keepalives,ports,HTTP --> <http port="8080"/> </server-default> <server id="server-a"address="192.168.1.10" port="6800"/> <server id="server-b"address="192.168.1.11" port="6800"/> <host id="www.myhost.com"root-directory="hosts/myhost.com"> <resin:MovedPermanentlyregexp="/old-file" target="/new-path"/> <web-app-deploypath="webapps" expand-preserve-fileset="WEB-INF/work/**"/> <web-app id="/custom"> </web-app> </host> </cluster> </resin> <cluster>是server,host,以及通用资源的容器。cluster中的server共用它的配置。 3.默认配置:服务默认配置,集群默认配置,web应用默认配置(server-default,cluster-default,web-app-default) 想给一组server配一些默认项,比如最大线程数,http端口号时,你可以把这些公共的配置放在<server-default>中。类似的,对于cluster,virtual-host或web-app-default,你可以用<cluster-default>,<host-default>和<web-app-default>去管理这些公共配置。 以下例子中,用<cluster-default>和<resin:import>来管理公共web-app配置,且health-system的配置也通用于所有的cluster。 例子: <resinxmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <cluster-default> <resin:importpath="classpath:META-INF/caucho/app-default.xml"/> <resin:importpath="${__DIR__}/health.xml" optional="true"/> </cluster-default> <cluster id="my-cluster-a"> ... </cluster> <cluster id="my-cluster-b"> ... </cluster> </resin> 4.服务:一个JVM实例 详细配置见serverconfiguration。 一个<server>标签配置cluster中的一个JVM实例。一个server的独立配置不通用于整个集群配置。watchdog根据<server>标签的内容去启动一个Resin JVM,<server>标签中也配置JVM参数。 · server id 用于标识一个server。 · 局域网IP地址和端口用于和server交互 · JVM参数,比如-Xmx · 线程配置如thread-idle-min和thread-idle-max · TCP端口(含HTTP端口)的超时时间和cluster端口 · 负载均衡配置,包含负载比重和超时时间 · 使用Unix setuid的用户名和用户组名,保证安全性 <server>配置了cluster中的servers,server使用 --elastic-server和--cluster command-line 启动,server们共享cluster中的<server-default>配置。 5.监控(watchdog):保护服务 watchdog监控Resin server的JVM实例,当实例出错的时候,watchdog会自动重启它。watchdog承担为server设置JVM参数的工作,打印日志,处理Unix的setuid。 6.集群:执行共同任务的多个服务 详细配置说明见:clusteringconfiguration 一个Resin集群包含一组执行共同任务的server,比如说提供HTTP请求服务,负载均衡,或处理JMS队列。每个的server都会属于某个cluster。即使只有一个server,也会隶属于一个cluster。 server共同的任务会被配置在cluster中,无论是传统的HTTP请求,JMS队列或是SOA型的服务。HTTP类型的服务需要特别配置<host>标签,而重定向系统,非HTTP类服务可以使用CanDI型配置。 例子:http servlet的cluster配置 <resinxmlns="http://caucho.com/ns/resin"> ... <cluster id="http"> <server id="a"address="192.168.1.10" port="6800"> <http port="8080"/> </server> <host id=""> <web-app-deploypath="webapps" expand-preserve-fileset="WEB-INF/work/**"/> </host> </cluster> </resin> 一个resin cluster也可以用作非HTTP资源。Resin会管理JVM生命周期,watchdog自动重启,系统健康检查以及cluster交互。当然服务也会受自身代码的操纵管理。(废话) 例子:非http servlet的cluster(原文是cluster for httpservlets,应该有问题,此处是non-http配置) <resinxmlns="http://caucho.com/ns/resin" xmlns:myservice="urn:java:com.mycom.myservice"> ... <cluster id="http"> <server id="a"address="192.168.1.10" port="6800"/> <myservice:MyServiceaddress="${resin.address}"> ... <!-- CanDI configuration for theservice --> </myservice:MyService> </cluster> </resin> <cluster>标签形成了一个class-loader资源环境,这个资源可以被所有的host和server中的所有web-apps共享。公共的CDI资源如数据库,队列和缓存可以配置在cluster中,则可以被整个环境所访问。 7.host:HTTP虚拟host 详细配置见:virtualhost configuration 用<host>标签可以配置一个HTTP虚拟host。host的名字用id或host-name属性标识。名字为空的host,如id=””这样的是默认host。 host可以专门用<host>标签配置,也可以用<host-deploy>标签隐式配置。host们共享<host-default>中的公共配置。<host-deploy>中包含一个隐式定义的host的目录,比如说”webapps”目录用于<web-app-deploy>。 <host>标签映射一个HTTP url到一个虚拟host上。这个host可以对应一个或多个<web-app-default>、<web-app>、<web-app-deploy>中的web-app。 对于cluster来说,<host-deploy>可以当做命令行部署的目的地。所有cluster中的server可以继承拓展命令行部署的host。 因为host可定义环境资源,因此它可以定义共享资源如数据库,缓存,CDI服务和队列。host也可以定义URL映射规则。 8.Web应用:HTTP/Servlet应用(即静态或动态的应用) 详细配置见:deployconfiguration 一个web-app是一个基于http请求的应用,用servlet来处理请求。web-apps可以在WEB-INF/web.xml和WEB-INF/resin-web.xml中配置。一般用my-web-app.war这样的文件部署或者通过命令行以集群的形式部署,也可以把它按一个文件夹的形式放在webapps目录下。 在resin.xml配置文件中,web-app可以用<web-app>配置在<host>中或用<web-app-deploy>标签的形式隐式配置。web-app共享<web-app-default>中的公共配置。<web-app-deploy>指定一个webapps目录。 web-app标签的范围内也可放置资源环境,我们可以放置共享资源如数据库,缓存,CDI服务和队列。host也可以定义URL映射规则。 9.Rewrite:控制URL映射 详细配置见:rewrite/dispatchconfiguration 如果URL需要做变动或想要更美观的URL,你需要控制URL格式或映射URL,resin的rewrite标签可以帮到你。rewrite的功能类似于Apache的mod_rewrite,同时也集成了resin的HTTP和servlet映射功能。 举个例子, wiki需要改变易读URL(readable URL)为servlet可识别的URL来读取参数。以下例子中服务允许接收*.php,*.gif等后缀的URL请求,所有的请求都可以对应到一个页面。它同时也重定向所有其他的URL到/index.php页面。 例子:wiki的分发规则 <web-appxmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <resin:Dispatchtarget=".(php|gif|css|png|js)"/> <resin:Dispatch> <resin:IfFileExists/> </resin:Dispatch> <resin:Dispatchregexp="^" target="/index.php"/> </web-app> Resin的负载均衡,http代理和fast-cgi都再重定向规则里配置。这意味着你可以让HTTP请求由一个web-app处理或者一组后端服务集群处理。 例子:负载均衡 <web-appxmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <resin:LoadBalanceregexp="^/test" cluster="backend-cluster"/> </web-app> 10.负载均衡:用于对多个后端服务器负载均衡 详细配置说明见:loadbalancing configuration Resin的HTTP负载均衡基于轮询机制分配后端服务器的HTTP流量,在服务器发生故障时可自动切换。负载均衡基于resin的集群,当有添加或删除server的情况时可以自动弹性处理。 负载均衡基于重定向操作,soket参数和超时标准可以在<server>中配置。它可以识别服务器是否有效,超时或过载。 例:负载均衡分发配置 <web-app xmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <resin:LoadBalanceregexp="^/test" cluster="backend-cluster"/> </web-app> 例:负载均衡超时时间配置 <resinxmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <clusterid="backend-cluster> <server id="a"address="192.168.1.10" port="6800"> <load-balance-socket-timeout>60<load-balance-socket-timeout> <load-weight>200<load-balance-weight> </server> ... 11.日志:JDKjava.util.logging 详细配置方法见:loggingconfiguration Resin的日志打印基于JDK的java.util.logging。另外,watchdog会把控制台输出打印到log/jvm-server.log。 JDK的日志打印模块由两个元素构成:log handler和logger。log handler获得日志信息并处理。Resin进行基本的日志格式化并将日志保存到日志文件中。Java代码中使用JDK logger来发送信息。每一个logger都有一个名字,通常命名为java类的名字,并在日志中打印带着个名字标识的日志。比如"com.caucho.util.ThreadPool"。 通过配置,我们可以设置日志的名称和日志等级。日志等级对所有的log-handler生效,设置之后只有符合等级的日志才会被打印。因此一些handler会收到所有的日志信息,但是logger只会接受info等级的信息。 以下log-handler发送所有日志信息到JVM的控制台输出。它也接受所有info等级的日志和MyBean的finer等级日志。所以控制台输出会包含所有的info和finer日志。 例:基本日志配置 <resinxmlns:resin="urn:java:com.caucho.resin"> <log-handler name=""level="all" path="stdout:" timestamp="[%y-%m-%d%H:%M:%S.%s] {%{thread}} "/> <logger name=""level="info"/> <logger name="com.foo.MyBean"level="finer"/> ... </resin> 12.resource:数据库,队列,缓存 详细配置见:database configuration 可以用标准XML语法配置所有基于java开发的resource,比如说ActiveMQ队列。Resin可以把resource注册为CDI或JNDI形式,便于应用使用。 一些常用的资源,比如数据库,Resin有专门的标签用于配置。大多数使用基于CDI的形式。 resource和web-app、host、cluster一样使用class-loader环境。因为环境之间是独立的,web-app/foo中的一个foo数据库配置不会影响web-app/bar。 CDI形式的配置是java类与XML之间的直接关联。你可以实例化Java beans,配置他们的CDI标签和属性,然后把它注入其他beans。 举个例子,以下配置配置了一个Resin集群式jcache,它可以以@Inject Named的形式注入任意一个应用。也可以说,你的应用可以使用CDI形式获取jcache实例以及其他Resin配置的实例。 ClusterCache实例在集群之间共享缓存数据。 例:jcache配置 <web-app xmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin" xmlns:ee="urn:java:ee"> <resin:ClusterCacheee:Named="test-cache" resin:Jndi="cache/test"> <expire-timeout>1h</expire-timeout> </resin:ClusterCache> </web-app> 13.健康:监控,操作,与报告 详细配置方法见:healthconfiguration Resin的健康系统持续监控服务器的健康。 ·sensors(传感器):收集Resin内部状态数据。 ·meters:保存传感器和JMX数据在内部数据库。 ·health-checks:评估Resin系统的健康。 ·actions:执行具体操作来处理Resin健康问题。如:发送邮件,收集更多细节信息,或重启服务。 ·reports:对服务器历史情况生成pdf报告。 a)健康检查 运行健康检查需要几分钟时间。期间会检查JVM状态,返回简单的响应来告知服务器的健康状态是OK,WARNING,CRITICAL或者FATAL。如果你使用Nagios管理工具,这个过程是很类似的。Resin有几项固定的健康检查项,它很直接地描述一个用户自定义健康检查。 健康检查的结果中会记录这次检查是否通过,可以设置触发动作比如说发邮件或重启服务。 在下面这个例子中,JvmDeadlockHealthCheck包含了JVM的线程死锁检测。如果检测到线程死锁,健康检查的结果将会是fatal(致命的)。MemoryTenuredHealthCheck用于检测JVM的空闲空间。如果空闲空间过小,他会强制进行一次堆垃圾回收。如果垃圾回收也失败了,则返回一个critical结果。 例:健康检查 <resinxmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <cluster-default> <health:JvmDeadlockHealthCheck/> <health:MemoryTenuredHealthCheck> <memory-free-min>1m</memory-free-min> </health:MemoryTenuredHealthCheck> </cluster-default> </resin> b)健康操作 健康操作可以根据健康检查结果,JMX值或者根据定时事件触发。每分钟Resin会检测一次是否符合条件启动某个健康操作。 内置的操作有:重启,生成报告,发送邮件,收集信息比如线程快照,执行自定义的PHP页面。自定义操作也可以简单地实现。 以下例子展示了当健康检查结果是fatal或持续处于critical状态超过5分钟时对resin执行重启操作。 例:重启操作 <resinxmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <cluster-default> <health:Restart> <health:Or> <health:IfHealthFatal/> <health:IfHealthCriticaltime="5m"/> </health:Or> </health:Restart> ... </cluster-default> ... </resin> c)健康仪 健康仪收集每分钟的数据然后记录在内部数据库里。这些数据用于展示在/resin-admin中或者生成PDF报告。 以下两个例子来自默认的health.xml配置文件,配置中使用内部的JDK MBeans来存储JDK数据。第一个例子保存了操作系统的屋里存储数据。第二个meter每60s保存一次JIT编译时间。 例:JMX meters <resin xmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <cluster-default> <health:JmxMeter> <name>OS|Memory|Physical MemoryFree</name> <objectName>java.lang:type=OperatingSystem</objectName> <attribute>FreePhysicalMemorySize</attribute> </health:JmxMeter> <health:JmxDeltaMeter> <name>JVM|Compilation|CompilationTime</name> <objectName>java.lang:type=Compilation</objectName> <attribute>TotalCompilationTime</attribute> </health:JmxDeltaMeter> ... </cluster-default> ... </resin> d)健康报告 PDF报告中可以自定义选择图或测量数据。每个图包含一组检测数据。比如,一个关于线程的图标可以展示JDK处于不同状态的线程数量(runnable,blocke等等),可以表现出Resin的线程池状态。 例:汇总报告 <resinxmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <cluster-default> <health:MeterGraphPage> <name>Summary</name> <period>6h</period> <columns>3</columns> <graph name="RequestCount"> <meter>Resin|Http|RequestCount</meter> </graph> <graph name="Threads"> <meter>JVM|Thread|JVM ThreadCount</meter> <meter>Resin|Thread|ThreadCount</meter> <meter>Resin|Thread|Thread IdleCount</meter> <meter>JVM|Thread|JVM RunnableCount</meter> <meter>JVM|Thread|JVM BlockedCount</meter> <meter>JVM|Thread|JVM NativeCount</meter> <meter>JVM|Thread|JVM WaitingCount</meter> </graph> </cluster-default> </resin> 14.安全:身份验证与权限约束 详细配置方法见:securityconfiguration 安全项可以使用CanDI型的资源或者使用servlet <security-constraints>来配置。 ·autenticator(身份验证):检查用户的身份证明(密码)。 ·登陆:通过HTTP/servlet验证身份并得到证明。 ·constraints(权限约束):允许或不允许用户访问某些资源。 以下例子使用基本的表单登陆来保护/admin.jsp页面的访问。只有用户有admin权限才可以访问。<resin: XmlAuthenticator>配置身份验证源(基于文件)。<resin:FormLogin>配置了登陆表单。<resin:Allow>限制了可以访问的页面。 例:表单登陆验证 <web-appxmlns:resin="urn:java:com.caucho.resin"> <resin:XmlAuthenticator> <user name="admin" password="{SSHA}h5QdSulQyqIgYo7BIJ3YfnRSY56kD847" role="user,admin"/> </resin:XmlAuthenticator> <resin:FormLogin> <login-page>/login.jsp</login-page> <error-page>/form_error.jsp</error-page> </resin:FormLogin> <resin:Allowurl-pattern="/admin.jsp"> <resin:IfUserInRolerole="admin"/> </resin:Allow> </web-app> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |