转详解Zoosk千万用户实时通信背后的开源技术
导语:本文由Zoosk(一个具有5000万会员的浪漫的社交约会网站)工程副总裁Peter Offringa所写,讲述了Zoosk的实时通信技术。
当我们的会员从Zoosk获得的最有价值的消息时,他们可以实时进行交互。毕竟,每个用户其连接的另一端都可能在未来产生关系。这种情况的兴奋和丰富才能充分实现实时。该套件的Zoosk服务促进这些交互一般被描述为实时通信(RTC)。这些通信交付使用XMPP协议,其他流行的即时通信产品也使用该协议。Zoosk的会员在三个不同的相互作用中体验实时通信:
- 存在。当一个成员正在积极地连接到 Zoosk RTC的基础设施时,其公共的状态将显示为“可用”。如果他们一段时间内均处于空闲状态,它们的状态过渡到“离开”。他们关闭或断开连接的客户端应用程序时,他们的存在将自动更改为“离线”。会员还可以选择显示“隐身”的状态呈现给其他用户。这个选项让他们继续使用Zoosk服务并看到其他在线成员,但其自身不会出现在其他用户的好友列表里。
- 通知。重要的相互交互是在视觉上进行包装,就像有短信时有“提醒”。提醒指导用户完成如接受一个邀请、查看他们的个人资料或与其他用户相匹配等一系列事件。作为一个弹窗给用户接收,在他们的个人资料,或被视为与另一个用户。Zoosk服务利用这些通知包,告诉客户端应用程序来更新用户界面的相关标记,如其他用户发来的未读消息的数量。
- 信息传送。如果两个用户同时在线,他们可以在一个熟悉的“即时消息”聊天版本里相互发送消息。这些消息通过RTC基础设施来实时传送。如果用户未来使用不同的客户端应用程序来重新连接,那么消息内容将保存到一个提供未来消息历史检索的数据库中。
这些通信目前通过所有主要的Zoosk产品向用户提供。
RTC基础设施
这些RTC服务通过一个高性能和高可扩展性的基于XMPP的基础设施来交付。采用开源Jabber服务器Tigase,是这项聊天服务的核心。Tigase是用Java编写的,并且我们的平台团队已经创建了一些自定义的扩展,来处理Zoosk特定的业务逻辑。
Tigase部署在具有标准的8个CPU,并基于Linux的应用服务器级别的机器上。Tigase服务器在配对集群中配置,通过负载均衡管理的主要和次要节点。所有的连接在一个时间点都被指定到主节点。如果服务查询主服务器失败,负载平衡器将立即开始重新引导用户流量到辅助服务器。
这里有18个成对的集群,每个都在任何时间处理4000到8000个连接。除了套接字(socket)连接传输XMPP流量,Tigase还包括一个通过HTTP连接支持BOSH的服务。
BOSH是我们允许web浏览器浏览Zoosk.com和我们的Facebook应用程序保持一个持久连接到Tigase的协议。我们的桌面应用程序和移动应用程序使用标准的TCP/IP套接字连接。
Tigase服务器通过Tigase和客户端应用程序(web浏览器、移动设备、桌面应用程序)之间的持续连接来实时跟踪用户在线状态。许多核心Zoosk的产品功能,包括搜索结果,概要视图和消息传递,需要确保这种状态是近实时得反映在所有客户端应用程序中。为了保持这种状态的Zoosk基础设施的其余部分相一致,用户在用户数据库中的记录被更新,以反映其当前的在线状态,包括其最新的联机转换的时间戳记。
用户的在线状态也存储在我们的搜索基础设施的缓存上,从而使搜索结果可以将在线状态考虑在内。Zoosk搜索功能由一个SOLR服务器层驱动。我们已经扩展每个SOLR服务器,包括ehcache实例来存储那些目前在线的用户。这个缓存的在线状态通过一个称为在线状态管理器(OSM)的专用的Tigase实例来实时更新。
OSM从主要的Tigase聊天服务器接收自定义的显示用户在线状态的XMPP数据包,然后让一个网络调用来更新ehcache实例的每一个SOLR服务器。在高峰期,大约一分钟内有8000个这样的在线状态转换。保持这种高速缓存以外的SOLR索引允许用户的状态进行实时更新,独立于主站到从站的周期性索引复制快照。用户在线状态将在查询时与查询结果结合起来,过滤还是采纳基于用户当前是否在线。搜索算法更喜欢在线用户,因为这鼓励的实时通信,并为其他用户提供更丰富的体验。
用户交互与核心RTC功能以外的Zoosk服务,也可以触发生成一个实时通知给一个连接用户的业务逻辑。例如,如果其他用户查看我们的个人资料,或接受我们发送的好友请求,我们希望能立即知道该行为。基于PHP的web应用程序将触发异步工作,打开一个网络连接到一个Tigase服务器,并将 XMPP 数据包传递给服务器,通知提供数据的自定义消息负载。该数据包被Tigase处理后,传送到当前连接用户的客户端应用程序。
用户的客户端应用程序处理这个自定义数据包,并给用户显示相应的“提醒”或更新一个“标签”。如果在用户离线时,Tigase将存储数据包,直到用户重新上线。此时,它会将自定义数据包传递到用户的客户端应用程序。
监控和测试
Zoosk的技术运营团队已经建立了许多方法来测试和监控RTC基础设施的运营状况,以确保其响应速度和可用性。这些测试主要从Tigase服务器收集涉及各种机制的性能数据,或模拟真实用户的互动。如果一个特定的健康检查失败或性能数据超出既定的临界值,我们的Nagios安装将发出一个警告。
- Tigase监控—这是一个cron上每10分钟运行一次的脚本。它登录到所有主要的聊天服务器,测试连接和传输。它记录这些测试的结果,并发送更新到Nagios以确定是否发布警报。
- Tigase性能指标—这些指标涵盖了各种内部的Tigase措施,包括次执行关键功能、消息计数,队列大小和内存消耗等。这些值每2分钟通过XMPP管理界面特设stats命令收集。这些指标然后被传递到Ganglia进行绘图。
- 商业智能报告—每隔一小时,都有一个脚本到各个主要的Tigase服务器检查活动连接数和信息数量。这个数据被加载到一个数据库。一个定制的Excel报告可以连接到这个数据源,并提供一个概括的数据视图和易于比较的历史趋势。
- Tigase测试套件—这是一个无人控制的XMPP客户,其登录到每个Tigase服务器并模拟真实的交互。Tigase测试套件将记录功能测试的结果。
下一步是什么
展望未来,我们将继续积极探索新的方法来让Zoosk成员充分利用实时体验。我们本月将推出RTC支持我们的移动web应用程序。其他设备或媒介,将让Zoosk应用程序同样被实时连接。随着我们的成员连接到Zoosk应用程序的时间正在快速增加,我们计划提高我们RTC的基础功能,便于成员之间更容易互相发现和交流。
本文来自:High Scalability
转详解Zoosk千万用户实时通信背后的开源技术的更多相关文章
- IPv6技术详解:基本概念、应用现状、技术实践(下篇)
本文来自微信技术架构部的原创技术分享. 1.前言 在上篇<IPv6技术详解:基本概念.应用现状.技术实践(上篇)>,我们讲解了IPV6的基本概念. 本篇将继续从以下方面展开对IPV6的讲解 ...
- IPv6技术详解:基本概念、应用现状、技术实践(上篇)
本文来自微信技术架构部的原创技术分享. 1.前言 普及IPV6喊了多少年了,连苹果的APP上架App Store也早已强制IPV6的支持,然并卵,因为历史遗留问题,即使在IPV4地址如果饥荒的情况下, ...
- AspNetCore.Identity详解2——注册用户
上一篇:AspNetCore.Identity详解1——入门使用 打开数据库,可以看到使用EF自动生成的表结构如下: 重点关注AspNetUsers表,打开数据库里的表可以知道目前也只用到了这张表.然 ...
- CEPH-2:rbd功能详解及普通用户应用ceph集群
ceph集群rbd使用详解 一个完整的ceph集群,可以提供块存储.文件系统和对象存储. 本节主要介绍rbd存储功能如何灵活的使用,集群背景: $ ceph -s cluster: id: 53717 ...
- MySQL系列详解六:MySQL主从复制/半同步演示-技术流ken
前言 随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求.此时数据库集群就很好的解决了这个问题了.采用MySQL分布式集群,能够搭建一个高并发.负载均衡的集群服务器.在 ...
- 详解MySQL的用户密码过期功能
这篇文章主要为大家详细介绍了MySQL的用户密码过期功能的相关资料,需要的朋友可以参考下 Payment Card Industry,即支付卡行业,PCI行业表示借记卡.信用卡.预付卡.电子钱包. ...
- 详解Oracle创建用户权限全过程
本文将介绍的是通过创建一张表,进而实现Oracle创建用户权限的过程.以下这些代码主要也就是为实现Oracle创建用户权限而编写,希望能对大家有所帮助. 注意:每条语语分开执行,结尾必须用分号; // ...
- 详解管理root用户权限的sudo服务程序
在你想要使用超级权限临时运行一条命令时,sudo 命令非常方便,但是当它不能如你期望的工作时,你也会遇到一些麻烦.比如说你想在某些日志文件结尾添加一些重要的信息,你可能会尝试这样做: $ echo & ...
- Pma模块详解,对用户登录linux等进行限制,密码修改限制等
PAM详细介绍 2014-04-02 09:26:41 标签:PAM 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lidefu ...
随机推荐
- 卸载 PrestaShop 1.7
PrestaShop 的卸载非常简单: 在你的 Web 服务器上删除所有 PrestaShop 的文件和目录.你可以使用 FTP 客户端,你也可以使用 SSH 工具. 使用数据库工具删除数据库中所有以 ...
- Ivan and Burgers CodeForces - 1100F (线性基)
大意: 给定n元素序列, m个询问$(l,r)$, 求$[l,r]$中选出任意数异或后的最大值 线性基沙茶题, 直接线段树暴力维护两个log还是能过的 #include <iostream> ...
- JavaScript学习总结(四)——逻辑OR运算符详解
在JavaScript中,逻辑OR运算符用||表示 1 var bTrue = true; 2 var bFalse = false; 3 var bResult = bTrue || bFalse; ...
- maven相关资源
http://mvnrepository.com/search?q= http://maven.aliyun.com/nexus/#welcome https://www.w3cschool.cn/m ...
- win32com问题
py -3 -m pip install adodbapi win32com.__gen_path__, "dicts.dat" 问题解决 pip install xl ...
- 解密微信sqlite数据库
最近在研究解密微信APP的数据库, 1.通过Android手机内置备份功能,可以获取到微信的数据库文件,再通过adb传到电脑上. 2.获取微信EnMicroMsg.db库的密码(通过IMEI和uin值 ...
- Hash索引和BTree索引
索引是帮助mysql获取数据的数据结构.最常见的索引是Btree索引和Hash索引. 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引:而Mermory默认的索引是 ...
- bzoj1082
题解: 暴搜+二分+剪枝 二分答案,暴力判断是否有解 然后加上剪枝 代码: #include<bits/stdc++.h> using namespace std; ; int rest, ...
- windows 环境下python 安装 pypcap 并用pyinstaller打包到exe,解决DLL 加载失败。
安装 PYQT5 pypcap 环境: windows10_x64 python3.6.3 pycharm2017.2.4 备注: 需要安装 Visual C++ Build Tools 2015 可 ...
- 玩转X-CTR100 l STM32F4 l U-Blox NEO-6M GPS卫星定位-nmealib解码库移植解码
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 扩展GPS ...