Telegram 是如何做到十几个万人群还是如此流畅的?

2023-07-26 08:29:16 +08:00
 airbotgo
1 、Android 、iOS 都非常流畅,除了 Web 网页版有时候略卡
十几个万人群,要做到这种流畅程度,有哪些值得学习的?

2 、本地缓存极少
设置本地缓存仅保存 1 周,所有内容存储云端。目前本地缓存总共占 300M 。

3 、多端同步
Android 、iOS 、Web 三端都在使用,同步做得非常好。它还包括 Windows 、Linux 、macOS 等客户端,如此多的平台支持,同步功能能做到如此程度,简直奇迹。

我的日常使用:
1 )聊天沟通;
2 )听歌(自己上传的音频);看 MV ( B 站收集的音乐视频);
3 )文件备份(中文搜索很烂,目前加标签、主动加分隔符号将就用);
4 )树洞(建个私有频道,写些乱七八糟的东西);
5 )结合 Tasker + 脚本,进行指定图片、短信的备份;

有没有大佬就 1 、2 个点分析下自己的见解,Telegram 有哪些值得学习的地方?
17117 次点击
所在节点    Telegram
96 条回复
a0000
2023-07-26 16:47:18 +08:00
@Edward5937 最开始是可以在大陆使用的,没有被墙,那时就非常丝滑,甩微信好几条街
Katrol
2023-07-26 16:53:31 +08:00
微信技术挺复杂的,卡加占用大是因为里面有很多东西
BBCCBB
2023-07-26 16:58:29 +08:00
万人大群技术上还是很难的.. 成百上千个万人大群技术上就更难了
AppJun
2023-07-26 16:58:42 +08:00
感兴趣愿意折腾可以去看他们的代码。

https://github.com/TelegramMessenger/Telegram-iOS

还有好几百个 issue 没关呢……
bk201
2023-07-26 16:58:54 +08:00
对比微信。可能一个消息要过服务器,一个消息不过服务器。微信还要涉及舆情内容分析之类的。整个内容复杂度应该是不一样的。
BBCCBB
2023-07-26 16:58:55 +08:00
discord 这种也是, 超大群.. 技术上很难.
pengtdyd
2023-07-26 16:59:14 +08:00
老毛子的计算机水平还是值得肯定的,这是圣彼得堡的传统艺能,看家技能,哈哈哈
BBCCBB
2023-07-26 17:00:39 +08:00
qq 不就可以创建超过 500 人的群吗..

微信 500 个人和张小聋设计理念以及技术选型有关.. 微信应该是用的写扩散. 简单但服务端存储成本, 扩散系数较高.. 无法支持太多人的群.
iamqk
2023-07-26 17:02:09 +08:00
功能单一
clf
2023-07-26 17:14:30 +08:00
应该是只加载最新的 N 条吧。在搜索信息的时候就基本很难搜到自己想找的云端记录了。
nocity
2023-07-26 17:31:03 +08:00
@lisxour 微信聊天记录都在本地,向上拉取应该是读本地的数据库,拉取历史聊天记录的确没有 tg 顺滑,可能是本地数据库比较复杂或者是 UI 层设计逻辑问题。tg 在 iOS 客户端使用了自己修改的 Texture (AsyncDisplayKit),滑动过程中数据加载,布局计算都是后台线程,后台线程准备好数据和布局后再更新到主线程界面,用户一边划动一边加载,转圈圈比较少。
ciki
2023-07-26 17:49:10 +08:00
确实挺流畅的,就是缓存的视频有点多
AppJun
2023-07-26 18:06:40 +08:00
作为做过几年的 IM 相关的 iOS 程序员稍微说一下,其实像 Telegram 这种用服务器保留了所有未被删除信息的 IM 服务而言,先天上对那些架构上(不考虑审核目的)没有存储用户的聊天内容导致不支持从最开始拉取消息的 IM 服务(比如微信而言),在很多方面是有很大优势的。主要说 IM 部分,微信的其他各种服务塞进来以及技术含量很高的小程序不在讨论范围。

简单的说其实也是一种钞能力,用服务器成本来换来多端客户端的任务的简易性,最终靠简易性省掉了很多麻烦:

1. 每次打开只需要拉取少量的数据,就能让用户大致了解群组的情况。

- 比如用户在上次使用到下次使用期间,他有十个 500 人的群组,每个群组本来里面原来有 500 人 -> 550 人,其中一些人改了昵称,也不需要下载群组变化的 550 人的信息,只需要获取一个群组消息就可以,然后获取消息的时候把对应说话的用户信息也返回过来,而那些不说话的用户信息,有需要点击进群组的时候再依次加载。但是类似微信,他要下载 550 人的信息。

- 如果这些群组产生了 2W 跳未读,这时候,其实他只需要拉取每个群组最老的 10 条未读和最新的 10 条未读,就能满足点击进去能看到好像都加载下来的数据,如果消息显示完了,就再请求服务器。这里只需要你和服务器的通讯速度够快,预加载的时机合适就行。但是类似微信,他必须把所有的 2W 条信息基本都下载下来。这也是为什么很多人的微信打开在转圈的时候,因为很多人特地把微信的“后台 App 刷新”给关了。

2. 客户端职责简单

- 主要的内容就是做几个 list ,把大家的聊天内容展示出来,处理未读/已读,根据更新 ID 请求数据等等。

- 而微信,就特别需要有很强的投入在数据库优化上。因为聊天记录都在本地,又要在手机可能不太好的性能条件下,加载搜索之类的行为卡顿不能太明显的前提下,尽可能保证用户体验。

3. 多端效果比较一致

- 毕竟每个客户端只是拉取信息,虽然可能和“同步”的概念有点不一样,但是用户感受到的就是数据对得上。

4. 遇到版本升级,历史垃圾文件清理的时候,Telegram 会有更大的余裕来处理,毕竟用户数据如果损坏了?再拉就好。微信则会面临垃圾越堆越多,一不小心弄坏用户记录可就很头疼的状态。

但是微信这种没有服务器从头拉取数据的选择有什么好处呢?

我个人觉得主要是几点:

1. “省钱”,如果用拉取服务器模式,那么现在腾讯可能要 10x 倍的服务器投入,按照国内这个使用频率和覆盖率。那你可能除了朋友圈/公众号的广告外,应该也会看到 Telegram 那样子的群组广告/会员模式之类盈利的操作。

2. 在性能同样的情况下,搜索的体验可能比 Telegram 必须调用服务器 API 请求历史数据来得好。

3. 宣传点可以多一个隐私,而且用户需要担心自己历史聊天记录丢失的同时,哪天被哪个脚本小子盗号导致十多年来的聊天记录被传播开来的风险也降低,如果微信用的是 Telegram 的模式,我相信这几年很多吃瓜事件,怕是会有一大堆更没必要更详尽的聊天记录流出。

4. 微信也能省去很多麻烦,比如聊天数据库被拖库之类的情况。

整体而言,各家有各家的实际和困难,用不同的代价,换来不同的优势。

其实很多事从一开始的选择就会导致一些必然的结果。有人说技术到一定程度就跟魔法一样。我觉得其实很多时候,App/互联网对一些不太熟悉的人而言,就是这类魔法的存在。比如楼里的很多人,基本都处于这种状态。
datoujiejie221
2023-07-26 18:48:18 +08:00
服务端实现应该和推送服务器架构差不多,类比一下,一个个 app 相当于群,每个设备相当于群里的人,给 app 推送相当于给群发消息。我觉得这个量级不比十几个万少吧,微信感觉不是技术上做不到万人群,应该更多的是防止信息快速扩散。
客户端主要还是针对存储的优化、ui 重用和预渲染等等,其实客户端源码都是开放的,有兴趣可以研究。
j20001112
2023-07-26 19:05:53 +08:00
@AppJun 我微信聊天记录从 6.7 版本备份恢复到电脑然后删除重装升级到 7.0 跨越几个版本更新就出现聊天记录数据库错乱,A 与 B 的聊天记录显示成都是 B 发送的。害得我聊天记录作为法院的证据失效损失上百万。
putaozhenhaochi
2023-07-26 19:09:24 +08:00
你看看真正同时在线的有多少
cslive
2023-07-26 19:38:26 +08:00
手机上的 qq ,差不多也是流畅无限滚动,丝滑的很
wangxiaoaer
2023-07-26 19:42:19 +08:00
@dynastysea 技术这么牛逼为什么做出来的客户端那么卡?
totoro52
2023-07-26 20:58:23 +08:00
@wangxiaoaer 面向老板 面向用户开发, 你在公司的时候产品规划能听自己的吗
dynastysea
2023-07-26 22:16:57 +08:00
@wangxiaoaer 你的 tg 的数据量有 wx 的十分之一吗? tg 的功能有 wx 那么丰富吗?你别给我扯什么为什么微信要加那么多乱七八糟的功能,这里我说的就是技术层面。wx 在这么恶劣的条件下做到现在这水平就是很厉害啊。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/959739

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX