Skip to content

团队协作沟通软件,打算做成开源免费的钉钉/飞书,预期使用5年时间完成这个巨大的目标。

Notifications You must be signed in to change notification settings

virjar/team-talk

Repository files navigation

TeamTalk

团队协作沟通软件,打算做成开源免费的钉钉/飞书,预期使用5年时间完成这个巨大的目标。

基础方案选型

  • 后端:netty+springboot,使用java8语法标准,但在jdk17上进行编译
  • 前端:react + mui (react 18.0 , material3)
  • 客户端:Kotlin Multiplatform,使用kotlin同时实现Android、IOS、MacOs、Windows、Linux多端的app

八大原则

  • 沟通是组织基础需要,所有广泛的基础需求均不容易走收费商业化道路,故本项目全线代码均不会收费(包括音视频、会议、在线文档、邮件系统、小程序体系等)
  • 产品完整性需求大于产品扩展需求,故本项目将会是一个闭环的all-in-one项目,我们不会考虑将内部组件抽象成独立模块或者服务
    • 跟随上条原则,基础体系可以容纳其他业务,但不需要将自己作为插件接入到其他业务
    • 用户使用满意后自然会研究产品内部,进而为公司考虑二次开发方向,此为用户出发。技术架构模块化,提前考虑用户扩展,需要用户提前了解技术本身,此为技术出发
  • 在本项目没有完整之前,本项目只会是单体架构。未来(还不知道未来是哪天)的分布式架构一定不会是平民架构(平民架构是指使用redis,springCloud等中间件堆砌而成的不可靠分布式)
  • 零依赖:我们拒绝任何进程级别的三方服务(mysql除外),故redis、mongo、minio、nacos、ffmpeg、kafka等进程级别的能力,均是不可以被接受的技术方案
    • mysql是因为我们需要一个对数据进行运维管理的平台,然而本质上im消息的存储模型更加适合日志式存储,而非B+树结构。
    • 其他的所有中间件服务本质上在考虑单体架构的情况下,都是不需要的或者可以很容易被替代的
    • 对于文件资源,本项目全部使用磁盘直接存储
  • 单一端口:考虑用户使用难度,本项目无论是websocket、http、tcp二进制协议、TLS等任意协议,均只会使用单一端口,我们将端口选择的问题收敛到系统内部
  • 单一语言:除开web后端网页(使用React),其他所有模块代码(包括pc,Linux、IOS等),均使用java一种语言。如此用户只需要掌握一门语言就可以维护本项目(否则IM在您公司就需要一个多兵种的团队了)
  • 单一仓库:本项目将所有模块收敛到单一仓库中,同时我们会尽可能处理构建异常和构建联动计算问题,让您可以很简单构建和体验项目
  • 用户接受和性能保证:我们首先考虑用户是否可以从源码级别维护独立维护本项目,之后考虑软件性能
    • 我们使用jdk1.8的语法书写后端,使用SpringBoot作为web后端框架,是因为在中国绝大部分传统企业,在十年内还会使用java8 + SpringBoot
    • 我们会提供在源码环境直接运行所有模块的功能配置,让用户可以一键运行出来可以单步调试的源码环境。并且这个调试环境还是在单一IDE内部完成
    • 在系统内部,我会极致的考虑性能优化,这些优化点可能有:无锁的异步事件驱动、自研的二进制格式和压缩、源码生产的反射避免、零拷贝、自研存储模型、精巧的数据结构设计等

开发环境

  • Java: jdk21
  • 编译器:IntelliJ IDEA 2024.1.1 (Ultimate Edition),AndroidStudio
  • docker(用于快速运行测试环境)
  • Node: v20.10.0
  • Yarn: Yarn 2

当前进展

方案设计中...

About

团队协作沟通软件,打算做成开源免费的钉钉/飞书,预期使用5年时间完成这个巨大的目标。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published