当前位置:首页 > 娱乐星闻

im软件 微信、陌陌等著名IM软件设计架构详解

来源:https://blog . csdn . net/justinjing 0612/article/details/38322353

我们分析了微信、陌陌等。,并把它们发出去分享(已经很久了)。

电源:移动设备最大的瓶颈是电源。因为用户不能随时携带电源和充电宝。因此,必须考虑电源问题。需要检查我们的项目是否在后台运行,心跳包的发送时间是否合理。

流量:对于很多国内用户来说,可能还是每月30M,所以一定要从广大用户的角度考虑问题。一个包只能解决一个包。

网络:这也是IM的核心内容。对于我们来说,在任何网络下等待顺畅的聊天都不是一件容易的事情。很多公司使用xmpp框架。如果是在强大的网络环境下,xmpp完全没有问题。但是xmpp在那种弱的网络环境下什么都做不了,用户体验很垃圾。

个人觉得xmpp可以拿来玩玩(参考RFC3920和RFC3921),但远没有被当做真货使用。如果你遇到一个正在做IM的朋友,一直在说xmpp,那就不需要交流了。肯定不是好产品。微信和QQ之前都用过xmpp,但是最后放弃了xmpp,说明xmpp有很多缺点,消息太大,臃肿浪费流量。为了保证稳定性,微信采用长链接和短链接相结合的方式,例如:

1.两个域名

微信分为http模式(短链接)和tcp模式(长链接),分别处理状态协议和数据传输协议。

short . weixin . QQ . comdnscheck(112 . 64 . 237 . 186112 . 64 . 200 . 240)

long . weixin . QQ . comdnscheck(112 . 64 . 237 . 188112 . 64 . 200 . 218)

2.描述

2.1 short.weixin.qq.com

是HTTP协议的扩展,运行端口8080,http body是protobuf。

主要用途(界面):

用户登录验证;好友关系(获取,添加);消息sync (newsync),自有sync机制;获取用户图像;用户注销;行为日志上报。朋友圈发表刷新

2.2 long.weixin.qq.com

Tcp长连接,端口8080,类似于微软activesync二进制协议。

主要用途(界面):

接受/发送文本消息;接受/发送语音;接受/发送图片;接受/发送视频文件等。

以上所有请求都基于tcp长连接。发送图片和视频文件时,分为两种请求;第一个请求是缩略图,第二个请求是完整数据。

2.2.1在数据信息方面

增量上传策略:每次8k左右大小数据上传,服务器确认;在继续传输。

图像上传:

先传缩略图,传文本消息,再传具体文件

下载:

3附录

3.1用户登录认证

POST/CGI-bin/micro msg-bin/auth HTTP/1.1

接受:**

用户代理:Mozilla/4.0

内容类型:应用程序

主持人:short.weixin.qq.com

内容-长度:174

3.3消息同步(新闻同步)

POST/CGI-bin/micro msg-bin/newsync HTTP/1.1

主持人:short.weixin.qq.com

用户代理:安卓QQMail HTTP客户端

缓存控制:无缓存

连接:保持活力

内容类型:应用程序/八位字节流

接受:**

内容-长度:206

3.5用户注销

POST/CGI-bin/micro msg-bin/iphone unreg HTTP/1.1

接受:*/*

用户代理:Mozilla/4.0

内容类型:应用程序

主持人:short.weixin.qq.com

内容-长度:271

3.6行为日志报告

POST /cgi-bin/stackreport?版本= 240000a7 & ampfilelength=1258&。sum = 7ed a 777 ee 26 a 76 a5 c 93 b 233 eed 504 c7d & amp;reporttype = 1 & ampusername=jolestar HTTP/1.1

内容-长度:736

内容类型:二进制/八进制流

主持人:weixin.qq.com

连接:保持活力

用户代理:Apache-Http client/INavailable(Java 1.4)

从目前互联网的发展来看,IM和视频(包括IM中的视频通话)是同一个方向,应该成为互联网的基础设施,就像浏览器一样。目前IM没有很好的解决方案,XMPP无法独立做业务逻辑。从IM的本质来说,IM其实是把一个消息从一个地方传到另一个地方,和TCP很像。为什么不实现一个高级别的TCP协议,而是用类似XMPP的唯一ID替换TCP/IP中的IP地址,还有很多其他细节可以从TCP协议中复制。使用这个协议,业务逻辑基于现有的HTTP服务器。比如发送语音和图片相当于上传一个文件,服务器在处理完文件后发送一个特殊的IM消息。客户端收到IM消息后,会根据IM消息中的url,前往HTTP服务器获取语音文件和图片文件。连接HTTP服务器和IM服务器后,很多事情都可以做。但把这两个服务器合并在一起并不是什么好事,否则腾讯不会有2005年的战略转型。从目前的情况来看,应用除了游戏赚不了多少钱,现在能承载赚钱业务的主要还是web。IM赚不到钱,但是离不开,就像一个地方不修路就发不了财一样。

协议:

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

JSON相信大家都知道是什么东西,如果不知道,那可就真的OUT了,GOOGLE一下去。这里就不介绍啥的了。Protobuffer是一个类似JSON的一个传输协议,其实也不能说是协议,只是一个数据传输的东西罢了。

JSON和JSON有什么区别?

跨语言,这是它的优势之一。它自带编译器protocol,可以编译成JAVA,python,C++代码。暂时只有这三个代码,其他的就先不要想了,然后就可以直接用了,不用写其他任何代码。甚至那些被分析过的也已经随之而来了。JSON当然是跨语言的,但是这种跨语言是基于编码的。

莫莫设计

在Momo开发之初,由于规模较小,30-40W连接(包括安卓后台长连接用户)也使用XMPP;由于XMPP的缺点:流量大(基于XML)、不可靠(针对传统固定网络设计,没有考虑WIFI/2G/3G/地铁/电梯等复杂网络场景)、交互复杂(登录需要5-6次,尤其是TLS握手);XMPP消息丢失的根本原因:服务器和客户端处于“半封闭”状态,客户端处于虚假连接状态,服务器无法收到回执;服务器端连接层和逻辑层代码没有解耦分离,往往会因为重启导致不可用。

消息中继:

连接层:

逻辑层:

通信协议设计:

协议设计要求:

高效:弱网络快速的收发可靠:不会丢消息易于扩展协议格式:

XMPP/SIP协议

Redis协议:

优化

连接层(参见通讯服务器组成):只做消息转发,允许随时重启更新,设计原则简单/异步;单台压测试连接数70W;现状:1.5亿用户,月活5000W+,连接数1200W+;逻辑层(参见通讯服务器组成):用户会话验证即登陆、消息存取、异步队列采用私有通讯协议,目标:高效,弱网络快速收发;可靠:不会丢消息;易于扩展;参考协议格式:REDIS协议;参见协议格式、基于队列的消息协议、基于队列的交互、基于版本号的消息协议、基于版本号的交互等;核心的长连接只用于传输轻量的实时数据,图片、语音等都开新的TCP或HTTP连接;

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

如何选择最优路线,即智能路由。

二、智能路由和连接策略

多端口、双协议支持应对移动网关代理的端口限制支持TCP、HTTP两种协议根据备选IP列表进行并发测速(IP+端口+协议)后端根据终端连接情况,定时更新终端的备选IP列表终端在连接空闲时上报测速数据,便于后端决策TCP协议不通,自动切换到http优先使用最近可用IP并发测速,根据终端所处的位置下发多组IP、PORT,只用IP,不用域名手机上的DNS50%不准负载均衡器(LVS...)的问题– 单点失效单点性能瓶颈负载均衡从客户端开始做起• 域名负载的问题域名系统不可靠– 更新延迟大

WNS(无线网络服务)

1解决移动互联网发展中的常见问题:

渠道:数据交互、大数据上传、推送

网络连接:管理大量长链接,链接不可用,速度慢,分布在很多地方

运营支持:大规模监控和简化问题定位

登录&:安全性:登录身份验证和频率控制

移动互联网的特点:

1.高延迟:建立通道需要时间(高RTT)

2.低宽带高丢包

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

4.复杂网络

-2G,3G,4G,wifi .cmwap,cmnet .。

-网关限制:协议、端口

5.用户流动性高,互联网环境复杂

WNS绩效指标:

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

2.链接成功率-99.9%

3.极端网络环境下的成功率——由于普通应用

4.崩溃率-0.02%(崩溃次数/登录用户)

微信后台系统架构

背景:

一、分布式问题的收敛性

后台逻辑模块以逻辑为主,发展较快

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

需要看到一致的数据

b、内部定义

数据有两个以上的副本

如果更改成功提交,旧数据将不会返回

扣除:

1添加数据

2序列号生成器,部分序列

约束:只能有一个客户端操作

客户有能力解决冲突

问题转移:如何分发客户端?

3修改集群中某个键的值

1)掩护他

2)根据值的内容进行修改

如果值=1,则值:=2

一般解决方案:

1)paxos算法

工程难度

一切都是可控的

分布式算法设计:

2)法定算法(2011)

然后操作一个键

这是一个系统约束

类似Paxos的方案,简化

每次变更的选择(按键)

算法过程

提议/改变/同步/广播

系统结构

写过程

复制和。碎片

称重点

自主、负载平衡、扩散控制

复制->;关系

容灾偏移

同一城市(上海)的大多数人幸存了下来

三园(独立供电,独立)

碎片

一组KV6是一个单元

1.手动阶段

局部扩张,影响收敛9

2.均匀分布,制作分段hash32(字符串)

双重扩张

3一致性哈希

具体实现?

1.业务面快速发展

存储需要提供强大的一致性

丰富的数据模型支持(结构化、类似于SQL千伏)

条件阅读,条件写作

2业务增长迅速,系统应该可以方便的横向扩展

3设备故障/短期节点有效性成为常态,容灾自动化,主碑无需人工干预即可书写

4个小数据

存储模型

纯记忆

比特卡什

小桌系统

LSM树

小桌系统

1、解决放大问题

2.数据根据变化进行聚合存储

3、受影响1

ChangeTable

(1+2+。。。。+n-1+总计)/n

4.拆分和合并

数据流

1.自动迁移

2.节点同时充当代理

3.合并磁盘io

同步流量

1.数据与操作

2.幂等的

3.保证策略

通信包数量

1.动态合并

100K qps

200%-10%

3.权衡和估计

设计要点

1.吞吐量

2.非同步化

3.复杂

4、libco

自动修理系统

1.不要让错误累积

2.全扫描

比特桶的一些变化

1.存储容量极限

2.全部记忆

1.《im软件 微信、陌陌等著名IM软件设计架构详解》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《im软件 微信、陌陌等著名IM软件设计架构详解》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/1215805.html

上一篇

王昭君嫁过几个丈夫

下一篇

项羽为什么放刘邦

北京汽车指标 北京市小客车指标2019年第一期摇号数据出炉啦!

北京汽车指标 北京市小客车指标2019年第一期摇号数据出炉啦!

2月25日上午,北京小公共汽车指标办公室发布2019年首个抽奖数据。按照规定,今年5.4万辆个人新能源乘用车的指标将在此期间配置,其余获批的有效申请代码将继续按照规定等待。 经审核,截至2019年2月8日24: 00,普通乘用车指标有效代码31...

北京小客车指标 北京市小客车指标2019年第一期摇号数据出炉啦!

北京小客车指标 北京市小客车指标2019年第一期摇号数据出炉啦!

2月25日上午,北京小公共汽车指标办公室发布2019年首个抽奖数据。按照规定,今年5.4万辆个人新能源乘用车的指标将在此期间配置,其余获批的有效申请代码将继续按照规定等待。 经审核,截至2019年2月8日24: 00,普通乘用车指标有效代码31...

北京市小汽车摇号 北京市小客车指标2019年第一期摇号数据出炉啦!

北京市小汽车摇号 北京市小客车指标2019年第一期摇号数据出炉啦!

2月25日上午,北京小公共汽车指标办公室发布2019年首个抽奖数据。按照规定,今年5.4万辆个人新能源乘用车的指标将在此期间配置,其余获批的有效申请代码将继续按照规定等待。 经审核,截至2019年2月8日24: 00,普通乘用车指标有效代码31...

北京小客车 北京市小客车指标2019年第一期摇号数据出炉啦!

北京小客车 北京市小客车指标2019年第一期摇号数据出炉啦!

2月25日上午,北京小公共汽车指标办公室发布2019年首个抽奖数据。按照规定,今年5.4万辆个人新能源乘用车的指标将在此期间配置,其余获批的有效申请代码将继续按照规定等待。 经审核,截至2019年2月8日24: 00,普通乘用车指标有效代码31...

北京摇号官网 北京市小客车指标2019年第一期摇号数据出炉啦!

北京摇号官网 北京市小客车指标2019年第一期摇号数据出炉啦!

2月25日上午,北京小公共汽车指标办公室发布2019年首个抽奖数据。按照规定,今年5.4万辆个人新能源乘用车的指标将在此期间配置,其余获批的有效申请代码将继续按照规定等待。 经审核,截至2019年2月8日24: 00,普通乘用车指标有效代码31...

泗水招聘信息最新消息 2019济宁泗水企事业单位招聘信息

泗水招聘信息最新消息 2019济宁泗水企事业单位招聘信息

2019年济宁泗水县企事业单位招聘信息 招聘公告 2019年济宁泗水县国有企业公开招聘员工公告 报名时间:2019年6月10日-6月12日;上午:9:00-12:00,下午:14:00-18:00 笔试内容:公共基础知识。 面试内容:采用结构化...

德云社直播 德云社纲丝节传来坏消息,直播被改为录播,演出内容要全面审查!

福田收割机 我的用户,我来宠你。麦收在即,福田收割机机手要注意下面的一波操作啦

  • 福田收割机 我的用户,我来宠你。麦收在即,福田收割机机手要注意下面的一波操作啦
  • 福田收割机 我的用户,我来宠你。麦收在即,福田收割机机手要注意下面的一波操作啦
  • 福田收割机 我的用户,我来宠你。麦收在即,福田收割机机手要注意下面的一波操作啦