Open blueeyezhy opened 1 month ago
sequenceDiagram
autonumber
box lightyellow frontend <br/> ios/androd <br/> win/web
participant clients
end
box lightyellow backend <br/> grpc micro services
participant ws_svc
participant kafka_br
participant chat_svc
participant db_svc
participant postgres
participant service_center
end
note over clients,postgres: message loop
rect rgb(191,239,255)
note over clients,ws_svc: web socket (incoming msg)
clients ->>+ ws_svc: msg
note over kafka_br,ws_svc: kafka in_topic produce
ws_svc ->>+ kafka_br: msg
ws_svc ->>- clients: ack("Sent")
end
rect rgb(191,239,255)
note over kafka_br,chat_svc: kafka in_topic consume
kafka_br ->>+ chat_svc: msg
chat_svc ->>+ db_svc: msgs parsed
db_svc ->>+ postgres: msgs
postgres ->>- db_svc: ack
db_svc ->>- chat_svc : ack
note over kafka_br,chat_svc: kafka out_topic produce
chat_svc ->>- kafka_br: msgs parsed
end
rect rgb(191,239,255)
note over kafka_br,ws_svc: kafka out_topic consume
kafka_br ->>+ ws_svc: msg
note over clients,ws_svc: web socket (outgoing msg)
ws_svc ->>+ clients: msg
clients ->>- ws_svc: ack("Arrived")
end
note over clients,service_center : grpc request & response
sequenceDiagram autonumber box lightyellow frontend <br/> ios/androd <br/> win/web participant clients end box lightyellow backend <br/> grpc micro services participant ws_svc participant kafka_br participant chat_svc participant db_svc participant postgres participant service_center end note over clients,postgres: message loop rect rgb(191,239,255) note over clients,ws_svc: web socket (incoming msg) clients ->>+ ws_svc: msg note over kafka_br,ws_svc: kafka in_topic produce ws_svc ->>+ kafka_br: msg ws_svc ->>- clients: ack("Sent") end rect rgb(191,239,255) note over kafka_br,chat_svc: kafka in_topic consume kafka_br ->>+ chat_svc: msg chat_svc ->>+ db_svc: msgs parsed db_svc ->>+ postgres: msgs postgres ->>- db_svc: ack db_svc ->>- chat_svc : ack note over kafka_br,chat_svc: kafka out_topic produce chat_svc ->>- kafka_br: msgs parsed end rect rgb(191,239,255) note over kafka_br,ws_svc: kafka out_topic consume kafka_br ->>+ ws_svc: msg note over clients,ws_svc: web socket (outgoing msg) ws_svc ->>+ clients: msg clients ->>- ws_svc: ack("Arrived") end note over clients,service_center : grpc request & response
这里从服务器出来的消息为什么还要再次经过kafka?这不是增加了复杂度了嘛~
我想着消息的进出,无论是单对单还是group chat都通过kafka解耦,功能上更模块化;kafka的broker更充分利用,整体上性能会更好吧
没有必要,增加不了吞吐,还增加了延迟,增加了复杂度,增加了出错的概率,功能上更模块化这块怎么说?
kafka 就是来保障消息能触达,稳定为先,性能优化次之,当然有更好的方案可以拿出来探讨。
大佬您好,im架构上利用kafka配置2个topic,一个用来处理客户端进来的msg,一个用来处理服务端出去的msg,平台架构会不会更简单,实现起来更容易?