在线文本协作中queue 的问题

在这个design 中用incoming 和outgoing message queue 去保证文档顺序,

想问问这里有没有实现的例子, 因为client 的操作都有有version id 的, 同一个client 发出的所有更新的request 应该是进入同一个topic 的同一个partition, 这里是可以保证同一个client 的操作是sequence 的,

但是如果同一个客户端的request 1 先发出, request 2 后发出, 但是由于request 1 遇到了network issue, 导致request 2 早于request 1 inqueue, 这个问题怎么解决呢

我觉得如果一定要处理这种情况的话,每个操作都要加一个递增的sequence number了,接收方document service 在apply的时候如果不允许seq number出现gap,那就要等待一段时间,直到gap被fill了。

不过可以看一下老师怎么回答这个问题。

如果增加sequence id, 这样系统的复杂度是不是会进一步提升(类似于twitter 的分布式雪花id),

其实我有点好奇的是这里是否真的需要使用queue, 因为websocket service本身 肯定需要一个config service 去管理partition, 后边的document service 应该是stateless,

下面是一点思考过程, 望老师解惑

  1. 假设message queue 能保证对于同一个file 的修改最后都是由同一台server 完成, 那么本身可以在这个server 的memory 里build queue, 这样其实并不需要incoming 和outgoing queue (怎样handle server failure data persist 的问题, 只能写db)

所以综合来说queue 本身并不仅仅是维护了顺序, 同时也将incoming 和outgoing 两种操作分离, websocket 和document service 分离, 提高了系统的availability

最后想问下Document DB 是用Nosql吗, 如果是, 是哪一种
status table 里file id 和content, 这个content (snapshot) 也是cun sql吗?

不需要 sequence id 的,也不存在你说的这个问题。因为同一个客户端是不可能有两个 in-flight request 的。只有当一个 request 被处理完了以后,客户端才能发送下一个 request。

主要是为了避免短时间很多 request 进来处理不完。

用 SQL DB,有 ACID 保证

纯文本的话,Snapshot 也是存 DB