导语:本文由Zoosk(一个具备5000万会员的浪漫的社交约会网站)工程副总裁Peter Offringa所写,讲述了Zoosk的实时通讯技术。html
当咱们的会员从Zoosk得到的最有价值的消息时,他们能够实时进行交互。毕竟,每一个用户其链接的另外一端均可能在将来产生关系。这种状况的兴奋和丰富才能充分实现实时。该套件的Zoosk服务促进这些交互通常被描述为实时通讯(RTC)。这些通讯交付使用XMPP协议,其余流行的即时通讯产品也使用该协议。Zoosk的会员在三个不一样的相互做用中体验实时通讯:ios
这些通讯目前经过全部主要的Zoosk产品向用户提供。web
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安装将发出一个警告。
下一步是什么
展望将来,咱们将继续积极探索新的方法来让Zoosk成员充分利用实时体验。咱们本月将推出RTC支持咱们的移动web应用程序。其余设备或媒介,将让Zoosk应用程序一样被实时链接。随着咱们的成员链接到Zoosk应用程序的时间正在快速增长,咱们计划提升咱们RTC的基础功能,便于成员之间更容易互相发现和交流。
本文来自:High Scalability