Tigase开发笔记2:Tigase组件详解

本文的目的是深入认识Tigase XMPP Server的特性。

Tigase的组件、插件配置非常灵活,几乎都在tigase root doc path/etc/init.properties文件中进行配置.

1、Tigase HTTP API

实现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

2、Tigase XMPP Server

全球大约有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

3、Tigase ACS

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

5、消息归档(Message Archiving)

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库网站:

projects.tigase.org/projects/ja…

JaXMPP库文档:

projects.tigase.org/projects/ja…

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

12、Tigase Testsuite

针对基本的XMPP和大多数扩展,提供了数百个测试。

Tigase测试包是一个强大的工具,可以运行Tigase服务器的功能和性能测试。它不限于Tigase,还可以测试支持XMPP协议的服务器。但是,此测试包是为Tigase设计的,是为了确保Tigase各模块功能正常。

这里是测试结果: build.tigase.org/~tigase/

实际上,Tigase的每日构建版都用此测试包做了测试,以保障代码质量。

详见: build.tigase.org/nightlies/t…

可以基于此测试包设计复杂的测试场景,此测试包最有趣的特点包括:

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)自动产生屏幕截图,并周期性的存储到硬盘
作者:被禁言文章转简书了
链接:https://juejin.cn/post/6844904197935071239
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论