微信、陌陌等著名IM软件设计架构详解(转)
对微信、陌陌等进行了分析,发出来分享一下(时间有些久了)
JSON相信大家都知道是什么东西,如果不知道,那可就真的OUT了,GOOGLE一下去。这里就不介绍啥的了。
Protobuffer大家估计就很少听说了,但如果说到是GOOGLE搞的,相信大家都会有兴趣去试一下,毕竟GOOGLE出口,多属精品。
Protobuffer是一个类似JSON的一个传输协议,其实也不能说是协议,只是一个数据传输的东西罢了。
那它跟JSON有什么区别呢?
跨语言,这是它的一个优点。它自带了一个编译器,protoc,只需要用它进行编译,可以编译成JAVA、python、C++代码,暂时只有这三个,其他就暂时不要想了,然后就可以直接使用,不需要再写任何其他代码。连解析的那些都已经自带有的。JSON当然也是跨语言的,但这个跨语言是建立在编写代码的基础上。
逻辑层(参见通讯服务器组成):用户会话验证即登陆、消息存取、异步队列
采用私有通讯协议,目标:高效,弱网络快速收发;可靠:不会丢消息;易于扩展;参考协议格式:REDIS协议;参见协议格式、基于队列的消息协议、基于队列的交互、基于版本号的消息协议、基于版本号的交互等;
核心的长连接只用于传输轻量的实时数据,图片、语音等都开新的TCP或HTTP连接;
一切就绪后,最重要的就是监控,写一个APP查看所有的运营状态,每天观察;
如何选择最优路线,即智能路由;
二、智能路由、连接策略:
多端口、双协议支持
应对移动网关代理的端口限制
支持TCP、HTTP两种协议
根据备选IP列表进行并发测速(IP+端口+协议)
后端根据终端连接情况,定时更新终端的备选IP列表
终端在连接空闲时上报测速数据,便于后端决策
TCP协议不通,自动切换到http
优先使用最近可用IP
并发测速,根据终端所处的位置下发多组IP、PORT,只用IP,不用域名,手机上的DNS50%不准
负载均衡器(LVS...)的问题– 单点失效
单点性能瓶颈
负载均衡从客户端开始做起• 域名负载的问题
域名系统不可靠– 更新延迟大
转自:http://blog.csdn.net/justinjing0612/article/details/38322353
转载于:https://www.cnblogs.com/wangbin/p/9663425.html
微信、陌陌等著名IM软件设计架构详解(转)相关推荐
- 微信、陌陌等著名IM软件设计架构详解【转】
原贴http://blog.csdn.net/justinjing0612/article/details/38322353 对微信.陌陌等进行了分析,发出来分享一下(时间有些久了) 电量:对于移动设 ...
- 25页PPT带你吃透微信、陌陌等著名IM软件设计架构(值得珍藏)
源 / 网络 文 / 佚名 对微信.陌陌等进行了分析,发出来分享一下. 电量:对于移动设备最大的瓶颈就是电量了.因为用户不可能随时携带电源,充电宝.所以必须考虑到电量问题.那就要检查我们工程 ...
- UML图及软件设计原则详解
1.UML图 统一建模语言(Unified Modeling Language,UML)是用设计软件的可视化建模语言.它的特点是简单.统一.图形化.能表达软件设计中的动态与静态信息. UML从目标系统 ...
- 各种渲染软件设计理论详解
来源: 戴永池的日志 Mental Ray(简称MR) Mental Ray是早期出现的两个重量级的渲染器之一(另外一个是Renderman),为德国Mental Images公司的产品.在刚推出的 ...
- 云帮平台的设计架构详解
云帮社区版自8月31日开放免费下载以来,已经有不少小伙伴开始体验了我们的云帮产品,但真正了解云帮运行机制以及产品设计思想的朋友并不多,本篇文档从云帮的产品设计思路开始,逐步介绍云帮的技术架构以及各个特 ...
- 三层架构:软件设计架构
三层架构:软件设计架构 1. 界面层(表示层):用户看的得界面.用户可以通过界面上的组件和服务器进行交互 2. 业务逻辑层:处理业务逻辑的. 3. 数据访问层:操作数据存储文件.
- python画简单的图形的代码-Python实现画图软件功能方法详解
概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户 ...
- 手机快充芯片及其技术标准和设计原理详解
手机快充芯片及其技术标准和设计原理详解 智能手机对于宽带无线通信.图像处理等多方面的需求导致实际耗电呈指数增长.未来5G通信带宽将比4G增加10倍,4K/8K等高清视频技术逐渐应用,CPU.GPU等运 ...
- python画图代码大全-Python实现画图软件功能方法详解
概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户 ...
最新文章
- Vaughn Vernon谈当今软件开发所面临的挑战
- php绝对路径与相对路径之间关系的的深入研究
- 基于Spark的机器学习实践 (三) - 实战环境搭建
- C程序中main函数参数调用[个人学习简记]
- 分享一年定级资深前端,与你分享他的完整学习过程
- 在dotnetnuke中去掉显示姓名中的空格
- 今天心情不太开心?有点心烦
- 【资源】机器学习 周志华
- Linux电源管理(五)thermal
- postgresql的下载与安装
- Android Fragment already added 解决方式
- 毕业论文完成,感谢帮助过我的人
- MySql查询某个时间段内的数据(前一周、前三个月、前一年等)
- 阿里云服务器与腾讯云服务器的故事
- 看门狗watchdog的理解
- IBM ServerGuide 9.21
- java web租车系统_JavaWeb在线租车服务系统项目源码(福利)
- MStar平台编译环境安装
- 使用Xshell连接Ubuntu 20.4系统时提示
- 惠普打印机故障代码_惠普打印机故障排除方法
热门文章
- Bugku - linux2
- CentOS查看显卡及GPU相关信息,指定GPU、CPU运行
- CMOS图像传感器——了解炫光(Flare)
- Xilinx官网下载不同版本的Vivado
- django进入admin报错ORA-00918:column ambiguously defined
- android-17手机,覆盖7大手机品牌近4亿安卓用户“互传联盟”让分享更容易
- 产权保护之三:不可转让原则
- 透视图工具组,变形工具组
- Python进阶14_Unicode排序
- Linux中VMware虚拟机打不开,方法总结