团队协作沟通软件,打算做成开源免费的钉钉/飞书,预期使用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
方案设计中...