论坛首页 Java企业应用论坛

JBoss5 Clustering Guide (第三部分)

浏览 2680 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-05-03  
Chapter 2. Clustered JNDI Services
(HA-JNDI服务也是个cluster的服务, 就像其它服务一样, 并且是其他服务的注册表)
JNDI是应用服务器中最重要的服务(就像手机中的sim卡). JBoss HA-JNDI(High Availability JNDI)服务功能如下:
* 透明的失败转移. 如果一个naming context连接的服务失效或者停机, 自动转移到另外一个AS 实例上
* 负载均衡. naming context自动的负载均衡到cluster中的所有server上.
* 自动发现 HA-JNDI服务器, 利用广播.(现在的网络情况下能行?)
* 统一的JNDI树形结构. 连上一个node就能知道其他node上的服务. 通过以下两种机制实现:
1. cluster内lookup. 客户端lookup, 服务端HA-JNDI服务能发现绑定在node上的普通JNDI
2. cluster范围内的复制context tree. 绑定到HA-JNDI上面的对象可以在cluster内复制, 副本会出现在cluster中每个node的vm内.

JNDI是其他基于拦截器cluster服务关键: 那些服务注册到JNDI所以客户端能够lookup到他们的proxy, 从而调用他们. HA-JDNI通过HA的方式查找服务. 但是, 要记住, HA-JNDI对找到的服务能否提供cluster服务没有作用:
* 如果EJB不是配置为cluster, 仅从HA-JNDI lookup到的EJB不能得到cluster的好处(load balance/失败转移/状态传播)
* 如果EJB配置为cluster, 通过普通的JDNI去lookup不会让EJB cluster的特点消失.
(这个鸟东西写的特别晦涩, 貌似注册表同步缓存到每个节点上. EJB的cluster服务必须跟他狼狈为奸才最好用, 但不是必须的.)
(另外这玩意应该是基于缓存服务的, 能否就把它当singleton使?)

2.1 HA-JNDI是怎样工作的
JBoss客户端HA-JNDI命名Context基于客户端拦截器.
客户端拿到一个HA-JNDI proxy对象(通过InitialContext对象), 通过proxy调用远程服务器上的JNDI lookup. 客户端通过配置InitialContext需要的properties来指定HA-JNDI proxy.

在服务器端, HA-JNDI服务维护一个cluster范围内的contex树. 只要cluster里面还有一个node, 这个树就存在. 每个Node还维护一个本地的JNDI Context树. 这个节点上的HA-JNDI服务就能找到本地树JNDI树上绑定的对象. 一个应用把可以把对象绑定在哪里都可以. 理由如下:
* 避免了迁移问题. 仅仅通过配置文件就能让cluster实现.
* 在一个homogeneous cluster,这种配置减少了网络通讯. homogenous cluster是说在不同node上, 同类对象用相同的名字去绑定. (有反例吗?)
* HA-JNDI变成可选服务. 因为代码里面仅仅new InitialContext()来查找和绑定.

服务器端, 通过new InitialContext()来绑定是本机的, 不是cluster范围内的(这是基本的JNDI). 所以, 所有的EJB home等等都不会绑定到cluster级别的JNDI上, 仅仅是绑定到本地JNDI

当一个远程客户端通过HA-JNDI来lookup的时候, HA-JNDI在cluster范围内找不到时会代理本地到Context. 规则如下:
* Cluster范围JNDI优先
* 尝试本地JNDI
* 去其他node的本地JNDI找(没有隐私了?)
* throw new NameNotFoundException()


在实战中, 应该尽量不要绑定对象到Cluster级别的JNDI树上去, 应该绑定到本地. 比如EJB, 应该绑定到本地JNDI, 而不是HA-JNDI. 所以, 客户端通过HA-JNDI是通过代理到本地JNDI上的.

(就是说, 把cluster这种事情让框架去操心, 尽管按照最简单的本地方式去lookup, 减肥是EJB的近期发展方向)

注意 写道
在不同的node上, 同样的名字可能在本地绑定了不同的东西, 而HA-JNDI不一定先找到哪个node. 所以要用不同的名字绑定不同的东西


注意 写道
如果你想用HA-JNDI的话, 就别想用其他的JNDI实现,比如LDAP. 但是你可以使用ExteneralContext MBean来绑定非JBoss JNDI树到JBosss JNDI命名空间. 此外, 你可以为cluster用一个集中的JNDI服务器, 废掉HA-JNDI和JNP


注意 写道
如果绑定仅仅发生在一小撮node上, 比如一个bean仅仅部署在cluster的少部分node上, 根据查找规则, 那些没有绑定的节点可能会被先遍历一圈才回到本地. HA-JNDI的查找时间会很长. 尽可能的, 缓存JNDI查询结果


这里有三段重复,貌似作者喝高了, 略



   发表时间:2009-05-15  
这是翻译的吗? 请问原文在哪里?
0 请登录后投票
   发表时间:2009-05-16  
基本上都是翻译,原文参见第一章
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics