云平台队列服务-Qbus实践

    技术2022-07-11  88

    女主宣言

    小编这篇文章从Qbus服务介绍、架构、使用场景开展,不涉及到队列底层具体实现原理,只讲把Qbus服务上到私有云的过程,希望给有相同需求的各位带来一点有价值的东西。下来就跟随作者一同学习下吧。

    PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!

    1

    服务介绍

     

    Qbus作为云平台队列服务,服务于公司各个业务线,目前每天流量PB+,topic 1W。

    Qbus以kafka组件为核心,及其周边配套服务 ,包括日志收集,各种语言的sdk, 持久化存储到hdfs,业务定制监控等服务。

    2

    使用场景

     

    场景广泛,包括日志系统,打点服务,大数据,流处理等常见场景。主要作用为 服务解耦,消息通讯, 流量削峰 等。

    3

    服务架构

     

    4

    业务接入方法

     

    读写客户端主要有以下三种:

    日志收集;

    sdk 写入;

    其他组件或者平台的读写(比如flink,hadoop);

    其中前两种,可以直接在云平台提交工单,自动审核通过。第三种需要人工沟通,我们提供多版本集群,适配更多业务平台。

    5

    服务具体实现

    其中我结合整个服务的实现。说一下我们主要做了的东西,及遇到的问题。这篇只讲解决方案。不涉及到具体细节。

    日志收集组件:

    日志收集使用logstash组件做了定制,filebeat版在研发马上上线。

    一般用户在云平台申请了日志收集的topic,填写了机器,与收集路径,就会生成一个自动工单,由命令系统自动去业务机器安装logstash。当然还包括日常的路径增删改查,这些由我们为云平台提供接口来实现。

    定制功能包括:

    配置统一管理,自动更新;

    收集进度汇报;

    服务自检;

    日志头添加机器名,特殊日志归并;

    bug 修改;

    配置存放在云平台配置中心。

    状态展示如图:

    6

    SDK

     

    SDK是组内自研的。kafka-bridge 目前已经开源。欢迎大家使用。

    定制功能包括

    使用VIP代替broker_list;

    更强大的错误处理,当有不可用副本时候直接跳过;

    相关参数优化;

    7

    持续化保存到HDFS

    这是 Qbus队列周边的配套服务,提供持久化到HDFS的功能。

    HDFS我们直接用的兄弟部门的平台。

    服务架构如下:

    如图示,主要实现了以下内容:

    消费组件使用flume, 我们给他做了容器化;

    相关配置存放在云平台配置中心 ,支持动态更改;

    我们在外围增加了一个动态调整工具,实时监控消费状态,自动的加减副本;

    还做了历史状态保存,统一展示,做到有据可查;

    这样用户只需要在页面点一下开通或者关闭,就可以了,非常方便。

    8

    监控服务 

    监控服务作为整体服务的基础,为整体服务提供数据支撑,包括上层的动态调整工具,都非常依赖监控。

    当然业务们也有权限在云平台查看自己topic的流量情况。 

    监控服务我们主要使用了Prometheus。

    如图:

    对它做了以下改造:

    根据业务水平切分为多个进程,做HA;

    统一的后端存储(influxdb 集群);

    prometheus 前增加了nginx做反向代理;

    增加权限验证;

    这样为上层提供稳定的监控数据接口。

    总结&展望

    现在Qbus 服务依托云平台已经做到了工单全自动,除非kafka集群故障需要人工处理。

    但是随着越来越多的业务都把服务上到容器平台之后,横向扩容变得非常迅捷,频繁,异常处理也可能不太合理,这也对基础服务带来了更多的挑战。

    基础服务要做的更加健壮,才能应付这一切。

    这其中包括:

    更迅速的扩容,迁移能力;

    更丰富的业务隔离;

    更强大的客户端兼容;

    说到这里,更期待pulsar加入到新版本的qbus了。

    360云计算

    由360云平台团队打造的技术分享公众号,内容涉及数据库、大数据、微服务、容器、AIOps、IoT等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

    Processed: 0.014, SQL: 9