本文的目的是深入认识Tigase XMPP Server的特性。
Tigase的组件、插件配置非常灵活,几乎都在tigase root doc path/etc/init.properties文件中进行配置.
实现XMPP和HTTP之间的桥梁,可通过REST调用实现对Tigase安装的管理和维护,可通过脚本API在运行时进行扩展。
使用HTTP API组件,可以:
1)下载Tigase XMPP服务器运行时的统计,它包含了1000种不同的性能度量。可以做到轻松、快速的监控和早期预警等功能。
2) 通过REST API管理Tigase XMPP服务器,实现Tigase服务器与第三方维护、管理系统的集成。(需要组件sess-man,默认会加载该组件)
3) 灵活的脚本框架(Groovy) ,可以在运行时添加管理任务,可以在扩展管理和维护功能时无需重启服务。
4)灵活的HTTP API框架,可以添加更多的服务并托管到XMPP引擎上。
#http-api --comp-name-2=http --comp-class-2=tigase.http.HttpMessageReceiver --script-dir=src/main/groovy/tigase/admin http/http/port[I]=8080 http/api-keys[s]=open_access http/server-class[S]=tigase.http.jetty.JettyStandaloneHttpServer #http/rest/rest-scripts-dir[S]=../http-api/src/scripts/groovy/tigase/rest |
全球大约有1亿的设备连接到Tigase服务器上,全球大约有1100台服务器部署运行着Tigase服务器。
业界有很多优秀的开源XMPP服务器,比如eJabberd、Openfire、Jabberd2、Prosody,还有一些优秀的商业XMPP服务器,比如lsode、Jabber XCP等。在XMPP.ORG网站上可以看到完整的列表。
Tigase XMPP服务器是相当独特的,它完全支持最新的规范(如RFC6120-XMPP CORE、RFC6121-XMPP IM和其它扩展)。
1)高度优化的。主二进制文件小于1MB,可运行于10MB内存的设备上。
2)高度模块化。每个部件或组件都可以通过配置加载或替代。
3)非常灵活。集成到系统中很方便,支持开箱即用的集群,无需寻找附加软件或扩展库。
4)为低、中、高档服务器而设计。还在Amazon的EC2云上广泛测试过。
5)良好的测试。有专门的工具来运行自动化测试,还可以手动运行兼容性测试,以及大量的负载测试。所有的测试结果都是公开的,所有测试使用的工具和配置细节都是公开的。
6)支持脚本。支持Groovy、Python、Ruby、Scala等脚本语言编写扩展。
7)易于监控。可以通过HTTP、SNMP、JMX、XMPP等方式监控服务器。
8)支持SSL。Tigase从设计上就保证了安全,保护用户的隐私。API不允许从一用户访问另一用户的数据,在服务器端实现了强隔离。
config-type=--gen-config-def --admins=admin@10.5.1.48 --virt-hosts=10.5.1.48 --user-db=pgsql #--user-db-uri=jdbc:postgresql://localhost/tigasedb?user=postgres&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true --user-db-uri=jdbc:postgresql://10.5.1.12/tigasedb?user=postgres&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true |
Tigase单个安装(One Installation)可以支撑1400万在线用户;单个安装美妙可以处理50万条消息; 单个安装可以实现40台服务器集群。 即Tigase ACS。
Tigase ACS是Tigase XMPP服务器的商业级的集群实现 。它专注于某些目标,如联系人列表超过10个,以及大规模XMPP系统工作在集群模式:
1)在安装时解决网络流量的问题
2)允许扩展到上百万的在线用户或设备
3)允许把负载分配到多种机器上
4)实现系统的高可用,预防服务的中断
5)支持超大群聊
6)提供消息推送服务
使用ACS可以达到:
1)降低集群节点间的网络流量10倍以上
2)减少CPU利用率至少5倍
3)在高负载情况下也能提供可靠服务
4)支持大量的连接
在设计上可处理500万以上的在线用户。我们测试过产品状态,支持150万在线用户。
5)支持多服务器
设计上可以在50台以上服务器上有效工作。测试过10个集群节点,产品系统运行在40台机器的情况。
6)部署极其简单
只需修改一点配置,数据库层不变。
4、Tigase发布订阅(PubSub)
Tigase支持完整的发布/订阅(PubSub)扩展规范。可以把消息推送到上百万的频道中,每个频道可以有上百万的订阅用户。集群模式下提供了近乎线性的可扩展性和负载分配。
发布订阅扩展允许你创建频道供用户订阅,你可以把内容推送到频道并发布。然后全部内容或者只是更新的内容会被发送给所有的订阅者。这种基于角色的系统,与群聊类似,但订阅者不必在线,离线也能把消息推送给用户(只要用户一上线就能收到)。
发布订阅功能可以做什么?
1) 可以根据兴趣分组内容,如体育、科学、天气、新闻等,并把内容推送给感兴趣的人。
2)可以用于灾害预警,居民可以根据地理位置进行分组。
3)可以提供基于位置的服务。
4)业务流程可以使用此方式来发送警告。
Tigase的发布订阅可以提供:
1)交付近乎实时的通知给订阅频道的用户
2)基于角色的订阅系统,决定哪些用户只能接收/读取内容,哪些用户可以发布内容到频道,以及频道级管理员、全局管理员。
3)自定义内容和通知元数据可以很好地匹配各种需求。
4)灵活的基于用户的交付系统,可以决定是否只把通知交付给在线订阅的用户;是否把通知交付给所有订阅的用户;还可以指定通知的过期时间,以及其他很多选项。
5)支持数百万的发布订阅频道交付通知给订阅者。
6)发布订阅频道支持上百万的订阅者。
--comp-name-3=pubsub --comp-class-3=tigase.pubsub.PubSubComponent |
Tigase提供了对消息归档的完整支持(XEP-0136扩展),支持数据库分片(开箱即用),还能作为外部组建部署到多种服务器上。
用户往往希望保存聊天记录以便以后检索,基本上目前大多数聊天客户端都在本地保存了聊天记录,但是,用户往往不止一个设备,用户希望聊天记录在每个设备上都能查到。那么这些聊天记录如何在各种设备的客户端之间进行同步呢?
最佳的解决方法就是把聊天记录存储在服务器端,并运行用户的所有设备都能访问聊天历史记录。消息归档组件允许把用户的聊天历史记录存储到服务器的单个库中,并能按需搜索。Tigase服务器提供了对消息归档扩展的完整支持。对终端用户而言,他的工作完全透明,自动存储消息。
消息归档提供了聊天文档的大量特征:
1)可以在任意时间打开/关闭聊天记录
2)支持OTR(Off-The-Record,即聊后即焚)聊天
3)自动把群聊分到不同线程以便逻辑区分不同的对话
4)根据不同的条件,可以灵活地检索聊天历史记录
5)管理员可强制查看所有用户的聊天记录,而不管用户的设置
6)支持开箱即用的数据库分配,允许数据和负载进行分配
# message archive --comp-name-4=message-archive --comp-class-4 = tigase.archive.MessageArchiveComponent #message-archive/archive-repo-uri=jdbc:postgresql://localhost/tigasedb?user=postgres&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true message-archive/archive-repo-uri=jdbc:postgresql://10.5.1.12/tigasedb?user=postgres&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true message-archive/auto=true message-archiving/tags-support[B]=true # message-archive-xep-0136 [message|body] --sm-plugins=message-archive-xep-0136 sess-man/plugins-conf/message-archive-xep-0136/component-jid=message-archive@10.5.1.48 sess-man/plugins-conf/message-archive-xep-0136/default-store-method=message sess-man/plugins-conf/message-archive-xep-0136/required-store-method=message sess-man/plugins-conf/message-archive-xep-0136/store-muc-messages=user |
6、JaXMPP库
提供Android移动设备、GWT Web客户端、独立的Java应用程序等库,完全支持XMPP/Jabber规范及其所有主要的扩展。
JaXMPP代表Java XMPP,但它不仅是Java库,它还兼容GWT,因此可以用于开发Web客户端,它还兼容Android Java,因此可以用于开发带XMPP支持的Android移动应用,以及常规的Java应用程序。
此客户端库的功能完整,而且代码开源并免费。
JaXMPP库网站:
https://projects.tigase.org/projects/jaxmpp2
JaXMPP库文档:
https://projects.tigase.org/projects/jaxmpp2/wiki
7、Web客户端
全功能的Web客户端,支持基本的聊天、MUC、发布/订阅和许多扩展管理接口,通过CORS,经BOSH或WebSocket连接到任意XMPP服务器实现跨站点支持。
CORS:Cross-Origin Resource Sharing,跨域资源共享
功能非常全,支持:
1)完整的XMPP规范
2)Web优化(更快的重连和聊天状态恢复)
3)消息归档支持(从服务器查看历史聊天记录)
4)良好的MUC群聊协议(访问Web浏览器时可以群聊)
5)发布订阅(直接从Web浏览器发布消息到发布订阅节点)
8、Android Messenger
完全支持XMPP/Jabber的主要规范和大多数扩展,至此文档和照片的分享,好友的地理位置的分享。
Android Messenger是一个全功能的XMPP客户端,而且还注意保护设备的电池电量,减少设备的流量。特征如下:
1)至此XMPP最新的RFC规范和大多数扩展
2)面向移动的优化,减少电池使用率,降低流量
3)可以同时连接到不同的XMPP服务器,不限制账户数量
4)支持MUC群聊
5)与好友分享地理定位
6)文档和照片分享
7)支持发布订阅功能
9、Tigase Socks5 Proxy
实现通过NAT网络地址转换后的用户间的二进制数据和文件的传输,针对大文件和小文件传输做了优化,支持传说的quotas与计费系统的集成。
及时消息和实时通信系统如今不仅是聊天、在线状态,还可以是语音、视频通话。人们分享他们的想法、经验、情感、照片、视频以及文件。尽管文档分享主要是企业和团体协作的主要功能,照片和视频分享才几乎是每个人都需要的。人们拍照、录制视频,并希望与朋友和家人即时分享。因此,当前的IM和RTC部署需要有效的文件共享系统。
理想情况下,你希望人们直接互联并直传文件。但这不可能,因为如果用户位于NAT背后,或者用户希望与多人一起分享文件就做不到。对于后者,用户需要多次传输文件给朋友才能实现群体分享,消耗太大。
使用公网的代理服务器可以轻松解决以上问题。它允许用户通过代理传输文件。在NAT背后的用户都可以连接到公网代理服务器,并通过它传输共享的文件给多个好友,每位好友可以从服务器下载分享的文件。
Tigase Socks5 Proxy提供了很多独特的功能:
1)NAT背后的用户的二进制数据传输,可交换各种类型的文件
2)超高吞吐率,可充分利用带宽,尤其是传输大文件时
3)大量的并行传输,同时传输多个文件
4)全局配额或为每位用户配额或为域配额,以限制传输和防止滥用
5)易于与计费系统相集成,以便为用户提供更好的服务
6)提供积分系统
7)设置多种机器来分担负载
8)虚拟域的支持,允许隔离用户和客户端到不同的计费组
9)很好地与Tigase XMPP服务器集成,在集群模式下部署系统支持数百万在线用户
10、Tigase CLI Management
提供对XMPP服务器的命令行访问,轻松完成管理任务。
此功能很方便,它可以通过一个漂亮的图形界面来管理。但是,对于Tigase集群模式的安装,最好是采用命令行方式管理,尤其是执行那些通过定时器运行的自动化任务。Web控制台和独立应用都干不了这些任务,还是需要可靠的、灵活的命令行工具来完成这些任务。这就是Tigase命令行管理工具。它的特征如下:
1)完全支持XEP-0133规范的管理命令
2)通过API编写脚本做扩展。尽管工具只是一个Java应用程序,但还是可以使用脚本语言(如Groovy、Python、Ruby等)扩展其功能和命令
3)提供大量开箱即用的管理任务,满足常规的管理需求
4)简单、易用,学习成本低
11、Tigase MUC
支持基于角色的群聊,提供API和自定义扩展,可处理数百万的小型聊天室和有数千用户的大型聊天室。
真正的社区需要人们的互动。这可以通过多种方式实现:电邮、Twitter、FaceBook、论坛、网站评论等。但是,这些都比不上实时通信,发送聊天消息,可以立即得到回应,与朋友在线聊天。多个人一起聊可以用群聊。
Tigase的MUC组件可以提供:
1)实时群聊
这意味着很多人可以在虚拟房间聊天,交流想法。
2)基于角色的房间成员
允许设定房间管理员、版主,分配发消息和允许监听/读取消息的权限。
3)密码保护的聊天室
创建私人群聊室,有密码的用户才能进入聊天室。
4)受邀的聊天室
受邀的用户才能进入聊天室。
5)私人的、无形的聊天室或公共聊天室都可以按需求轻松创建
6)聊天历史记录到数据库
7)通过MUC集群模式支持数百万的群聊室,负载可以有效地分布到各服务器上,并提供了几乎无线的可扩展性
8)MUC集群模式支持超大群聊天室,可容纳成千上万的用户,可以把单个聊天室分不到集群中的多台服务器上。
所有提供的MUC功能都是开源软件,只有MUC集群模式是官方额外提供的商业级功能。
# muc --comp-name-1=muc --comp-class-1=tigase.muc.MUCComponent muc/history-db=pgsql #muc/history-db-uri=jdbc:postgresql://localhost/tigasedb?user=postgres&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true muc/history-db-uri=jdbc:postgresql://10.5.1.12/tigasedb?user=postgres&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true muc/muc-lock-new-room[B]=true muc/muc-allow-chat-states[B]=true muc/default_room_config/muc#roomconfig_persistentroom=true |
针对基本的XMPP和大多数扩展,提供了数百个测试。
Tigase测试包是一个强大的工具,可以运行Tigase服务器的功能和性能测试。它不限于Tigase,还可以测试支持XMPP协议的服务器。但是,此测试包是为Tigase设计的,是为了确保Tigase各模块功能正常。
这里是测试结果: http://build.tigase.org/~tigase/
实际上,Tigase的每日构建版都用此测试包做了测试,以保障代码质量。
详见: http://build.tigase.org/nightlies/tests/
可以基于此测试包设计复杂的测试场景,此测试包最有趣的特点包括:
1)自定义的脚本语言,可使用很少的代码即可设计非常复杂的测试场景。
2)无需添加简单的测试脚本(内容很全了),在大多数场景下只需指定发送到的服务器、预期的返回结果即可。
3)产生HTML格式的测试报告:成功的测试标绿,失败的测试标红。
4)对每个测试案例都有定时器,因此可以清楚知道服务器的响应时间,还可以用它比较各版本之间的性能差异。
5)每个测试案例都有完整的协议交互的输出,可以定位和分析错误。
6)所有的测试案例都是运行在网络并执行了服务器的方方面面,因此测试包是完整的测试,从网络层到上层组件都得到了测试。
13、Tigase ALB
无限制的设备在线数,地理上发布的集群节点,减少97%网络流量。
有几种解决方案,允许你把用户分配到集群节点,并分发到多个服务器上。这些解决方案包括:Round-robin轮询、专业级的硬件路由器(比如Cisco的)、软硬件防火墙、代理服务等。
这些方案都是为用户随机分配机器,分布或许是比较平均的,但不是最佳的,如果你使用了Tigase ALB(Advanced Load Balancer),那么可以做到其它方案做不到的三件事:
1)为1亿或更多在线用户运行安装
2)构建地理上分散的XMPP集群
3)为有非常大的联系人列表的用户运行安装,联系人列表的人数平均有数千个
对Tigase ALB来说是可能的,因为它把用户分配到特定的集群节点或节点组。它会分析所有用户账户的社交网络,把用户分配到特定的机器上,以便减少网络流量。它采用了基于人工智能和遗传算法的高级技术来实现这一点。
ALB很复杂,但他工作的很好。
ALB是非入侵式的,它可以在后台不断地优化用户数据,并逐步提高系统的整体性能。ALB可以在任意时间打开和关闭,而不会影响XMPP的安装。ALB可以与Round-robin轮询或其它负载均衡方案一起工作。一旦你正确地安装并配置ALB到系统中,它会变为不可见,但你可以看到效果,系统的性能每天都在变得更好。
14、Tigase STUN
允许NAT背后的设备直连,减少服务和系统的负载,降低网络流量。
Jabber、XMPP、IM(Instant Messaging)、IC(Instant Communication)服务最初是交换文本信息。消息文本、用户状态文本、联系人信息文本等,都是通过这样的系统进行交换的。
现在,各种类型的文档、招聘、视频、数据库等,这些二进制数据也需要实时交换。XMPP服务器可以搞定这个,它可以作为二进制连接握手代理和实际的P2P连接的代理或中转代理。偶尔还可作为带内传输。这里有多种选择,通常首选萨送大的二进制数据块给直连的用户。这也是最高效和成本最低的方式。
不幸的是,用户之间要实现直连是很困难的,这是因为NAT的原因,用户在NAT背后,所以用户的设备是不可见的,Internet不能直达。如果某个应用从NAT背后的设备连接互联网时,它是没有办法告知服务器它自己的公开/静态IP地址的,因此它也没法提供任何可选项给第三方如何建立P2P连接。这就需要一个中间服务器,STUN服务器可以搞定这个。它允许应用程序发现自己的公开IP地址,并与另一方协商最优的直连。
此方案的优点:
1)位于NAT背后的两个设备可以建立P2P直连
2)消除了网络消耗大的二进制传输,减少了服务器负载;
3)通过减少了负载和网络流量,降低了运营成本
4)如果需要媒体交换作为用户到XMPP服务的连接,那么它是一个理想的解决方案。它可以很好地与Tigase XMPP服务器相集成,可以部署到多台服务器上,无需复杂的配置。
15、Tigase Monitor监控
更早的发现网络瓶颈。
Tigase Monitor是一个独立的桌面应用程序,它可以连接到所有的Tigase服务器,并提供所有Tigase系统的状态概览 。它可以展示有意义的图表,包括:CPU利用率、内存使用率、用户的分布、不同类型的流量……
除此以外,它还提供了内部队列尺寸、潜在的评奖、平均处理时间的详细信息。
Tigase Monitor是实时监控,系统有状况,会立即得到通知。
Tigase Monitor特征包括:
1)Tigase测量的实时数据活动图
2)单个应用监控的服务器数量无限制
3)自定义的“第二”窗口:用于显示自定义的测量数据
4)系统性能和瓶颈的详细信息
5)自动产生屏幕截图,并周期性的存储到硬盘