IM微服务划分-DDD

设计目标

期望实现IM到基本功能如下:

  1. 单聊/群聊/聊天室/多设备登陆/在线状态
  2. 文本消息/多媒体消息/离线同步/历史消息/消息漫游
  3. 多端同步/消息撤回/已读未读/离线推送
  4. 添加好友/会话列表/好友列表

评估标准

  1. 技术角度看
    1. 整体通信复杂度降低,RPC调用次数可以收敛
    2. 关键接口满足“延迟,吞吐,可用”等要求指标约束
    3. 便于快速发现/定位/修复问题的可维护&可观测性
  2. 业务角度看,实现上述产品功能,面向业务需求可扩展
    1. 反复同类需求可配置化且自动化,可沉淀到运营&产品平台进行自助解决
    2. 便于数据分析,提供在线&进线&离线数据的快速且灵活查询
    3. 坚顾长短期目标,短期敏捷迭代,长期整洁架构
  3. 管理角度看
    1. 保证交付需求的质量,上线后不会引入新的问题,达成预期
    2. 保证需求如期交付,技术人员的需求负载均衡,且高吞吐低延迟的交付需求
    3. 应对人员流动,每个模块都要有backup,并且保证新人快速接手
    4. 合理规划技术团队职责,保证协作沟通效率,分离关注点与职责范围

解决方案

事件风暴

命令风暴

聚合以及聚合根

界限上下文

  1. 拆分用户服务User server,用户管理用户信息与权限
  2. 拆分关系服务Relation server,用户管理用户关系链和链上的权限信息,数据
  3. 拆分消息服务Message server,用户管理消息纬度的权限、信息、存储等工作
  4. 上述三者为领域服务,对外暴露一个应用服务API server,业务适配与需求交付
  5. 抽象一个common包封装所有基础设施等依赖接口,实现依赖倒置
    1. 领域层仅依赖接口而非基础设施等具体实现
    2. 所有服务均使用相同的common包来操作基础设施层
    3. 只有抽象出领域服务,确定核心域才能形成真正的业务资产