微信、陌陌等著名IM软件设计架构详解
旺道跨圈推广 -> 最新发布


作者:jinglijun

来自:https://blog.csdn.net/justinjing0612/article/details/38322353

 

对微信、陌陌等进行了分析,发出来分享一下(时间有些久了)。


电量:对于移动设备最大的瓶颈就是电量了。因为用户不可能随时携带电源,充电宝。所以必须考虑到电量问题。那就要检查我们工程是不是有后台运行,心跳包发送时间是不是合理。


流量:对于好多国内大部分屌丝用户来说可能还是包月30M,那么我们必须站在广大用户角度来考虑问题了。一个包可以解决的就一个包。




网络:这个也是IM最核心的内容了,我们要做到在任何网络下等顺畅聊天那就不容易了,好多公司都用的 xmpp 框架,如果在强网络环境下,xmpp 完全没有问题。但是那种弱网络环境下xmpp就束手无策啦,用户体验就很垃圾了。

个人觉得 xmpp 可以玩玩(参考看这个RFC3920RFC3921), 但是用来做真正的产品就差远了。如果遇到一个做IM的朋友张口闭口都说 xmpp 的话,那么不用沟通了,肯定不是什么好产品。微信QQ以前也曾用过 xmpp,但是最后也放弃了xmpp,就知道 xmpp 有很多弊端了,还有就是报文太大,好臃肿,浪费流量。为了保证稳定,微信用了长链接和短链接相结合,例如:


1 两个域名

微信划分了 http 模式short链接)和 tcp 模式long 链接),分别应对状态协议和数据传输协议。

short.weixin.qq.com  dns check  (112.64.237.186 112.64.200.240)
long.weixin.qq.com   dns check  (112.64.237.188 112.64.200.218)


2、 说明

2.1 short.weixin.qq.com  

 HTTP协议扩展,运行8080 端口http body为二进制(protobuf)。

 主要用途(接口)

 

2.2  long.weixin.qq.com  

tcp 长连接, 端口为8080,类似微软activesync的二进制协议。

 主要用途(接口):

 

所有上面请求都是基于tcp长连接。在发送图片和视频文件等时,分为两个请求;第一个请求是缩略图的方式,第二个请求是全数据的方式。

 

2.2.1 数据报文方面

 

图片上传:

 

下载:


附录

3.1  用户登录验证


POST /cgi-bin/micromsg-bin/auth HTTP/1.1
Accept: **
User-Agent: Mozilla/4.0
Content-Type: application/x-www-form-urlencoded
Host: short.weixin.qq.com
Content-Length: 174


 

3.3 消息sync (newsync)


POST /cgi-bin/micromsg-bin/newsync HTTP/1.1
Host: short.weixin.qq.com
User-Agent: Android QQMail HTTP Client
Cache-Control: no-cache
ConnectionKeep-Alive
Content-Type: application/octet-stream
accept: **
Content-Length:  206


 

3.5 用户注销


POST /cgi-bin/micromsg-bin/iphoneunreg HTTP/1.1
Accept: */*
User-Agent: Mozilla/4.0
Cotent-Type: application/x-www-form-urlencoded
Host: short.weixin.qq.com
Content-Length: 271


 

3.6 行为日志上报


POST /cgi-bin/stackreport?version=240000a7&filelength=1258&sum=7eda777ee26a76a5c93b233eed504c7d&reporttype=1&username=jolestar HTTP/1.1
Content-Length: 736
Content-Type: binary/octet-stream
Host: weixin.qq.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)


从现在互联网的发展而言,IM 视频(包括IM里面视频通话)是一个方向,这些都应该成为互联网的基础设施,就像浏览器一样。现在IM还没有一个很好的解决方案,XMPP 并不能很好地做到业务逻辑独立开来。从IM的本质来看,IM其实就是将一条消息从一个地方传输到另外一个地方,这个和TCP很像,为什么不实现一个高级点的TCP协议了,只是将TCP/IP里面的IP地址换成了一个类似XMPP的唯一ID而已,其他的很多细节都可以照搬TCP协议。有了这个协议之后,将业务逻辑在现有HTTP server的基础上做,例如发送语音和图片就相当于上传一个文件,服务器在处理完这个文件后就发一条特殊的IM消息。客户端收到这个IM消息后,按照IM消息里面 url 去 HTTP server 取语音文件和图片文件。将 HTTP server  IM server 打通之后,可以做很多事情。但将这个两个server合并在一块并不是一个好事,不然腾讯也不会有2005年的战略转型了。从现在的情况来看,应用除了游戏,都没怎么赚钱,现在能够承载赚钱业务的还是以web为主。IM 不可以赚钱,但没有却是不行的,就像一个地方要致富,不修路是不行的道理一样。


协议:

除了上面介绍的XMPP,还有json和Protobuf。



那它跟JSON有什么区别呢?

跨语言,这是它的一个优点。它自带了一个编译器,protoc,只需要用它进行编译,可以编译成JAVA、python、C++代码,暂时只有这三个,其他就暂时不要想了,然后就可以直接使用,不需要再写任何其他代码。连解析的那些都已经自带有的。JSON当然也是跨语言的,但这个跨语言是建立在编写代码的基础上。

 

陌陌设计


陌陌发展刚开始由于规模小,30-40W的连接数(包括Android后台长连接用户),也使用XMPP;由于XMPP的缺点:流量大(基于XML),不可靠(为传统固定网络设计,没有考虑 WIFI/2G/3G/地铁/电梯等复杂网络场景),交互复杂(登陆需5-6次,尤其是TLS握手);XMPP丢消息的根本原因:服务端和客户端处于“半关闭”状态,客户端假连接状态,服务端有收不到回执;Server端连接层和逻辑层代码没有解耦分离,常常重启导致不可用。



 

消息中转:



 

连接层:



逻辑层:



通讯协议设计:


协议设计要求:




XMPP/SIP协议




Redis协议:

 

 






 


优化

              一切就绪后,最重要的就是监控,写一个APP查看所有的运营状态,每天观察。


二、智能路由、连接策略

 

WNSwireless network services


解决移动互联网开发常见问题:

通道:数据交互、大数据上传、push

网络连接:大量长链接管理、链接不上、慢、多地分布

运营支撑:海量监控、简化问题定位

登录&安全:登录鉴权、频率控制

 


 

移动互联网特点:

1、高延时:  信道建立耗时(高RTT

2、低宽带、高丢包

3、多运营商(电信,移动,联通等)

4、复杂网络  

   2G3G4Gwificmwapcmnet。。

   -网关限制:协议,端口

5、用户流动性大,上网环境复杂

 

WNS 性能指标:





1、开发时间:历史一年半

2、链接成功率-99.9%

3、极端网络环境下成功率-由于常见app

4crash率-0.02%crash次数/登录用户数)

 

微信后台系统架构

背景:

A、分布式问题收敛

后台逻辑模块专注逻辑,快速开发

可能读取到过时的数据是个痛点

需要看到一致的数据

B、内部定义

数据拥有两个以上的副本

如果成功提交了变更,那么不会再返回旧数据

推演:

增加一个数据

2 序列号发生器,偏序

 约束:只能有一个client操作

client有解决冲突的能力

问题转移:client如何分布?

3 修改集群中一个制定的keyvalue

1)覆盖他

2)根据value的内容做修改

if value  1 then value :=

通用解法:

1paxos算法

 工程难度

一切可控

 

分布式算法设计:

 2quorum算法(2011

再单个key上面运算

真是系统约束

paxos方案,简化

为每次变更选举(by key

算法过程

 提议/变更/同步/广播

 

系统架构



 

写流程




 

Replication& Sharding 

 权衡点

 自治,负载均衡,扩散控制

 replication>relation

 

容灾抵消

同城(上海)多数派存活

三园区(独立供电,独立)

 

 

Sharding

 

一组KV6 为一个单位

 

1、人工阶段

 局部扩容,影响收敛9

2均匀分布制定分段hash32 string

 翻倍扩容

 

3一致性哈希

具体实现?

1、业务侧快速开发

 存储需要提供强一致性

丰富的数据模型支持(结构化、类SQLKV

条件读,条件写

 

2 业务增长迅速,系统要能够方便的横向扩容

3设备故障/短时节点实效便成为常态,容灾自动化,主碑可写无需人工介入

4小数据

 

 

存储模型

 纯内存

Bitcask

小表系统

LSMtree



 

小表系统

1、解决放大问题

2、数据按变更聚集存储

3Affected1

  ChangeTable

12+。。。。+n1+total)/n

4、分裂与合并

数据流动

1、自动化迁移

2、节点同时做代理

3、合并磁盘io

 

同步流量

1、数据vs 操作

2、幂等

3、保底策略

 

通信包量

 1、动态合并

   100K qps

   200% 10%

3、权衡与估算

设计要点

1、吞吐量

2、异步化

3、复杂度

4libco

自动修复系统

1、不要让错误累计

2、全量扫描

bitcask的一些变化

1、内存限制

2、全内存



教育培训机构-如何策划节日招生?
做教育培训,最重要的事情莫过于招生了。面对不同的学员,招生方…于招生。目标不同,活动策划也会不一样。② 活动主题要鲜明不仅主题要鲜明,主题之间要有连续性。就像看连续剧一样,一集接一集,一环扣一环。策划好一系列活动,一个接一个来,从多个角度延续活动的宣传,突出主题,引起关注度。常用的招生方式有:体验课招…-------------想要获得更多运营技巧、doc文案,
教育培训:如何提高满班率和续班率
什么是满班率?就是实际人数除以计划招生人数,这个值就是满班率…员有流失是正常的,但要保证一个概率。在保障老学员续期的基础上,我们也要大胆创新,开设网络课程,拓宽招生区域。实地课程录制后,进一步发行到商弈云课上,通过商弈云课系统转成真实流量,网上有人点击观看,点赞,可以按点播量分佣金。助你在日常的营销推…-----------------------想要获得更多运
培训机构难盈利的问题出在哪里,如何实现盈利?
竞争白热化实地培训班、托管辅导班竞争白热化了,利润越来越稀薄…现没有多少盈利。还有一部分负责人在刚招生时,掌握了不少资金,开始盲目扩张,盲目做课程推广,以期待获得更多生源和收费,从而使培训班陷入了这种恶性循环的陷阱里。其实这些到手的钱,并不是你的利润,而是你未来要支出的钱。如遇到行业快速发展时期,或者…-----想要获得更多运营技巧、doc文件,请“关注”并“转
“差异化”经营是网络培训赚钱的关键所在
“差异化经营”这个词,相信大多数人都耳熟能详,但要做到的却是…。在现有的基础上更新升级或者资源整合就是对现有的产品或者技术,进行升级版本,或者通过一些资源整合,成一个项目。你的技能以前是用来生产或制造产品,现在是把技能升级成知识培训,转换云课堂。直白一点就是可以让老师自行录好课程并上传到学校的商弈云课…在着缺点和不足之处。在创新改革时,要从功能、服务、价格等方面
教育培训行业是如何运作的?
以前读书时,学校附近有个小摊卖鸡蛋灌饼。刚开始的时候只有一家….%,剩下的一对一和多人大班其实市场份额都很小。家长报培训班,是希望孩子能够学到知识。老师通过课上教学和课后辅导来满足孩子的需求,达到成绩提高的目标。我见过上百人的大培训班,为什么一个班这么多人?因为是名师讲课,但人太多坐后面,基本听不到重…是你的核心竞争力。想要得到用户的认同,你就必须做到产品质量好
旺道:实体店怎么做网络营销?
年纪大了,体力不好了,便赚不了什么钱了。所以,一定要在年轻的…写文案都是非常头痛的事情,那么下面我会给大家提供一个解决方案。在互联网营销系统里面有很多细节营销,软文营销就是其中一种,但好多小白头痛写文章,所以可以用这个方法也一样可以植入广告语,或者是图片广告,轮显切换广告,使用 旺道营销系统,也就是每…以帮你吸引海量精准粉丝。有了粉丝,你通过广告、产品、服务就可
旺道:圈里圈外,铁饭碗距离瓷饭碗究竟有多远?
中国人爱混圈子,从线下一直混到线上,各种奇形怪状的圈子勾勒出…不能推则敷衍了事,盼着混到主任科员退休;一种是老黄牛式,踏踏实实、兢兢业业工作,但拙于人际关系,活干得最多,但依旧不见晋升迹象;还有一种是提线木偶式,你扯一下线他动一下,好像脑子和身体是分离的。我突然一拍脑袋,这是提前衰老的迹象啊,工作内容…即使选择留在铁饭碗圈里,也应保有随时离开的思想警惕和进行必要
旺道:微信要双开了,朋友圈推广更好做了
现在手机只能登一个微信,如两个,三个微信的小伙伴们就只能退出…动推广工具、 设置头像点击头像图标,点“+”选择图片,可以上传你的企业,个人头像,产品服务等。旺道微信朋友圈广告免费朋友圈广告-旺道、 设置推广主题点“广告”,再点“+”设置推广的主题(类别),填好中文主题,以及你的网址。教你不花一分钱做朋…简直就是一劳永逸哟。如果你点开发布的文章看不到广告,那就是你
旺道:如何能让网站多个关键词排名百度首页?
最近接了一个单,做婴儿游泳馆加盟的。优化推广范围是全国,但是…泳馆加盟哪家好”、“婴儿游泳加盟多少钱”这类与我息息相关的词。如何能让网站多个关键词排名百度首页?但客户并不认同,客户说这个词指数低,或者说搜的人不多。是,这是一方面原因。但是,指数低有什么关系,你是卖产品还是卖指数。搜的人不多有什么关系,…实现广告效果最大化,来满足大众化的广告需求。对于这样的四两拔
旺道:如何成为网络营销达人?这个技能帮你节省80%的时间
在某次名师讲坛上,听到了一个让人警醒的故事。说有个村子缺水,…准的产品。现在已经不是新鲜事物,好多企业因为百度竞价的高额费用,头疼不已,所以做网站关键词优化排名,成为了企业必选的推广项目。做优化也要做到有成效,不然就是一分钱也是昂贵的。用 旺道智能机器人 就可以持续代替人工去做,它非常聪明,只要你够耐…手,设备先进,你多努力奔跑也于事无补。简单说,要去一个地方,

此文章来源来互联网,如果你有任何版权冲突,可以联络我们,微信号:WANCOME,QQ:1444641。加我们时,请说明来意,我们将优先处理你的问题。




旺道商弈  | 圈广告  | 一键推  | 圈推广  | 圈营销  | 圈推广  | 跨圈推
粤ICP备10213132号
旺道商标注册证号:8608864
Copyright © 2016 环企网络信息科技有限公司 版权所有