linkedin即时通信系统的优化

author author     2022-08-10     797

关键词:

前言

LinkedIn 的即时通信系统目前单台机器可以处理数十万的持久连接,这是不断调优的结果。

最近,他们在官网博客中发布了优化过程,介绍了即时通信系统的技术选型、调优的重点。
基础技术构成

即时通信技术的基本要求就是server能够向client推送数据,需要通过持久连接实现,而不是传统的“请求-响应”模式。

对于这个需求,LinkedIn 选择了 Server-sent events (SSE)来实现。

SSE 特点是简单、兼容性好,client只需要和server建立一个普通的HTTP连接,当server中有事件发送时,就会向client推送数据流。

配合 SSE 的 EventSource 接口被所有现代浏览器支持,iOS 与 Android 中也有现成的库,所以 SSE 的兼容性不成问题,这也是 LinkedIn 没有选择 Websockets 原因。

开发语言使用 JAVA,编程模型选用 Actor模型,Akka是一个优秀的Actor库。

开发框架使用了 Play,他可以很好的集成 EventSource 与 Akka。
优化过程

    socket最大连接数限制

LinkedIn 刚开始做性能测试时,发现并发连接始终无法超过128个,这肯定是不正常的,应用服务器处理上千并发连接是很轻松的,后来发现是一个系统内核参数的限制:

net.core.somaxconn

这个参数控制的是允许积压的TCP连接数量, 当一个连接请求过来时,如果数量达到上限了,就会被拒绝掉,128是很多系统的默认值。

可以在 /etc/sysctl.conf中进行调整。

    临时端口的限制

负载均衡器每次连接到一个server节点时,都会使用一个 临时端口,当连接终止时,这个端口会再次可用。

而持久连接不会像普通HTTP连接那样终止,所以,负载均衡器的临时端口就可能被耗尽。

这一点需要在选择负载均衡器时特别注意。

    文件描述符的限制

在加大测试压力后,出现了一个异常:

java.net.SocketException: Too many files open

这说明文件描述符不够用了,在 Linux 中,一切皆文件,例如访问标准的文件、连接网络socket 等等,都需要文件描述符。

对于运行中进程的文件描述符限制,可以这样查看:

$ cat /proc/<pid>/limits

...
Max open files            30000

假设想调整到 200000,修改 /etc/security/limits.conf:

<process username>  soft nofile 200000

<process username>  hard nofile 200000

系统级的文件描述符限制的调整是在 /etc/sysctl.conf 中:

fs.file-max

小结

这里整理的是几个通用的优化点,原文中有更详细的描述,还有两点对JVM的调优,有兴趣的朋友可以看下原文,地址:

https://www.1.qixoo.com/blog/2016/10/instant-messaging-at-linkedin--scaling-to-hundreds-of-thousands-

基于xmpp的即时通信系统的建立

...据的协议。在此基础上,XMPP协议已经被用来构建大规模即时通信系统、游戏平台、协作空间及语音和视频会议系统。XMPP由几个小的构造块组成,并在此基础上扩展出了更多的构造块。XMPP中有众多系统:发布-订阅服务、多人聊... 查看详情

android性能优化之即时通讯优化

面试的时候问到了即时通讯系统,我选择的是基于xmpp进行即时通讯的框架,整个系统是基于openfire去实现的,但是怎么说呢,毕竟这个开源项目来说只是提供一个框架,其实是需要我们对他进行优化和改善的&#... 查看详情

即时通信系统openfire分析之六:路由表routingtable

  还是从会话管理说起  上一章,Session经过预创建、认证之后,才正常可用。认证时,最重要的操作,就是将Session加入到路由表,使之拥用了通信功能。  添加到至路由表的操作,是在SessionManager中操作的,如下:  Se... 查看详情

第22章多用户即时通信系统

韩顺平_循序渐进学Java零基础_第22章多用户即时通信系统(P685-P710)第22章多用户即时通信系统685.多用户通信系统演示686.项目开发流程687.多用户通信需求688.通信系统整体分析689.QQ用户登录1690.QQ用户登录2691.QQ用户登录3692.QQ用户登... 查看详情

即时通信系统openfire分析之八:集群管理

前言在第六章《路由表》中,客户端进行会话时,首先要获取对方的Session实例。获取Session实例的方法,是先查找本地路由表,若找不到,则通过路由表中的缓存数据,由定位器获取。路由表中的缓存,如下:publicRoutingTableImpl(){... 查看详情

即时通信和实时通信的区别

即时通信(im)和实时通信(声网Agora.io)都是一套网络通信系统,其本质都是对信息进行转发。其最大的不同点,是对信息传递的时间规定。二者的区别可以从以下几个方面:一、场景常见的即时通信... 查看详情

私有化即时通讯软件是什么

即时通信可以说是与我们生活最密切相关的工具,即时通信可以帮助我们与亲友沟通、文件传输、视频聊天等,企业即时通信是个人即时通信应用的延伸,可以为企业员工在网络时代,公司信息交流创造良好的条... 查看详情

企业团队专用版即时通信系统-侣信专业版发布

项目主页:http://git.oschina.net/farsunset/lvxin-pro说明:此版本目前只提供了Android客户端的安装包以及服务端的安装包war文件,使用者需要自己准备服务器环境以及数据库,然后部署war包到web容器,然后android客户端进行相关配置即可... 查看详情

私有化即时通讯软件

私有化即时通信是通过私有化部署将服务器端部署到企业自有服务器中。所有信息数据都由公司自有服务器数据加密和存储,以确保公司内部信息的安全。 IM对于政府和企业组织来说,即时通信不仅是一种沟通方式,... 查看详情

im即时通讯私有化部署的好处

IM即时通信不仅为信息传输带来了方便的条件,而且通过这种方便的信息传输技术,进一步优化和重建当前的结构和方式,开发和集成新的功能,可以帮助个人和企业更好地完成信息沟通,进一步改变工作模式... 查看详情

im即时通讯软件开发网络请求成功率的优化

...、体验好的具备网络通信能力的移动端应用(尤其是即时通讯这类网络质量高度敏感的应用)有很大的挑战性。 我们平时看到的移动网络主要有如下三个典型特点:   1)移动状态网络信号不稳定,高时延... 查看详情

通信系统物理层的端到端优化方法

传统的通信系统大体上分为信号调制、信道传输、信号解调。各部分独立优化,如对于信号调制模块,通常依据通信场景,选择最优的信号调制编码方式。但是各部分分别最有不一定能够获得全局的最优结果,现有学者提出将通... 查看详情

详解c#网络编程系列:实现类似qq的即时通信程序

...专题介绍的知识来实现一个类似QQ的聊天程序。 一、即时通信系统在我们的生活中经常使用 查看详情

客户端版socket,完成消息广播,详解websocket即时通信,点名系统(代码片段)

客户端版socket与服务器通信,建立长连接:分别建立server.jsconstnet=require("net");/*引入net*/varserver=newnet.createServer();/*创建服务器*/init();functioninit()/*侦听连接,当连接以后运行connectHandler*/se 查看详情

即时通讯开发移动端网络短连接的优化手段

众所周之,通常我们开发一个移动端应用,会直接调用系统提供的网络请求接口去服务端请求数据,再针对返回的数据进行一些处理,或者使用iOS中的开源AFNetworking/OKHttp这样的网络库(Android中可以用HttpURLConne... 查看详情

openmpi 中的即时通信与同步通信

】openmpi中的即时通信与同步通信【英文标题】:Immidiatevssynchronouscommunicationinopenmpi【发布时间】:2015-01-0823:19:15【问题描述】:我对阻塞和非阻塞操作(在OpenMPI中)上下文中的同步-异步的概念有些混淆:link1:MPI_Isend不一定是... 查看详情

isp国内分类

...中国ISP主要有以下几类1.搜索引擎ISP如百度,Google等。2.即时通信ISP即时通信ISP主要提供基于互联网和基于移动互联网的即时通信业务。由于即时通信的ISP自己掌握用户资源,因此在即时通信的业务价值链中,即时通信ISP能起到... 查看详情

post调用wcf方法-项目实践

做即时通信项目时,需要与OA系统对接接口,主要目标是实现在OA里进行一项事项,通过调用我们的接口,即时通知过来,并弹出消息框提示一下。我们的即时通信使用的WCF服务进行通信,在客户端调用通信时,用的就是直接添... 查看详情