![]() |
JFox Cluster(by huihoo.org JFox项目组) 初稿:orbat ([email protected]) 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==![]() * Replace Web Server HttpSession Container with ClusterableHttpSessionContaine ==JFox Cluster 优势==*统一Handler+Container架构,扩展性强*基于方法调用实现集群,比完全基于内容集群更灵活 基于数据,会有定时、对象检查等问题 *配置简单(做到集群系统和单机系统编码无关性) *Web Container 和 EJB Container可分离 *集群能力与协议无关(支持任何调用协议) ==正确认识集群==* 集群不是一项简单的技术* 集群也没有想象的那么复杂 * 从应用角度来讲,尽可能把集群看得简单些 * 实现集群的基本功能比较简单,但要实现精确的可靠的集群非常复杂 |