JFox(J2EE应用服务器开源项目)

JFox Cluster


(by huihoo.org JFox项目组)

初稿:orbat (young_yy@hotmail.com)

JFox Cluster 为 JFox 的高可靠性和可扩展性提供了强大的技术基础.

目前 JFox Cluster 还不稳定, 仍在开发和测试中, 还不可交付使用, 请持续关注.

有关 JFox Cluster 的讨论, 请到 JFox 论坛 - http://forum.huihoo.com/forumdisplay.php?fid=4

==认识集群==

* 分布式计算的延伸
   * 传统的分布式计算,强调服务器端对客户端的透明
   * 集群强调服务器端可由多台服务器提供服务,同时仍然对客户端透明
   * 分布式计算是对传统计算模式的分布,集群计算是对分布式计算Server端的再分布

* 提供HA(High-Availability), not equals H-P(High-Performance).
   * HA,保证在不可预测情况下(访问量猛增、不可预测的宕机),系统的可用性
   * HP,提供最小的请求响应时间
   * 由于出于不同的考虑因素,HA不一定就等于HP,甚至矛盾.

* 最重要的功能
   * Load Balance (负载均衡)
     o Chose right Node
     o Session Stick
     o Request Re-Dispatch when node failed
     o Software/Hardware’s capability. (Apache/Pen/LVS/Cisco)

   * Fail-over (故障恢复)
     o Session Replication & Session Relocation
     o App. Server’s capability.

*一些误区
   * 集群节点越多越好
     o 集群本身有开销(CPU、Memory、 IO、 Network)
     o 加一台286?

   * 集群结构越复杂越好
     o 越复杂配置越麻烦,本身的稳定性也越难保证
     o 什么都用最好的?

   * 集群性能一定比单机性能好
     o 在单机能满足效率的情况的下,集群可能带来性能损失

   * 采用了集群,软件的性能和稳定性就高枕无忧了
     o 仅提供有限的性能和可靠性保证,在软件质量以及硬件环境没有保障的情况,集群也无能为力

==集群的设计==

* Cache 方案
   * Distributed cache (In Memory, JGroup,JavaSpace)
   * Centralize gloable cache (In Memory, In Database) Backup Storage/HADB

* Transport方案
   * 协议:UDP / TCP / JMS / JDBC
   * 粒度:Delta / Whole Session/ Full Session Pool
   * 同步:Sync/Async
   * 频率:Per Method / Per Interval

* 负载均衡算法
   * 随机 - Random
   * 轮循 - Round-Robin/Weighted Round-Robin
   * 性能优先 - Performance Precedence
   * 最少连接 - Least-Connection

* Full Scope Cluster
* Partition Cluster
* Primary-Slave-Backup

==JGroups介绍==

* Reliable
   * NAKACK

* Transport Protocol
   * UDP Multicast/Unicast
   * TCP Unicast

* GMS (Group Membership Service)
   * merge

* FD (Failure Detection) – 心跳检查

==JFox Cluster 实现内容==

提供的基础功能
*Load Balance
  --WEB - Http Request Redispatcher (Apache+Mod_JK/Pen)
  --EJB - EJB Smart Stub

*Fail-over
  --WEB - HttpSession Replication Manager
  --EJB - Bean Replication Manager

需要实现集群的容器
*Clusterable JNDI Container
*Clusterable Web Container
*Clusterable EJB Container
  --Stateless SessionBean 不需要Session Replication
*Clusterable Message Container

==JFox Microkernel==

JFox IoC Kernel
  *IoC based, Modular Ready.
  *POJO Remote Invocation
  *Multi-Protocol transport
  *Cluster Ready
--内核级集群支持,已经定义好了集群框架及API,开发容器的时候,只要实现ClusterableContainer 接口,即具备集群功能

--Support Smart Dynamic Proxy Stub

==JFox Remote Invoking Model==


* ConnectorInvoker + ConnectorRemote + HandlerManager + Handler + Container
* Port Reuse
* 可以根据需要增加协议,增加其它类型容器
* 分布式计算分为两个过程,分布和计算,考虑 Local 协议

==JFox EJB Cluster Model==


* 增加ClusterServer,ClusterContainer

==JFox EJB Smart Stub==


* Client 从集群中的节点创建的Stub含有多个Remote,并且能够在默认Remote 不工作的情况切换到能工作的Node

==JFox Web Cluster Model==

JFox Web Cluster Model
* Replace Web Server HttpSession Container with ClusterableHttpSessionContaine

==JFox Cluster 优势==

*统一Handler+Container架构,扩展性强
*基于方法调用实现集群,比完全基于内容集群更灵活
基于数据,会有定时、对象检查等问题
*配置简单(做到集群系统和单机系统编码无关性)
*Web Container 和 EJB Container可分离
*集群能力与协议无关(支持任何调用协议)

==正确认识集群==

* 集群不是一项简单的技术
* 集群也没有想象的那么复杂
* 从应用角度来讲,尽可能把集群看得简单些
* 实现集群的基本功能比较简单,但要实现精确的可靠的集群非常复杂