Go第十三天上课

79 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天.

今天老师讲了关于生产消费模型,从开始讲解消费队列,由于生产消费模型在实际中有先后顺序,只有部分服务发生后剩余的服务才能继续,所以一部分事件为一个整体,拥有事物的原子性,如当购买商品后库存会减1,该操作不可发生在订单记录加1后,因为库存数不一定足够,但是订单数加1和通知商家可以并行运算,因为这两个事件互不影响。

image.png 所以在改进结构后增加了消息队列,消息队列中拥有原子性事物,消息队列后需要将数据合理的存储在对应的数据库中,该过程利用日志存储的方式,消息队列本质是一个队列容器,该队列中包含高并发,高吞吐,高可用。 image.png 随后老师介绍了Kafka的基本相关知识,在高吞吐场景下发挥了很大的优势。 Kafka的基本概念,生产者通过topic进行调用并可被多个不同的consumerGroup调用,consumer模型有Group概念,因为topic可以在同一时间被多次调用以满足高吞吐。 image.png

Kafka在集群中拥有多个节点服务器,每个分布式服务器为主从关系,一个Leader和多个Follower,Follower主要用于复制Leader的消息,生产消费模型的消息通过Leader。以此达到一个存储的单点故障问题,但是当领导节点故障后,可能会存在部分follower节点没有完全复制成功。 image.png

一条完整的消息从生产者到broker再到消费者,生产者将消息打包成batch,一次可发送多个消息,批量发送可以减少io次数。有时会将该batch的消息进行压缩,实现更快速存取。 image.png 随后老师讲了Kafka的存储方式,存储结构以及实现均衡负载的方式,考虑将partition从一个broker中写入另一个broker中是否值得,因为会换取io性能,为解决一个io性能需要花费同样的io进行处理,所以Kafka中会存在一些潜在的负载问题以及存储同步问题。最后老师提到字节使用消息队列BMQ模型,提高了整体存储效率以及更好的实现了均衡负载,具体细节需要仔细反复研究,因为Kafka本身含概的知识体系较多,所以先将Kafka体系了解清楚再进行BMQ跟进可能会容易理解。