《环信支持千万并发即使通讯的技术要点》阅读摘要

一天早上起来,偶然机会看到《环信支持千万并发即使通讯的技术要点》演示文档,简单翻阅之后,感觉干货很多,于是快速记下以下笔记。

一。IM协议和IM Server

XMPP确实很传统,WhatsApp选用了,同时经过压缩、精简(比如说user字符串使用u字符替代)处理,让XMPP轻量不少。

MQTT,如何实现群组、好友呢,这个是业务层面上事情,大家都订阅某一个主题Topic好了,属于业务拓展。

SIP,接触少。

微信私有协议ActivitySync,以前在博客上分享过。

正确拼写是WhatsApp,呵呵。

针对XMPP协议的改进,很有参考价值。

心跳单向四个字节,在XMPP协议下,估计应该是极限了吧。在私有协议协议下,一来一往两个字节足够。

文件传输方式,这是业界通用方式。

移动互联网环境下,用户永远在线,大家的共识。可是取决于手机有没有连接到服务器端,这是无法逾越的障碍。

Muc聊天室,业务层面改进。

这个针对使用OpenFire的同学,很有参考意义。

话说,我以前也安装过OpenFire,定制过在线聊天/咨询的代码。

二。移动网络环境下的网络、电量等客户端优化

IM或推送,建立长连接是必须的,可以节省TCP来回创建的开销,但断线之后,是否需要即刻重连,尤其是处于地铁、WIFI边缘地带,可能会造成重连风暴,需要添加稍加延迟连接机制。

针对发送的消息的回执,客户端一定要发送回执反馈,否则不知道是否发送成功与否。

流量跑马测速,心跳智能,压缩传输。

Android手机端优化措施,干货、细节很实用,可以直接拿来用,分享很给力,呵呵!

批量、合并数据请求/发送,增量更新,这是一个大家都应该使用的常规节省流量手段,应牢记!

难得的是,分享了:

2G 文件上传最佳buffer size 1024个字节,3G/4G下直接设置为10K

2G 文件下载最佳buffer size 2048个字节,3G/4G下 30K

绝对经验的总结,赞!

心很细,给出了频繁的属性访问直接声明protected/publish了,不创建新的Java对象只能static类型了。记得很久以前写J2ME程序时,就用过这样的方式。

实践中走过多少弯路才总结出来的同步、绘图、渲染页面惊艳,尤其是支持离线方式的数据同步机制,很受用。

三。百万级架构经验分享

虽然很简单,熟悉TCP/IP协议,这是毫无疑问。

无状态协议交互,才能够很容易水平横向扩展,也是当今共识。

让所有操作都要尽可能的异步

典型的按照机房进行完整部署,若不能够在DNS层面做到按照用户ID进行指派(HTTP DNS进行接入IP分配),那么就必须处理用户乱入机房的问题,必然要做到一些数据的跨机房的同步,大家都会采用增量式同步方式,跨机房一般常见30毫秒的延迟,批量形式增量同步,那都不叫事。

可以看到业务垂直切分,各个业务之间水平扩展。

貌似可以看到单元化CELL/SET架构的影子,但这只是自己的瞎猜而已。

PPT上架构图文字细节不甚清晰,再加上自己近视,分辨不太老好的,可以看到消息存储使用了Kafka(和数据库集群之间存定时拉取关系),分布式锁基于Zookeeper,前端LVS做负载均衡,业务非常垂直。

在PPT上只看到了两个机房,若用户量级上亿,可能需要扩展到第三个、第三机房,可能跨机房同步的压力就就凸显出来了。

四。小结

总之,干货不少,很给力,再次对刘少壮大牛表示感谢!

原PPT下载地址:http://vdisk.weibo.com/s/A0GI9rXObFMd

PS: 若有侵权,请及时告知。

时间: 2024-11-07 20:28:15

《环信支持千万并发即使通讯的技术要点》阅读摘要的相关文章

环信开源计划开启即时通讯云开源平台时代

12月22日,在"首届移动社交创新价值峰会"上,环信即时通讯云(http://www.easemob.com)发布了被称为"4X100计划"的<环信开源平台计划>,此计划将推动即时通讯云行业进入开源平台时代.而一个中国IT界崭新的开放共赢的生态体系也将随之逐步建立起来. 图注:环信CEO刘俊彦在峰会上解读环信开源平台计划 "2014年,即时通讯云获得了很好的发展,环信也帮助了很多合作伙伴实现了移动社交的创新.那么2015年,如何驱动移动社交创新

环信即时通讯 —— 消息、会话

1.消息EMMessage 环信支持文字.图片.位置.语音.视频.文件.透传.自定义八种消息构造.消息,即IM交互实体,在SDK中对应的类型是 **EMMessage**,EMMessage可以由多个符合<IEMMessageBody>协议的body组成,但是 推荐使用一个body. 2.消息构造 1> 设置消息的内容 文字消息: EMChatText *msgChat = [[EMChatText alloc] initWithText:@"要发送的消息"]; 图片

环信即时通讯单聊集成,添加好友,实现单聊

前段时间由于项目需要,了解一下环信即时通讯,然后自己通过查资料写了一个基于环信的单聊demo,一下是源码,希望可以帮助到需要的小伙伴. 首先,我们要去环信官网注册账号,这个我就不多说了,注册完登录,创建应用,新建两个测试IM用户, 这里主要用到的是应用标示(Appkey) 好了,在环信官网下载对应的sdk,这个不多说了,最好下载一个文档,里面讲的很详细的. 好了,一下是源码 AppManager.java public class AppManager { private static Stac

iOS-即时通讯-环信

下载地址:http://www.easemob.com/downloads SDK目录讲解 1.从官网下载下来的包分为如下四部分: 环信iOS SDK 开发使用 环信iOS release note 更新说明 环信iOS UIDemo 工程源码 环信iOS UIDemo.ipa 打包的ipa 2.iOS SDK 中有三个子文件夹:include.lib.resource. lib(libEaseMobClientSDK.a不包含实时语音功能,libEaseMobClientSDKLite.a包含

环信即时通讯 —— IOS客户端集成

1.环信官网介绍 2.准备工作: 登录环信开发者账号并创建应用.制作并上传推送证书(开发.生产): 3.下载SDK:通过Cocoapods下载或到官网下载 ,对于Cocoapods下载: 不包含实时语音版本SDK(EaseMobClientSDKLite),引用时 #import <EaseMobSDK/EaseMob.h> pod 'EaseMobSDK', :git => 'https://github.com/easemob/sdk-ios-cocoapods.git'  包含实时

业务系统需要怎样的全局唯一ID? #Ticktick#(环信首席架构师:一乐)

ID 生成器在微博我们一直叫发号器,微博就是用这样的号来存储,而我微博里讨论的时候也都是以发号器为标签.它的主要目的确如平常大家理解的"为一个分布式系统的数据object产生一个唯一的标识",但其实在一个真实的系统里可能也可以承担更多的作用.概括起来主要有以下几点: 1. 唯一性 2. 时间相关 3. 粗略有序 4. 可反解 5. 可制造 下面我会分别讲每个作用后面的考虑和权衡,也会对比介绍一下业界已知的几种 ID 设计. 1. 要唯一性,是否需要全局唯一? 说起全局唯一,通常大家都会

iOS集成环信推送,最详细流程(证书创建、环信集成)

这篇博客是我从我的CSDN上办过来的,排版有些混论,不知道为什么博客园不支持MarkDown编辑,想看原文排版的话传送门在这里http://blog.csdn.net/mumubumaopao/article/details/53423393 这几天项目里又用到了环信的推送,虽然之前做过,但是很久不做还是有很多细节没有注意到,所以还是决定从头开始做一遍,把每一个环节都详细记录下来,同样的把每一个坑也记录下来.方便自己以后做的时候忘记哪个流程了可以在看一遍.我很能理解那种遇到问题网上百度一堆类同的

iOS环信离线推送

这几天项目里又用到了友盟的推送,虽然之前做过,但是很久不做还是有很多细节没有注意到,所以还是决定从头开始做一遍,把每一个环节都详细记录下来,同样的把每一个坑也记录下来.方便自己以后做的时候忘记哪个流程了可以在看一遍.我很能理解那种遇到问题网上百度一堆类似答案但是并不好使的情况,所以我会将我在项目中遇到的问题都贴出来,希望能给大家带来些许参考和帮助,文章原创为http://www.jianshu.com/p/389ff299dc75 一.推送的原理和流程(着急做推送的可以跳过这一步) 首先给大家推

环信Android客户端集成文档

一.Android SDK简介 环信SDK为用户开发IM相关的应用提供的一套完善的开发框架. 包括以下几个部分: SDK_Core为核心的消息同步协议实现,完成与服务器之间的信息交换. SDK是基于核心协议实现的完整的IM功能,实现了不同类型消息的收发.会话管理.群组.好友.聊天室等功能. EaseUI是一组IM相关的UI控件,旨在帮助开发者快速集成环信SDK. SDK采用模块化设计,每一模块的功能相对独立和完善,用户可以根据自己的需求选择使用下面的模块: EMClient: SDK的入口,主要