设计美好的服务器(5)--Shoal集群框架

Overview

  • Shoal
  • Shoal Overview
  • Clustering with the Shoal Framework(java.net)
  • Shoal JXTA Overview Presentation
  • 作者Blog

Shoal是Glassfish的群集子项目,和Geronimo拼命整合现有开源项目相反,Glassfish在拼命拆分可独立使用的子项目。

Shoal很好的抽象了集群的两个最重要功能--群集节点管理和共享状态数据,而且,这一切是作为一个类库来提供,可以嵌入到任意的Java应用中。

集群的目标无外伸缩性与高可靠性,实现无外Load Balancer与Failover,而Shoal对这两点实现提供了很好的支持。可关注此项目的发展与应用,也可以基于它来学习一下群集的实现。

集群管理SPI

毫无例外地基于JXTA/JGroups。

  • 节点可以加入,退出集群。
  • 节点可以收到其他节点加入,退出(由节点主动发布),怀疑失效,确认失效(由心跳系统发出)的消息。
  • 实现了FailureRecoveryAction的节点可以收到虚拟管理器发来的接手某个失效服务器的指示。
  • 节点可以群发或一对一发送消息。

基于上面的功能,可以....

  • 可以做负载均衡分发器(仍然要自己实现),根据有效的群集节点来进行分发,节点还可以用sendMessage()接口发送自己的负载情况。
  • 可以做FailOver,当系统不是SNA架构时,接手处理的节点会根据指示,完成某些初始化工作,比如从共享内存中获取前任的数据,以保证自己能接手工作。
  • 如果共享数据只读或者多数为读,可以不用共享内存,而是各自在本地建立对象,然后通过群集管理SPI的sendMessage函数来通知更新。

状态数据共享SPI

使用专有的API进行读写,基于使用集群内机器循环备份算法。
对比其他分布式缓存方案,是分布式内存方案,共享数据不会基于某种规则失效(如总内存大小1G,先进先出),也不会自动清空过时数据。

示例代码

完整示例代码 ,比如启动GMS的代码如下:

GMSFactory.startGMSModule(serverName,
                groupName, GroupManagementService.MemberType.CORE, null);

  

你可能感兴趣的:(算法,负载均衡,集群,服务器,化工,Glassfish)