是否在消息上打标?

场景

用户可以创建某个虚拟形象,将该形象发布到聊天平台,然后和该形象进行聊天。

用户创建虚拟形象的时候,开启备份功能,将自己的聊天记录备份到指定位置,也可以关闭开关,停止备份功能。

聊天功能和备份功能分属两个部门,在这个场景下,我们需要怎么处理?

消息打标.png

设计

目前有两个方案可以选择

  1. Chat服务投递消息的时候,将是否要备份的信息也放到消息里

  2. Chat服务不做特殊处理,备份服务主动从形象创作工厂获取形象信息,判断是否开启了备份

如果不想任何扩展的话,两个方案各有优缺点

方案一 方案二
优点 1.数据一致性好:数据是否需要处理,标记的很清楚 1.独立:事情自己就做了,不需要依靠别的服务
缺点 1.变动感知:Chat服务需要对该功能有所感知,如果功能有变化,也需要同步修改 1. 一致性问题:即使实时获取形象信息,也有边界问题;2.如果要解决边界问题,形象设计工厂就要做版本,备份服务查询的时候,根据时间找指定版本的信息,逻辑会复杂很多
现在扩展一下,如果聊天APP觉得让每个用户都能独自控制自己的开关,方案二完全无法用了。总不能让备份服务去获取用户的配置吧。

所以打标的信息最好还是放到消息上。至于变动感知问题,Chat服务可以通过协调好规范,这样无论是增加新的功能还是改变原有的功能,chat服务都不需要感知,会自动透传出去。

总结

其实工作中能碰到很多有意思的设计点,仔细思考一下,能发现很多新的想法,也能对业务有更深的理解。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-02 05:44:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-02 05:44:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-02 05:44:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-02 05:44:03       18 阅读

热门阅读

  1. 业务中台-研发篇

    2024-01-02 05:44:03       26 阅读
  2. Linux: syscfg: network:inet_peer_threshold

    2024-01-02 05:44:03       40 阅读
  3. LeetCode //C - 724. Find Pivot Index

    2024-01-02 05:44:03       33 阅读
  4. 使用 Docker 安装 Redis、MySQL、MinIO 和 RocketMQ

    2024-01-02 05:44:03       39 阅读
  5. 项目搭建中的mysql_rpt层,项目中遇到的code2问题

    2024-01-02 05:44:03       32 阅读
  6. 零工经济:雇佣到合作的转变

    2024-01-02 05:44:03       33 阅读