openfire中的集群技术及其原理

简介: 对即时聊天了解的可能会听说过openfire,openfire是基于JAVA语言的开源项目,主要是利用XMPP协议进行通信,今天主要探讨下其集群技术。

对即时聊天了解的可能会听说过openfire,openfire是基于JAVA语言的开源项目,主要是利用XMPP协议进行通信,今天主要探讨下其集群技术。

openfire采用了一个半开源的集群项目Hazelcast,像Mysql一样,有个功能不完全的开源版,而其功能完全的商业版则是要收费的。

通过对Hazelcast的使用和源码解读,我总结出了一些关于集群方面的个人思考。对于集群中各结点间无关联的可能只要通过增加机器就可以了,

但是对于即时通讯来说却不行,因为要共享用户的Session,所以就会有集群的数据共享问题,如何处理才能让其可以最大规模的拓展成为我们

重要难题,而今天的Hazelcast只是解决中小规模(官方说最大数百台)集群的一种技术方案,对于大规模的集群就重新选择了。

目前集群的网络架构设计可以分为中心管理型和对等型,所谓的中心管理型就是有负责管理集群中各结点的,比如Zookepper就可以充当这个角色,

而中心结点则不负责处理任何业务,只做管理元数据,使用过MongoDB的人应该能想到起的config进程其实也是这个角色,而所谓的对等型的网络,

其实里面也有个充当中心管理角色的结点,只不过它还要处理业务逻辑。Hazelcast就是一个看似对等的一个部署方案,它的中心角色对使用的程序

员来说是透明的,接下来我先说下它集群的创建过程,通过我画的这个流程图应该能理解一些。

也就是说它内部有个选举算法来决定哪个结点作为管理结点,在Hazelcast里又叫oldest结点,oldest结点负责接收加入请求并处理联合(Join)。

下图是我画的一个帮助理解集群联合过程的草图:

集群创建完后会有一人容器存放所有的集群结点信息,主要包括是否是本地local,地址address(IP,Port),UUID唯一编号等等。

说到这里我要说个插曲,对于这个存放集群结点信息的容器,使用了可重入锁技术(ReentrantLock   try前lock,finally里unlock)。

当然,除了用于管理集群中的结点的容器外,Hazelcast还提供了几个集群的数据共享容器,像Queue和Map,那可能会有人问这

些容器里的数据是怎么存的呢?是每个结点都放所有的,还是每个结点都只存各自的数据呢?如果每个结点都存放所有的数据,那

么当集群中结点数量越来越多后,各结点数据的同步还能很好进行么?而且冗余数据也会非常多。如果每台只存放各自的,如果这台

机器宕机了,共享的数据怎么办呢?带着这些疑问我接着看Hazelcast的源码,发现原来它是第三种相法,就是先把所有数据汇总,

由它来决定哪个结点存放哪些数据,一般每份数据会有两个备份,存放在不同的三台机器里,而每个结点会有一个Nearcache,充当

本地缓存。这个对使用它的程序员来说也是透明的,这样问题就集中在当结点变多时如何同步这些数据上了,其实这也是Hazelcast和

其他一些集群技术的难题,既要实时又要性能,这个难题大家可以一起思考,期待能有更多更好的大规模集群技术出现。

另外Hazelcast还有个监控集群的后台,原理也很简单,感兴趣的用一用就明的了,不过它是商业版里的部分,要想用的也很简单,反编译

它的class文,里面有个生成licence的类,它没有联网校验功能,只要licence就可以了,不过还是要尊重版权的。

目录
相关文章
|
21天前
|
存储 负载均衡 NoSQL
【分布式技术架构】「Tomcat技术专题」 探索Tomcat集群架构原理和开发分析指南
【分布式技术架构】「Tomcat技术专题」 探索Tomcat集群架构原理和开发分析指南
41 1
|
5月前
|
消息中间件 负载均衡 监控
分布式系列教程(08) -分布式协调工具Zookeeper(介绍&安装&配置详解)
分布式系列教程(08) -分布式协调工具Zookeeper(介绍&安装&配置详解)
373 0
|
3月前
|
缓存 负载均衡 应用服务中间件
【分布式技术专题】「分析Web服务器架构」Tomcat服务器的运行架构和LVS负载均衡的运行机制(修订版)
在本章内容中,我们将深入探讨 Tomcat 服务器的运行架构、LVS 负载均衡的运行机制以及 Cache 缓存机制,并提供相应的解决方案和指导。通过理解这些关键概念和机制,您将能够优化您的系统架构,提高性能和可扩展性。
205 4
【分布式技术专题】「分析Web服务器架构」Tomcat服务器的运行架构和LVS负载均衡的运行机制(修订版)
|
存储 缓存 应用服务中间件
分布式文件系统FastDFS看这一篇就够了(文件上传下载、单机部署及集群部署)(二)
分布式文件系统FastDFS看这一篇就够了(文件上传下载、单机部署及集群部署)
387 0
分布式文件系统FastDFS看这一篇就够了(文件上传下载、单机部署及集群部署)(二)
|
网络虚拟化
FusionCompute 新建分布式网络教程
FusionCompute 新建分布式网络教程
697 0
FusionCompute 新建分布式网络教程
|
存储 缓存 Java
分布式文件系统FastDFS看这一篇就够了(文件上传下载、单机部署及集群部署)(三)
分布式文件系统FastDFS看这一篇就够了(文件上传下载、单机部署及集群部署)
479 0
分布式文件系统FastDFS看这一篇就够了(文件上传下载、单机部署及集群部署)(三)
|
存储 容灾 算法
分布式文件系统FastDFS看这一篇就够了(文件上传下载、单机部署及集群部署)(一)
分布式文件系统FastDFS看这一篇就够了(文件上传下载、单机部署及集群部署)
368 0
分布式文件系统FastDFS看这一篇就够了(文件上传下载、单机部署及集群部署)(一)
|
SQL 存储 关系型数据库
【MySQL集群】——在Windows环境下配置MySQL集群
最近在项目中用到了MySQL集群,所以就和小伙伴们研究了两天。下面给大家分享一下成果。 小编始终觉得对新事物的学习,没有比看图这种方式更好地理解了。所以先来看一张mysql集群的架构图(摘自百度百科-MySQL Cluster):
【MySQL集群】——在Windows环境下配置MySQL集群
|
弹性计算 运维 负载均衡
服务器的“服务器”,enginx之于分布式部署的创新意义:使任何服务器程序秒变集群
本文关键字:nginx,元服务器,单机集群,分布式集群,集群引擎
470 0
服务器的“服务器”,enginx之于分布式部署的创新意义:使任何服务器程序秒变集群
|
NoSQL 数据库 Redis
Redis集群主从复制(一主两从)搭建配置教程【Windows环境】
Redis集群主从复制(一主两从)搭建配置教程【Windows环境】 由于本地环境的使用,所以搭建一个本地的Redis集群,本篇讲解Redis主从复制集群的搭建,使用的平台是Windows,搭建的思路和Linux上基本一致!  (精读阅读本篇可能花费您15分钟,略读需5分钟左右) Redis主.
1819 0