揭秘CloudAI背后的技术架构

2019年06月 · XSKY

日前,针对多存储集群的场景XSKY推出了CloudAI多集群统一监管平台。它主要包含以下功能:

  • 多个集群的信息总览
  • 集群资源的同步、监控和管理
  • 灵活的监控分析中心
  • 容量预警与扩容建议

下图说明了CloudAI与SDS集群之间的关系:

整体架构

CloudAI整体是一套B/S架构的软件,客户端是基于React.js技术实现的一套单页 Web 应用,通过RESTful接口与服务端进行通信。

服务端采用微服务架构设计,主要使用 Node.js和一部分Python语言开发,整个项目在同一个仓库中维护,每个微服务都是一个独立的包,所有的包使用Lerna统一管理。开发、测试完成的微服务最终用Docker来编译成容器,并通过docker-compose进行编排和运行。

CloudAI微服务架构中包含的主要服务有:

1、CloudAI Server:负责接收和处理客户端的 HTTP 请求并给出响应;

2、Schedule :负责创建定时任务,触发其他周期性的事件;

3、Queue:通用的任务队列;

4、Prometheus:负责收集SDS集群的监控数据,同时也监控CloudAI本身的运行情况;

5、Prophet:根据监控的历史数据对未来进行预测,用于容量预估;

6、Redis:通用的内存KV数据库。

集群接入

为了能够在同一平台监控和管理多个存储集群,首先需要实现的是集群的接入功能。CloudAI以Access Token作为凭证调用SDS的API,采用完全解耦的方式来接入、监控和管理SDS集群。在部署好CloudAI之后,就可以将SDS集群接入CloudAI平台。

首先,需要在SDS控制面板上新建一个Access Token并复制,如下图所示:

然后,返回CloudAI的控制面板,进入集群管理界面点击“接入”。这时候需要填入SDS管理节点的访问路径,然后粘贴刚才生成的Access Token。

最后点击“接入”,就可以将一个SDS集群接入CloudAI平台。

数据同步

要实现CloudAI的监控和管理等一系列功能,首先需要解决的问题是如何从SDS集群同步所需的数据。这里的数据主要包括两种:存储资源数据和监控数据

1、同步存储资源数据

对于XSKY SDS集群来说,存储资源主要是指服务器、硬盘、存储池、块存储卷、对象存储桶、文件夹以及各种网关等资源。

这些资源的元数据统一存储在SDS控制器的PostgreSQL数据库中,可以调用SDS控制器封装的RESTful接口来访问。当然,前提是需要通过其登录接口获取临时Token或创建Access Token来获取访问权限。

为了实现存储资源数据的同步,CloudAI采用其 Web 框架实现的Schedule模块来创建定时任务,一个任务只负责从SDS控制器的接口fetch一种资源的元数据。

这些任务定时被推到内部创建的任务队列中,并被Web Server的多个Worker进程并发执行。最终这些资源数据会同步到CloudAI的数据库中,再以RESTful接口的形式暴露给客户端,Web客户端最终将多个集群的资源汇总展现到CloudAI的用户界面上。

2、同步监控数据

在XSKY SDS中,资源的监控是基于Prometheus实现的。SDS集群的每一个管理节点都运行着一个Prometheus进程,通过SDS控制器暴露的接口抓取所有的监控数据,并存储在自己的TSDB中。

另一方面,SDS控制器基于Prometheus提供的PromQL封装出资源的samples接口,以便 SDS用户界面获取监控数据,并实现界面上的性能、容量等指标的监控折线图。

那么CloudAI如何从SDS集群中获取监控数据?显而易见的一个方法,与同步资源数据类似,我们可以通过SDS控制器提供的samples接口获取,但是这种方法存在以下几个问题:

  • 监控数据量较大,频繁请求会给SDS控制器造成巨大压力
  • Samples接口的数据结构主要是给SDS用户界面定制的,缺乏扩展性
  • 接口结构变更容易导致的兼容性问题

面对上述问题,我们放弃了通过samples接口获取监控数据的方法。而更好的选择是基于 Prometheus的Federation机制来实现监控数据的同步。

3、使用 Federation

Federation允许一个Prometheus Server从另一个Prometheus Server获取时间序列。Federation有许多使用场景,比如通过一个分层结构来实现跨数据中心的监控汇总,或是通过分片的方式来实现监控系统的可扩展性。对于CloudAI来说,Federation可以用来方便的实现多集群的监控数据的收集与同步。

SDS内部的Prometheus监听着管理节点的 9090 端口,我们假设 SDS 集群的主管理节点 IP为10.255.101.103。通过http://10.255.101.103:9090就可以访问到该节点的Prometheus的用户界面和接口。

需要注意的是,出于安全考虑3.2.17.1+ 及4.0.1.0+版本的XSKY SDS产品默认在部署之后会对Prometheus开启 Basic Auth 认证。

对应的用户密码可以在节点的 /etc/xms/xms.conf 中的配置项中找到:

同样的,我们可以通过这个端口来实现CloudAI与SDS的Federation。首先我们需要在 CloudAI中运行一个Prometheus Server,修改这个 Prometheus的配置文件 prometheus.yml:

需要注意,如果SDS版本开启了Prometheus的Basic Auth,那么就需要在配置文件中填写`basic_auth`信息。在`match[]`部分,我们填入需要同步监控数据的资源指标。 `targets`我们使用`file_sd_configs`而不是`static_configs`,因为CloudAI在运行期间需要动态的修改`targets`,例如接入、移除集群的时候。targets.json示例格式如下:

这样,我们就为CloudAI的Prometheus和SDS的Prometheus之间建立了一个 Federation。CloudAI的Prometheus会定时的从SDS的Prometheus抓取监控数据并存储本地的TSDB中。

到此,CloudAI Server就可以很方便的使用PromSQL从本地的Prometheus获取所有接入集群的监控数据,并实现诸如多集群的概览、性能分析、容量预警等功能。

主要页面
CloudAI包含以下主要页面:

1、总览页面:从整体视角了解全部的接入 CloudAI的集群的健康状态、数据状态、性能、容量、告警灯信息,更详细的信息可以具体的集群页面了解;

2、集群管理:列出了全部的接入CloudAI的集群,用户可以在多个维度之间切换,了解每个集群的信息。点击某个集群后,可以进入单个集群的详情页面了解详细信息;

3、资源管理:包含多个集群的存储池、块存储卷、文件系统、存储桶、服务器等信息,可以方便的跨集群地查找和筛选存储资源;

4、监控分析:跨集群的监控分析中心,自由定制资源和监控指标,并结合告警日志快速的分析出异常事件的原因;

5、容量预估:根据集群的容量使用历史,预估未来的容量使用趋势,并给出容量即将写满的预警;并且可以根据用户的使用计划给出扩容建议。

使用顶部导航,可以方便的在这些页面之间进行切换:

1总览页面
总览页面整合了已接入 CloudAI 的全部集群的关键信息,用户可以通过这个界面快速的了解到任意一个集群健康状态,异常情况等。

CloudAI还专门提供了兼容大屏场景的黑暗模式的监控面板,方便运维人员用于展示、长期监控等。

2集群管理
集群管理页面列出了所有已接入的集群。

用户可以通过右上角的下拉切换按钮,查看集群不同维度的信息。

点击集群名称,还可以进入集群的详情页面,详细了解集群内部的信息。

3资源管理
资源管理界面包含了SDS集群中一些重要资源的信息,包括存储池、块存储卷、文件系统、服务器等。

每种资源页面都汇总了全部已接入的SDS集群的对应资源的信息,使用资源页面内的筛选面板,可以跨集群查找到指定的资源。
4监控分析
CloudAI提供了一个可以灵活定制的监控分析中心,可以针对各种告警、性能波动使用自定义的指标进行分析。

操作面板部分,用户可以创建并保存多个不同关注点的面板,并在多个面板之间切换。点击“添加指标”按钮,可以多资源多维度的定制面板。

然后使用时间控件,就可以在监控面板中灵活查看不同时间段的指标数据,并结合监控面板顶部和右侧的告警、事件信息,对异常情况进行具体分析。

5容量预估
CloudAI使用Prophet作为内部的预测引擎。上文提到Prometheus服务会定期从SDS获取监控数据,其中获取的容量历史会再定期的喂给Prophet服务,用来预测未来一段时间的容量使用情况。

Prophet本身是一个时间序列预测工具,可以和Prometheus存储的时间序列数据很好的兼容。Prophet基于趋势和周期模型,非常合适用来对集群、存储池等资源的容量使用情况进行预测,并能够适应业务的周期性带来的波动。

在容量预估页面,用户可以通过切换查看不同集群和存储池历史容量和对未来一段时间的预测情况,同时根据预测给出每个资源的容量还有多久写满。针对即将写满的资源,容量预估界面上会给出提醒,并在平台上生成告警来及时提醒用户。

在预估方面,为了尽量提高准确性,CloudAI会根据资源的容量历史数据量来动态调整预测的时长。对于接入时间较短容量历史较少的集群,预测的时长也会相应缩短,CloudAI 最长会预估未来三年的容量事情情况。

在容量预估页面的右下角,CloudAI提供了自助的扩容建议功能。

用户选择具体资源及其计划的使用时长,CloudAI会根据该资源的容量预估情况,来给出具体的扩容建议。

总结

本文整体介绍了XSKY CloudAI产品包含的功能及内部架构,详细描述了集群接入、数据同步、容量预估等特性的内部实现原理。

CloudAI作为XSKY的多集群管理工具提供了SDS产品之外的总览视角,存储管理员无需在多个SDS集群之间来回切换,就可以方便的实现多个集群的统一监控管理。

此外, CloudAI的分析、预测等功能,无需侵入已有SDS集群,在保障SDS稳定运行的的同时,为企业存储提供了更多的增值服务。