《环信支持千万并发即使通讯的技术要点》阅读摘要
2016-02-02 16:54
239 查看
一。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: 若有侵权,请及时告知。
相关文章推荐
- 用Zoho People实时收到HR消息和动态提醒
- Python开发环境配置:Eclipse+PyDev
- 博客美化
- iOS每日一记-------屏幕截屏的妙用
- 友盟分享遇到Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.entity.mime.Mu
- 关于Context []startup failed due to previous errors
- 有效地分析Android内存--MAT工具解析
- Json二进制数据
- REST和SOAP
- [杂记]某高中对口高考培训班授课有感
- 浅析一下androidstudido2.0官方模拟器
- 将文本内容解析成json格式
- 五. Redis持久化
- Git gitk 中文乱码问题解决方法
- 土地面积计算单位及其换算单位-亩分厘
- BZOJ 2002 Hnoi2010 弹飞绵羊 分块
- HDU 3863 No Gambling
- 五. Redis持久化
- 基于oracle数据库的CLOUD备份恢复测试
- Android系统架构的详细解析(总结)