在上一次的笔记中,我们讲述到了写文件的流程,但是哪怕在C语言中,写文件都是有概率失败的。为了解决这个问题,我们要进行一点处理。
写文件失败怎么办
之前我们提到过,BMQ所使用的方式是文件节点随机写入,那么就可以选择直接换一个文件节点读写。
proxy
proxy是代理的意思,也是信息的中转站。我们可以通过代理来访问中间人进行分布式部署。 图片来自课件:
BMQ的高级特性
作为新的消息队列,BMQ要与之前的消息队列有所区别。
泳道
一般情况下,项目开发流程如下图所示:
graph TD
开发 --> 独立的线下机房环境BOE --> 产品预览环境PPE -->prod
BOE测试
在BOE测试时,如果有多个人同时测试,只能一个一个人来完成,相当于通路仅有一条。 如果是泳道消息,就像是游泳馆的泳道一样,每一个消息都新建一个topic,可惜会造成资源的浪费。
PPE测试
但在PPE测试的时候,用到的资源比BOE要小,无法承受生产环境的流量,即一个topic对接多个producer和customer。
泳道消息
因此,为了解决上述提到的问题,泳道消息选择了两者的折中,那就是使用一条主干,之后的用到部分用PPE完成。
databus
遇见问题
直接使用原生 SDK 会有什么问题?
- 客户端配置较为复杂
- 不支持动态配置,更改配置需要停掉服务
- 对于 latency 不是很敏感的业务,batch 效果不佳
提出方案
- 简化消息队列客户端复杂度
- 解耦业务与 Topic
- 缓解集群压力,提高吞吐
Mirror
我们需要小心一个问题,那就是跨域。 我们可以使用mirror,让最终一致。 图片来自课件:
Index
我们在使用数据库的时候,一般都会根据id对数据进行查询。 因此,我们在BMQ中对数据进行结构化,异步构建索引,再查询。
parquet
Apache Parguet是Hadoop生态圈中一种新型列式存储格式,它可以兼容 Hadoop 生态圈中大多数计算框架(Hadoop、Spark等),被多种查询引擎支持(Hive、Impala、Drill等)。
我们有两种存储方式,如课件中的图所示: