zoukankan      html  css  js  c++  java
  • 《环信支持千万并发即使通讯的技术要点》阅读摘要

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

    一。IM协议和IM Server

    870671719

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

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

    SIP,接触少。

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

    881148668

    正确拼写是WhatsApp,呵呵。

    881243517

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

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

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

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

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

    881482479

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

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

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


    868742751

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

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

    868780347

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

    868832358

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

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

    难得的是,分享了:

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

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

    绝对经验的总结,赞!

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

    868936208

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

    三。百万级架构经验分享

    868995894

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

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

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

    869119306

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

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

    869214857

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

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

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

    四。小结

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

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

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

  • 相关阅读:
    文件修改的两种方式
    人工智能 01. 语音合成,语音识别,相似度,图灵机器人,智能对话
    flask --- 04 . 偏函数, 线程安全,栈堆,
    flask --- 03 .特殊装饰器, CBV , redis ,三方组件
    flask --- 02. 路由, 初始化配置,蓝图
    linux --- 10.常见命令
    flask --- 01 .初始
    linux --- 9. docker 容器 和 rabbitmq 队列
    linux --- 8. mysql数据库,redis 数据库
    linux --- 7. 路飞学城部署
  • 原文地址:https://www.cnblogs.com/ljl_falcon/p/4152878.html
Copyright © 2011-2022 走看看