好奇 telegram 是如何实现保存聊天记录的,存在服务器上?

2020-11-09 03:52:03 +08:00
 oooolongtea
最近在研究聊天系统软件的系统设计架构,因此遇到了这个迷思。
因为 telegram 的 faq 页面提到了他们是云服务,那么这是不是意味 telegram 的聊天记录是存在云服务器上(前提是这个云服务器的存储空间够大)。
还是说,每次这个云服务器其实一直向数据库同步抓取聊天记录?
求各位指导。
8182 次点击
所在节点    Telegram
21 条回复
oooolongtea
2020-11-09 03:54:02 +08:00
@Livid
L 大你好,能麻烦你帮我把这个问题转发到这个版块吗? https://v2ex.com/?tab=qna
webshe11
2020-11-09 04:41:14 +08:00
是的啊 普通聊天并不是端对端加密的,聊天记录都在云上
Jerami
2020-11-09 05:10:17 +08:00
文字根本占不了多少信息,图片的话可以参考百度网盘模式。
oooolongtea
2020-11-09 05:39:36 +08:00
@Jerami 你的意思是,针对不同的用户,比如 id=99 的用户,每次他连到 telegram 上,有一个专门的云服务器,这个服务器专门是分配给这个用户的,然后这个用户的消息、图片都存在这个云服务器上,是这样的吗?
ochatokori
2020-11-09 07:31:14 +08:00
@oooolongtea #4 怎么可能。
文字消息占不了多少地方直接建索引存库,百度网盘模式大概是指记录图片散列值不同用户共享一个文件
delectate
2020-11-09 08:33:29 +08:00
@oooolongtea "这个服务器专门是分配给这个用户的",这成本得多高啊。

实际上很简单,表这样设计就行:
table: group
messageID|userID|sendTime|recvTime|Read|payloadType|payloadContent|delete
如果 userid 在消息内,且 recvTime (收到消息的时间)是空,已读为 False,一股脑推给该 userID 的客户端就行了。
BrettD
2020-11-09 09:09:39 +08:00
@oooolongtea 不是专门的服务器,大家的聊天信息都存在一起
EasonC
2020-11-09 11:32:05 +08:00
你应该是想知道为什么我的聊天记录自己删了,后台是能看到,然后才想问 telegram 的聊天记录是怎么保存的,我知道你是那个群里的谁了哈哈哈哈
oooolongtea
2020-11-10 05:11:06 +08:00
@EasonC 我没明白你在说什么。 我只是想知道 telegram 的架构,因为我最近在看系统设计方面的书。
oooolongtea
2020-11-10 05:13:30 +08:00
@delectate
谢谢谢谢。你的意思是数据库是线性数据库( mssql ),然后每次我连接到一个 gateway 的时候,这个 gateway 直接和数据库连接读取我这个账户的聊天记录?

示意图如下:
客户端 -- 网关( gateway) -- 数据库。

在网关在数据库之间难道没有服务器什么的吗?
oooolongtea
2020-11-10 05:17:09 +08:00
@BrettD 都存在一个服务器上,然后每次你连的时候,服务器会专门腾出一个空间来存放、显示你的了解记录,是这样吗?
BrettD
2020-11-10 10:18:43 +08:00
@oooolongtea 不用专门腾出一个空间呀,所有信息都存在一起
BrettD
2020-11-10 10:19:12 +08:00
@oooolongtea 显示聊天记录是客户端的事情
oooolongtea
2020-11-11 03:28:38 +08:00
@BrettD 谢谢。那么是不是所有聊天记录都存在一个云服务器上,然后我登录的时候,云服务器会根据我的 user id,只显示我这个账户对应的聊天记录?
BrettD
2020-11-11 09:48:19 +08:00
@oooolongtea 没看懂你在说啥,显示聊天记录是客户端的事情,服务器又不显示聊天记录
oooolongtea
2020-11-11 15:02:19 +08:00
@BrettD 比如我从网页端登录 telegram 的时候,以往的聊天记录都可以看到,这难道不是云服务器从数据库里提取出来的吗?
BrettD
2020-11-11 15:22:07 +08:00
@oooolongtea 服务器只管数据,显示聊天记录是客户端显示,不是服务器显示
oooolongtea
2020-11-12 07:47:58 +08:00
@BrettD 谢谢回复。你的意思是,客户端(例如 iphone 上的 telegram app)把数据从数据库里下载下来,然后显示在 iphone 上。这个我理解。
但是 telegram web 版,我每次登陆上去,无论我在哪里的机器去登陆,我都可以看到同样的聊天记录,这是不是因为我登录后,和我机器相连的那个服务器,根据我的 user id,把我对应的聊天记录从数据库下载到了服务器上并且显示给我?
BrettD
2020-11-12 08:41:36 +08:00
@oooolongtea 服务器是存储和传输数据的,不是显示聊天记录的,聊天记录是你电脑上的浏览器显示的
oooolongtea
2020-11-12 12:30:49 +08:00
@BrettD 多谢你的耐心……我去看一看这背后运作的机制是什么。

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

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

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

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

© 2021 V2EX