这是一个创建于 632 天前的主题,其中的信息可能已经有所发展或是发生改变。
Gayhub 地址: https://github.com/turms-im/turms
文档地址: https://turms-im.github.io/docs/
我目前积极维护了 Turms 这项目快 3 年,对 stars 的态度比较佛系,原本是想等 v1.0 做完再发的,但看同 IM 开源圈的一些老哥太“黑”了,开源了 IM 系统的 1%功能就敢刷上千 stars ,当专家了。我日语 N1 水平(最高级),我也知道我日语水平真就是个菜鸡水平,别人说我“日语牛皮”,我心里都很清楚自己到底几斤几两,哪敢给别人辅导日语。打开这些 IM 开源项目的源码一看——触目惊心,让我真切地相信了一些程序员真得需要有“中年危机”。看着一些低质量的 IM 开源项目占据的最多的流量,看着一批批老哥被带到坑里。电影不看演技看流量,一堆路人被坑,真演员无人问津,这谁顶得住。国内一些真心维护过开源项目的朋友估计也有很深切的感受。
Turms 一方面有非常详尽的设计文档(见上面的 Link )与实现,涵盖了诸如可观察性体系、敏感词过滤、防刷限流、全局黑名单等等体系建设,不是说用户 A 能把用户 /群 B 发消息就能叫 IM 系统的,这可能只是 IM 系统的 1%功能。只要你能想到的 Turms 基本都有文档 /代码,如果 Turms 不支持,Turms 文档中通常也会明确告诉你为什么 Turms 不做这些功能。相信大家都看过不少技术公众号,很多技术公众号喜欢纸上谈兵,极少有能真把技术讲好的,并且理论毕竟是理论,实践很可能是另外一回事。全球范围内目前还没有 Turms 这种能 Hold 住架构设计 /文档 /代码的 IM 项目。
如果各位对各种架构、技术实现细节(如实用但网上没什么人能讲好的敏感词过滤实现)感兴趣,我也知无不言( PS:我也不是全知全能,大伙见谅),保证大家也能学到一些书本上+公众号+IM 课程上学不到的知识,互利双赢,就算各位大佬不搞 IM ,也能从中受益。综上,欢迎各位走过路过的大哥大佬,赏个脸,点个 star ,大家互相学习。
下文是简介:大佬们要有兴趣,也可以进上面的 Link 阅读。
另外:
Turms 基于读扩散消息模型进行架构设计,对业务数据变化感知同时支持推模式、拉模式与推拉模式(详细文档:Turms 业务数据变化感知 open in new window),其他大部分的设计细节也源自商用即时通讯项目。并且相比很多技术栈落后的开源项目或闭源商用项目,Turms 解决方案也是全球即时通讯开源领域内唯一一个基于现代化架构与现代化工程技术,并且适合中大规模部署的解决方案。
另外,架构设计是权衡的艺术,部分 IM 产品以功能丰富为口号,但功能丰富的代价就是只适用于小体量的用户规模(如企业内部通讯)。而 Turms 以极限性能为第一要义,同时支持完整的(而非丰富的) IM 业务功能,以支持中大规模即时通讯场景。具体原因可查阅Turms 集合设计 open in new window以及Turms 可观测性体系 open in new window相关文档。
当您需要将 Turms 与其他开源 IM 项目做具体特性的比对时,您可以先照着 Turms 下述的特性与其他开源 IM 项目进行比对。通常情况下,您能通过这样的比对,发现专业 IM 项目与业余 IM 项目之间的区别。另外,在产品对比
章节下,我们也提到了 Turms 项目的缺点供您参考。
注意:当前 Turms 项目的主要缺点是不对直播 /聊天室业务场景提供支持。直播 /聊天室业务场景的技术实现并不难,但其产品需求、质量属性要求与约束性条件与一般的社交场景存在着较大差异,故 Turms 第一版设计不对其提供支持;另外,Turms 也不太适用于小规模的企业通讯场景,用 Turms 往企业通讯场景上套就有点“杀鸡用牛刀”,因为企业通讯更强调功能丰富而非极限性能,与 Turms 的目标不符,所以二者的上层设计也不同。如果希望支持企业通讯场景,您还需要对 Turms 进行二次开发。
重视可观测性体系建设(详细文档:Turms 可观测性体系 open in new window)。具体而言包括以下三个维度:
补充:Turms 服务端自身会在实现高效的前提下尽可能提供更多监控数据,但不提供一些尽管常见但对性能影响较大,且更适合第三方服务实现的功能(如:日活)。对于这类拓展功能,您可以通过对 Turms 的日志与度量数据进行离线或实时分析来实现该类功能。
运作极为高效。
Turms 服务端在所有业务流程的代码实现上,都对性能有着极致追求,具体请查阅代码实现。
1 superfatboy 2021-12-21 15:55:19 +08:00 1看完介绍,一句话:太牛逼了! |
2 NexTooo 2021-12-21 15:58:12 +08:00 1star=学了,谢谢。 |
3 superliwei 2021-12-21 17:09:06 +08:00申请撸串! |
5 oott123 2021-12-21 18:37:49 +08:00 via Android请问楼主如何评价 Tinode 呢 |
7 teem 2021-12-21 19:10:03 +08:00请问楼主如何评价 TIO 呢 |
10 qq316107934 2021-12-21 20:49:46 +08:00看完之后起了一个疑问, 听起来这两者是矛盾的啊。 |
12 JamesChen 2021-12-21 21:35:21 +08:00 6@qq316107934 平心而论,确实完成度挺高的,毕竟我默默勤快地做了快 3 年,我自己也盼 v1.0 也盼了 3 年,但真不“敢”发,毕竟还有一些很重要+细节的优化空间。当然,其实使用者可以规避点这些点,只是我个人不搞定这些问题,不愿意发。反正也没人给我发工资,催我 N 季度不发,就给个 Z 绩效,我要做的只是:一直写下去。 关于“全部开源,免费使用所有功能,并且没有任何引流和收费”,首先这是事实,没有任何引流+收费是因为: 2. 我开源的态度一些人不一样,我最开始写开源就跟一些人打游戏、打篮球一样,我初中开始写代码,写有意思的代码,我就很爽(我高中的时候还写了一个很有创意的马里奥表白游戏,哈哈哈,这是题外话了)。但这只是初衷,在我学了乐器和接受美学学习的时候,我发现我可以借由“开源”这一手段培养我对诸如“自我意识与世俗欲望”的思考,并借由开源本心与世俗欲望这一具体感受,此我更加思考诸如“人活着为什么,人因什么而快乐与幸福”等必须经过自我审视的人生议题,当然也包括培养一些比较显式的能力,如“专注力”、“学会闲暇”,又或者是陪我度过一个又一个漫漫长夜。因此其实这个角度来说,我个人还挺感谢“开源”行为本身的,如果在这过程中别人能从中受益,那又何乐不为。 我试图超越一些世俗的规约,诸如不要动不动就是为了搞钱(不是说搞钱不好,我也像搞钱。但毕竟不能主客颠倒,人得控制钱,而不是钱控制人),因为一些规约并不是我本心,害怕被蒙蔽了双眼而被环境所利用,如果被利用了,人可就活得憋屈,不自在了。尤其是现在资本家与社会意识占据着媒体的话语权,更是要吾日三省吾身。 同样,我认为一些真心喜欢开源的朋友也要有意识地要避免让一些世俗的想法“伪装”成了自己的想法,而忘却自己的初衷,这样的忘却是丢失“自我”,而变成一个木头人,同时也可以借由开源这一体验,思考自我与世俗之间的距离,想清楚点,活得自在些。这是一个很大的话题,也是比较个人的问题,有兴趣可以看看一些我关于人生的思考,哈哈哈: 1. https://github.com/turms-im/turms/issues/862 |
13 JamesChen 2021-12-21 21:51:19 +08:00 1@ufan0 客户端 UI 我没做,也没计划做。 PS:Turms 项目里带 UI 的只有一个 turms-admin Web 管理系统,用来做后台管理的。 |
15 oott123 2021-12-21 23:09:33 +08:00 1至少从楼主的帖子、文档来看,感觉是挺值得尝试的。 谢谢楼主的回复。 |
16 oott123 2021-12-21 23:10:48 +08:00不过楼主的演示站域名好像没备案被拦截了…… |
17 ihipop 2021-12-21 23:17:05 +08:00 via Android 1没看代码,光看你介绍的第一感觉,比之前那在 V 站堆反复堆各种语言关键词搞置顶推什么分布式事务的老哥要靠谱 |
18 leipengcheng 2021-12-22 00:12:37 +08:00厉害,但是感觉可能没有很大的应用市场? |
19 NOspy 2021-12-22 00:23:40 +08:00 1我来说点废话:牛掰,加油! |
20 TinyKube 2021-12-22 00:47:18 +08:00 via iPhone怎么评价由前微信技术专家打造的 OpenIM ,个人用过融云,暂时没尝试过开源 IM |
23 aceimnorst 2021-12-22 08:31:21 +08:00楼主是腾讯的核心开发工程师 |
24 bruce0hh 2021-12-22 08:53:41 +08:00 via Android还没看项目,看这贴就觉得 op 不是一般人🤣 |
25 ffgrinder 2021-12-22 09:08:29 +08:00感谢楼主分享, |
26 keppelfei 2021-12-22 09:43:16 +08:00 1这贴确实有点意思啊,OP 有点屌。 |
27 xia15 2021-12-22 09:48:23 +08:00 1楼主写的很好,看的出来是个用心的项目 |
28 awalkingman 2021-12-22 09:52:39 +08:00 1哈哈我以前搞过 IM ,还挺感兴趣的,代码先 fork 了一份。就冲楼主开源的出来的行为,献上一个感谢~ |
29 HENQIGUAI 2021-12-22 09:59:23 +08:00 1虽然看不懂但是很厉害,学习 IM 必备项目。收藏了 |
30 madlifer 2021-12-22 10:26:26 +08:00 1祝贺,感觉楼主的思维方式比项目更可贵 |
31 zzq825924 2021-12-22 11:07:57 +08:00请注意您的 goole 邮箱,因为 v 站没有私信功能,所以邮件私信了。 |
32 yanbo92 2021-12-22 11:27:03 +08:00 via iPhone 1虽然好多都看懂,但是我去给个 star 支持一下 |
33 googlehub 2021-12-22 12:00:12 +08:00 1太腻害了,值得学习。 |
34 KevinBlandy 2021-12-22 12:01:22 +08:00 1插个眼,有空好好学一学。谢谢楼主的开源。 |
35 991894172 2021-12-22 13:25:49 +08:00 via Android准备 fork 学习一下 |
37 Donahue 2021-12-22 14:04:52 +08:00 1虽然看不懂,但是感觉很厉害的样子,star 了~楼主好有耐心,3 年做一件没有短期回报的东西 |
38 NeedforV2 2021-12-22 16:17:39 +08:00 1LZ 这个有些牛 B 了 |
40 love2020 2021-12-22 17:07:27 +08:00 1starred |
41 chenzicong945 2021-12-22 17:10:52 +08:00 1楼主的境界我看来一时半会是达不到了,帮忙点个 Star ,希望能让更多的人看到这个项目。 |
42 q474818917 2021-12-22 17:47:44 +08:00我看有些语法好像上升到 jdk16 啦 |
43 JamesChen 2021-12-22 18:03:50 +08:00 1@q474818917 是的,因为服务端用 JDK17 写得。 题外话,至于为什么用 JDK17 而不用 JDK11 或 8 ,这个问题的思路其实不太对。应该翻过来,为什么不用 JDK17 ,而用 JDK11 或 8 。其实 Turms 服务端在从 JDK11 升到 17 的时候,什么 BUG 都没遇到,就跟升个 Spring 版本一样简单。Java 自身是一个很保守的语言,它比我们程序员还怕犯错,与将精力花在其担心 Java 会出错,不如担心自己的业务逻辑有没有 BUG 。哈哈哈 |
45 sawyera 2021-12-22 23:47:26 +08:00 via Android 1感觉找到喜欢的东西了,周末仔细学习学习 |
46 omysho 2021-12-27 04:02:12 +08:00 via Android有个问题想问一下,有无计划支持 E2EE ? |
47 JamesChen 2021-12-27 12:50:01 +08:00@omysho 没计划支持,因为这 feature 做了没什么意义。中国合规的 IM 应用不可能搞加密,有加密需求的群体估计也都上 TG 了,哪方都讨不好,所以完全没相关计划。 |
48 aviator 2021-12-28 10:56:05 +08:00 1对 IM 方向挺感兴趣的,还记得当初毕设就是做的一个简单的 BS 的 IM 项目,希望后面能往这个方向发展下 |
49 ownSun 2021-12-30 14:04:24 +08:00 1老哥加油! 牛 |
50 Slogen 2022-01-18 18:14:13 +08:00 1老哥牛逼了,学习学习 |
51 cedoo22 2022-06-15 20:36:11 +08:00最近有 IM 二开项目需求, 了解了一圈, |
53 7897894 40 天前泰酷辣 对于小白来说不能开箱即用很难受,希望有大佬可以基于 Turms 做一个带客户端的出来,我想白嫖😁 |