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

WinForm实战:如何用C#和PdfiumViewer打造一个功能齐全的PDF阅读器(含源码) 本文详细介绍了如何使用C#和PdfiumViewer库从零开始构建一个功能齐全的WinForm PDF阅读器。内容涵盖项目环境搭建、核心组件解析、基于命令模式的工具栏与UI架构设计,并深入讲解了智能缩放、页面导航、打印功能等核心交互的实现,以及内存管理和性能优化等高级话题,为开发者提供了一套完整的实战解决方案。 阅读详情

本文由作者jinglijun编写修改,出处链接:https://blog.youkuaiyun.com/justinjing0612/article/details/38322353

OpenIMgithub开源地址:

https://github.com/OpenIMSDK/Open-IM-Server

OpenIM官网 :https://www.rentsoft.cn

**OpenIM官方论坛:**https://forum.rentsoft.cn/

对微信、陌陌等进行了分析,发出来分享一下(时间有些久了) 电量:对于移动设备最大的瓶颈就是电量了。因为用户不可能随时携带电源,充电宝。所以必须考虑到电量问题。那就要检查我们工程是不是有后台运行,心跳包发送时间是不是合理。

img

网络: 这个也是IM最核心的内容了,我们要做到在任何网络下等顺畅聊天那就不容易了,好多公司都用的xmpp框架,如果在强网络环境下,xmpp完全没有问题。但是那种弱网络环境下xmpp就束手无策啦,用户体验就很垃圾了。 个人觉得xmpp 可以玩玩(参考看这个RFC3920和RFC3921 ), 但是用来真正的产品就差远了。如果遇到一个做IM 的朋友张口闭口都说xmpp 的话,那么不用沟通了,肯定不是什么好产品。微信、QQ以前也曾用过xmpp,但是最后也放弃了xmpp,就知道xmpp有很多弊端了,还有就是报文太大,好臃肿,浪费流量。为了保证稳定,微信用了长链接和短链接相结合,例如: 1 ,两个域名 微信划分了http模式(short链接)和 tcp 模式(long 链接),分别应对状态协议和数据传输协议 long.weixin.qq.com dns check (112.64.237.188 112.64.200.218) short.weixin.qq.com dns check ( 112.64.237.186 112.64.200.240) 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/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 Connection: Keep-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不可以赚钱,但没有却是不行的,就像一个地方要致富,不修路是不行的道理一样。

上面说到了protobuf ,就简单介绍下: JSON相信大家都知道是什么东西,如果不知道,那可就真的OUT了,GOOGLE一下去。这里就不介绍啥的了。

Protobuffer大家估计就很少听说了,但如果说到是GOOGLE搞的,相信大家都会有兴趣去试一下,毕竟GOOGLE出口,多属精品。

Protobuffer是一个类似JSON的一个传输协议,其实也不能说是协议,只是一个数据传输的东西罢了。

那它跟JSON有什么区别呢?

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

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

img

消息中转:

img

链接层:

img

逻辑层:

img

通讯协议设计:

img

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

img

Redis协议:

img

img

img

img

img

img

img

优化

  • 连接层(参见通讯服务器组成):只做消息转发,允许随时重启更新,设计原则简单/异步;单台压测试连接数70W;现状:1.5亿用户,月活5000W+,连接数1200W+;
  • 逻辑层(参见通讯服务器组成):用户会话验证即登陆、消息存取、异步队列
  • 采用私有通讯协议,目标:高效,弱网络快速收发;可靠:不会丢消息;易于扩展;参考协议格式:REDIS协议;参见协议格式、基于队列的消息协议、基于队列的交互、基于版本号的消息协议、基于版本号的交互等;
  • 核心的长连接只用于传输轻量的实时数据,图片、语音等都开新的TCP或HTTP连接; 一切就绪后,最重要的就是监控,写一个APP查看所有的运营状态,每天观察;
  • 如何选择最优路线,即智能路由; 二、智能路由、连接策略: 多端口、双协议支持 应对移动网关代理的端口限制 支持TCP、HTTP两种协议 根据备选IP列表进行并发测速(IP+端口+协议) 后端根据终端连接情况,定时更新终端的备选IP列表 终端在连接空闲时上报测速数据,便于后端决策 TCP协议不通,自动切换到http 优先使用最近可用IP 并发测速,根据终端所处的位置下发多组IP、PORT,只用IP,不用域名,手机上的DNS50%不准 负载均衡器(LVS…)的问题– 单点失效
  单点性能瓶颈
  负载均衡从客户端开始做起• 域名负载的问题

  域名系统不可靠– 更新延迟大  

WNS(wireless network services)

img

1解决移动互联网开发常见问题: 通道:数据交互、大数据上传、push 网络连接:大量长链接管理、链接不上、慢、多地分布 运营支撑:海量监控、简化问题定位 登录&安全:登录鉴权、频率控制

img

img

移动互联网特点: 1、高延时: 信道建立耗时( 高RTT) 2、低宽带、 高丢包 3、多运营商(电信,移动,联通等) 4、复杂网络 -2G,3G,4G,wifi。cmwap,cmnet。。 -网关限制:协议,端口 5、用户流动性大,上网环境复杂

img

img

img

img

1、开发时间: 历史一年半 2、链接成功率 -99.9% 3、极端网络环境下成功率- 由于常见app 4、crash率 -0.02%(crash次数/登录用户数)

微信后台系统架构

背景:

A、分布式问题收敛 后台逻辑模块专注逻辑,快速开发 可能读取到过时的数据是个痛点 需要看到一致的数据 B、内部定义 数据拥有两个以上的副本 如果成功提交了变更,那么不会再返回旧数据 推演: 1 增加一个数据 2 序列号发生器,偏序 约束:只能有一个client操作 client有解决冲突的能力 问题转移:client如何分布? 3 修改集群中一个制定的key的value (1)覆盖他 (2)根据value的内容做修改 if value = 1 then value :=2 通用解法: (1)paxos算法 工程难度 一切可控

分布式算法设计: ( 2)quorum算法(2011) 再单个key上面运算 真是系统约束 类paxos方案,简化 为每次变更选举(by key) 算法过程 提议/变更/同步/广播

系统架构

img

写流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A1NmRMWc-1631694486384)(https://pic1.zhimg.com/80/v2-542a8b1131f97c34bf32d1244248fcfc_720w.png)]

Replication & Sharding 权衡点 自治,负载均衡,扩散控制 replication->relation

容灾抵消 同城(上海)多数派存活 三园区(独立供电,独立)

Sharding

一组KV6 为一个单位

1,人工阶段 局部扩容,影响收敛9 2,均匀分布 制定分段hash32 (string) 翻倍扩容

3,一致性哈希

具体实现? 1、业务侧快速开发 存储需要提供强一致性 丰富的数据模型支持(结构化、类SQL/KV) 条件读,条件写

2 业务增长迅速,系统要能够方便的横向扩容 3设备故障/短时节点实效便成为常态,容灾自动化,主碑可写无需人工介入 4小数据

img

存储模型 纯内存 Bitcask 小表系统 LSM-tree

img

小表系统 1、 解决放大问题 2、数据按变更聚集存储 3、Affected1 ChangeTable (1+2+。。。。+n-1+total)/n 4、分裂与合并 数据流动 1、自动化迁移 2、节点同时做代理 3、合并磁盘io

同步流量 1、 数据vs 操作 2、幂等 3、保底策略

通信包量 1、动态合并 100K qps 200% -10% 3、权衡与估算 设计要点 1、吞吐量 2、异步化 3、复杂度 4、libco 自动修复系统 1、不要让错误累计 2、全量扫描 bitcask 的一些变化 1、内存限制 2、全内存

————————————————

**OpenIM官网 :**https://www.rentsoft.cn

**OpenIM官方论坛:**https://forum.rentsoft.cn/

更多原创技术文章:

开源OpenIM:高性能、可伸缩、易扩展的即时通讯架构
https://forum.rentsoft.cn/thread/3

【OpenIM原创】简单轻松入门 一文讲解WebRTC实现1对1音视频通信原理
https://forum.rentsoft.cn/thread/4

【OpenIM原创】开源OpenIM:轻量、高效、实时、可靠、低成本的消息模型

https://forum.rentsoft.cn/thread/1

OpenIM服务发现和负载均衡golang插件:gRPC接入etcdv3

https://forum.rentsoft.cn/thread/2

【OpenIM原创】简单轻松入门 一文讲解WebRTC实现1对1音视频通信原理

https://forum.rentsoft.cn/thread/4

【OpenIM原创】C/C++调用golang函数,golang回调C/C++函数

https://forum.rentsoft.cn/thread/36

告别版本过低提示!微信3.9登录修复与聊天记录无缝迁移全攻略 本文详细解析了微信3.9版本过低提示的根源,并提供了完整的修复方案和聊天记录迁移指南。通过专用修复工具绕过版本检测,以及新旧版本聊天记录目录对比,帮助用户实现无缝迁移。特别提醒备份重要数据,确保操作安全。 阅读详情

相关推荐

第六节 旅烨cms实战练习 -2021.03.11

第六节 旅烨cms实战练习 -2021.03.11 前期使用win10里小皮搭建旅烨cms,以为自己的各项配置有问题,但是小皮能够正常带动DVWA,始终带动不了旅烨cms。 后来与其他安全人员交流,发现win7可以正常运行旅烨cms。 所以目前为何出现问题尚不清楚 1.环境搭建 win7+小皮 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nOSTEFUw-1615475228402)(C:\Users\LuXian\AppData\Roaming\Typora\typora

lyx3429的博客 572

陌陌移动端直播P2P技术

Photo byMídiafromPexels直播业务的主要成本就表现在于带宽上,尤其是在用户要求日益提高的未来,带宽带来的成本问题会越来越大。本文来自陌陌流媒体高级研发工程师白松...

LiveVideoStack 1874

ESP32驱动GC9A01圆形屏实战:Arduino平台LVGL移植与图像显示优化

本文详细介绍了在Arduino平台上使用ESP32驱动GC9A01圆形屏的实战指南,包括硬件连接、LVGL移植与图像显示优化。通过SPI配置、LVGL库安装和双缓冲机制等技巧,帮助开发者快速实现高效显示效果,适用于智能家居控制面板等应用场景。

weixin_29182481的博客 735

【超详细】Vue3+UniApp+.NET8集成腾讯云IM即时通信全攻略

即时通信(IM)作为现代应用的核心功能之一,广泛应用于社交、电商、在线教育等场景。本文将手把手教你如何在Web(Vue3)、移动端(UniApp)和.NET8后端中集成腾讯云IM,实现跨平台的即时通信能力。

李赛赛的专栏 3239

SIwave仿真手册——电源完整性仿真之PDN阻抗的提取(四)

(想不到我这个弱鸡的博主有一天也有被催更的时候,看到后台被催的消息,我慌了,赶紧写一篇把。) 文章目录3.1 PDN阻抗的提取3.1.1手动完成PDN阻抗的提取1、创建pin group2、创建端口3、数据文件的清理和检查(参考1.3.4&1.3.5)4、添加电容模型(参考2.2.1)(==这一步很重要==)5、开始仿真6、查看仿真结果3.1.2利用向导工具完成PDN阻抗的提取1、点击图标![在这里插入图片描述](https://img-blog.csdnimg.cn/36d974339ea5449

luohuo9844的博客 1万+

从.bib到.bbl:手把手教你搞定LaTeX参考文献的完整流程

本文详细介绍了从.bib到.bbl的LaTeX参考文献处理完整流程,包括文献数据库构建、样式选择、主文档配置、编译流程及问题排查。特别针对.bib、.bbl等文件的操作提供了实战解决方案,帮助用户高效管理学术文献引用,适用于各类学术写作场景。

weixin_29292431的博客 285

分享 50 个前端效率工具、网站和书籍

本文包含了在线编译,在线编辑、实用工具、可视化工具、各种前端电子书等50多个网站,快放到你的收藏夹吃灰吧如果你看到最后了,记得给我一个免费的赞哦在线编译(编辑)、playgroundJS 代码混淆www.jsfuck.com/[1]http-::www.jsfuck.com:.jpg嗯,优点是你可以用来给你的前端工程师好友搞恶作剧,缺点是只能用一次SCSS 转 CSS 在线编译www.sassme...

前端达人 863

uniapp [全端兼容] - 详细实现全局修改设置字体大小功能效果,统一修改页面字号字体大小,一键改变字号整个项目立即生效,大中小字号预设、老年人大字模式场景,uniApp全平台兼容控制页面字号大小

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,修改字体大小,一键调整UniApp字体大小,实时改变不用刷新,动态设置字体大小,uniapp全局修改字体字号大小,如何控制全局字号,可调整显示的字体,全项目生效,老年人大字模式,改变所有页面的字体,全局设置字体大小,实现小中大的字体切换,设置改变全局字体大小功能,如何做到全平台兼容,H5APP实现全局字体大小调整,不兼容报错,用户设置字号,全局设置应用字体大小,大中小字体修改,页面设置page-me

🏆 前端领域优质创作者 1万+

uni-app学习笔记 移动应用开发——基于uni-app开发 基础部分 1.1 uni-app发展历程 && 1.2 uni-app开发环境配置 && 1.3 uni-app打包

uni-app学习笔记 移动应用开发——基于uni-app开发 基础部分 1.1 uni-app发展历程 && 1.2 uni-app开发环境配置 && 1.3 uni-app打包

代码改变世界 2014

【ComfyUI】Wan2.2 Animate 背景保留动作迁移视频生成

本文介绍了一个基于ComfyUI的高精度视频生成工作流"Wan2.2 Animate",该系统融合动作捕捉、图像拼接和LoRA加权等技术,能自动识别人脸并完成精准动作迁移,同时保持背景稳定。工作流采用模块化设计,包含输入提取、图像融合、模型加载等关键节点,核心模型Wan2.2-Animate-14B支持fp8精度与BlockSwap控制。流程分为图像输入、动作提取、多图合成等五个阶段,通过文本提示编码器和图像语义编码器实现语义驱动的动作生成,最终输出高质量视频,适用于虚拟形象驱动和

Mr数据杨 2260

利用SIMULINK搭建一个16QAM调制解调收发系统

1发送模块设计 根据前面介绍的理论知识,我们可以知道16QAM的基本结构,首先我来设计QAM发送段的SIMULINK仿真模块。 图1 16QAM的发送端模块 他的基本工作流程为:将信号通过两路升余弦滤波器,得到滤波以后的信号,滤波器的作用就是为了防止码间干扰。然后将滤波以后的信号和SIN,COS相乘得到调制信号,将调制 下面一一介绍每个模块的具体参数设置以及各个部分信号的波形图。 图2 产生随机数据的信号源 第一部分信号是产生一组随机的数字,作为信源,第二个模块将信号...

FPGA/MATLAB学习教程/源码/项目合作开发 4776

通过集成腾讯 IM 来浅尝一下.net 6 的 MINI API

来体验一下.net 6 最新推出的 mini api,话说这还是当时.net 6 框架推出时的一个主打特性,据说是参考了 Go 这样的新型语言特性,推出的一个超级轻量级的 webapi 开发框架,因为采用了"top-level statements"(不知道咋翻译更合适,属于只能意会不能言传吧~哈哈)这样的语法特性,所以新建的项目文件代码非常精炼。

为自己代盐的专栏 822

NOTE: When using the `ipython kernel` entry point, Ctrl-C will not work.解决方案

本文主要介绍了NOTE: When using the `ipython kernel` entry point, Ctrl-C will not work.解决方案,希望能对使用jupyter notebook的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

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

对微信、陌陌等进行了分析,发出来分享一下(时间有些久了)有兴趣的同学可以加入群:369511307。电量:对于移动设备最大的瓶颈就是电量了。因为用户不可能随时携带电源,充电宝。所以必须考虑到电量问题。那就要检查我们工程是不是有后台运行,心跳包发送时间是不是合理。流量:对于好多国内大部分屌丝用户来说可能还是包月30M,那么我们必须站在广大用户角度来考虑问题了。一个包可以解决的就一个包。网络:这个也是

heiyeluren的blog(黑夜路人的开源世界) 6503

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

微信、陌陌等著名IM软件设计架构详解-低手解读

原文 :微信、陌陌等著名IM软件设计架构详解 1 什么是IP直连? 参考: DNS优化之IP直连 android httpclient 服务器 ip 直连问题 (移动互联网中,DNS解析的失败率是联网失败中占比很大的一种。为了优化这个问题,我们使用了IP直连。即,从服务器拉取一个配置文件,里面包含域名到IP映射。客户端每次联网时根据域名在配置文件中查找到对应

wenping的专栏 1760

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: 闲鱼消息发展回顾
下一篇: 【OpenIM原创】IM服务端docker、源码、集群部署 非常实用
OpenIM
博客等级 码龄5年 295粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值