探索BI系统搭建的必要性与AI技术的应用潜力
764
2022-05-29
随着GaussDB(DWS)的快速发展,GaussDB(DWS)目前集成了众多运维操作,其中大部分运维操作均需占用用户资源,如IO、Mem、CPU、网络、磁盘空间等,且无法依据用户业务负载,自动调整运维负载,因此,如何协调不同运维操作与用户业务之间的资源分配,成为了关键问题。
为解决这个问题,GaussDB(DWS)内设计并实现了运维任务调度器,下图描述了运维任务调度器的基本工作原理。
调度器分为客户端和服务端,通过grpc实现通信,调度器客户端的功能在此不做详细说明,可参考另一篇博文https://bbs.huaweicloud.com/blogs/257575。
调度器服务端是整个调度器的核心,主要包括几个核心模块,调度模块、业务模块、动态调度模块、静态调度模块、数据持久化模块和负载信息采集模块,其中业务模块包括业务分析模块和业务执行模块。
调度模块:调度模块主要负责客户端交互、维护调度器、拉起运维任务执行模块。
客户端交互:调度器服务端通过grpc与客户端进行通信,调度器启动时将占用默认端口49851,若该端口已被占用,则随机选取空闲端口,并将该端口写入配置文件。客户端启动时,将读取该配置文件,与服务端通信。
维护调度器:调度模块内包含一个常驻维护线程,该维护线程负责维护调度器正常执行,该维护线程通过轮询方式执行多个维护项,目前版本维护项包括:
1. 执行模块维护:轮询所有的执行模块,查看执行模块是否已经完成,若完成,则释放该执行模块。
2. 运维任务清理:清理调度器历史数据。
3. 查询调度任务:从数据库中查询当前时间节点是否有需要做的运维任务,并调用动态调度模块,依据集群资源负载情况,判断该运维任务是否可以执行。
动态调度模块:依据集群实时状态,提供调度决策,决定是否执行该运维任务。
通常情况下,用户在注册运维任务时,会配置该运维任务执行的时间窗。调度器会从时间窗开始的时间点,调用动态调度模块,判断该运维任务是否可以执行,若不可以执行,则进行下一次轮询判断,若可以执行,则拉起运维任务对应的执行模块。
执行模块:负责运维任务的执行。
调度器可同时执行多个运维任务,每个运维任务对应一个单独的执行模块,执行模块之间未实现资源隔离,执行模块之间会争抢集群资源。当执行模块被拉起以后,执行模块从数据库中读取对应的作业,并执行该作业。在执行模块执行完以后,执行模块退出,并等待调度模块执行清理操作。
分析模块:负责运维任务的分析。
在用户注册运维任务以后,分析模块将该运维任务拆分为多个作业,并分析每个作业的IO、CPU、MEM负载、执行时长预估等信息,作业信息为静态调度和动态调度提供了调度依据。
静态调度模块:依据集群历史信息,提供静态调度策略。
相比于动态调度策略,静态调度策略仅依据集群历史负载信息,对运维任务进行粗略的调度,该运维任务真正被调起的时间实际取决于动态调度。静态调度的意义是,粗略估计运维任务的执行时间,判断用户提供时间窗是否合理。
数据持久化模块:调度器通过调用libpq.so.5.5动态库与gauss内核进行通信。相比于gsql,libpq的通信方式更轻量。
采集模块:负责采集集群信息。
采集模块目前仅包括两个采集项,集群IO负载和集群网络负载,其中IO负载通过读取gs_wlm_instance_history实现,网络负载通过读取视图pgxc_comm_status实现。
EI企业智能 Gauss AP 数据仓库服务 GaussDB(DWS) 运维
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。