乐趣区

关于数据库:OpenMLDB-v070-发布

2023 新年伊始,OpenMLDB v0.7.0 正式公布。本次版本更新重点加强了易用性和稳定性,下文将具体介绍次要改良和更新内容。更多 0.7.0 版本内容详见链接:Release v0.7.0 · 4paradigm/OpenMLDB

系统性改良音讯和错误码,晋升易用性

在以前的版本中,音讯和错误码零碎的欠缺度有余,存在错误信息未被正确捕捉、音讯显示含糊等问题。v0.7.0 开始重构整个音讯和错误码零碎,目前次要改良了 CLI 和 SDK 上的大部分音讯和错误码,其余将在后续版本持续欠缺。
以下举例在 OpenMLDB CLI 下,离线引擎的错误信息改良。

-- v0.6.x 的错误信息输入
127.0.0.1:7125/db>  SELECT * FROM t1;
Error: Fail to get TaskManager client

从下面能够看到,v0.6.x 错误信息音讯提醒绝对含糊,并未显示具体的谬误起因。

版本改良当前,谬误音讯输入如下:

-- v0.7.0 的错误信息输入
127.0.0.1:7125/db>  SELECT * FROM t1;
Error: [2001] async offline query failed--ReturnCode[1003]--Fail to get TaskManager client

相比拟以前打印出更多的谬误栈内音讯提醒:

  • [2001] async offline query failed:第一层捕捉的错误信息,显示离线引擎在异步模式下执行失败,错误码为 2001,须要进一步查看谬误链的后续错误代码或者信息
  • ReturnCode[1003]:第二层捕获的错误信息,错误码为 1003,通过查看错误代码文档可知,该错误码 1003 次要代表:“客户端连贯服务端出错,通常呈现在连贯 TaskManager 失败,可能 TaskManager 并未启动或者不在集群中”

错误代码文档详见如下链接:https://openmldb.ai/docs/zh/m…

设定内存应用下限,加强服务稳定性

依据过往教训,OpenMLDB 作为在线服务,应用过程中最常见的稳定性问题是内存资源耗尽,导致 tablet 被操作系统杀掉,最终造成整体业务下线的危险。而内存资源耗尽往往属于无心中的非正常行为(比方突发流量洪峰,或者某些运维操作),带来极高的问题排查难度。为此,v0.7.0 布局了内存资源隔离及告警零碎两个新性能,升高因为内存耗费带来的业务危险:

  • 内存资源隔离,将内存资源耗费在可控范畴内(v0.7.0 局部实现)
  • 告警零碎,在内存超过某一个应用阈值时,告诉相干运维零碎或运维人员(布局中,预期 v0.8.0 公布)

v0.7.0 实现了一个针对 tablet 粒度的配置参数 max_memory_mb(见 tablet 配置文件 https://openmldb.ai/docs/zh/m…),该配置会限度以后 tablet 能够应用的最大内存。当内存使用量超过预设值时,写操作将会失败,然而不会影响读操作,服务仍然在线,即读相干的业务仍然能够放弃失常。用户后续能够通过扩容、分片迁徙等伎俩彻底解决内存资源不够的问题,从而将对对于线上业务的影响降至最低。

下图显示了当设置单个 tablet 的内存限度为 500 MB 的时候,在一直写入操作下,该 tablet 的内存资源占用随着时间推移的状况。能够看到在测试场景下,该 tablet 内存占用初始继续上涨,当达到设定的内存最大应用值时,即便一直再进行写入,内存占用不会上涨(写入会返回失败),从而保障了该 tablet 的内存使用量在可控范畴内,防止导致业务下线等重大问题。

新增自动化部署和启动工具,升高应用门槛

OpenMLDB 0.7.0 之前的版本存在较为简单的部署和启动命令,以及一些隐含的程序依赖,往往给使用者带来很多困扰,消耗不必要的精力。以后版本针对性的改良了部署,服务启动和进行命令。

在 v0.7.0 以前,部署并且启动 OpenMLDB 集群服务须要别离对 ZooKeeper、tablets、nameserver、APIServer、TaskManager 五个组件进行部署和启动,总计二十多条命令,并且容易呈现配置不统一而导致启动失败。

v0.7.0 引入了三个自动化命令,deploy-all, start-all, stop-all 别离用于一键化集群部署、启动、进行。用户只须要一次性正确配置环境,就能够正确地进行自动化部署和服务启动 / 进行。

  • 手动部署和启动(v0.7.0 以前)
  • 一键化部署和启动(v0.7.0 新反对的自动化工具)

下图显示了执行 deploy-all 命令当前的输入信息,能够看到该命令主动进行了 tablet、nameserver、APIServer 等组件的自动化部署。

下图显示了执行 start-all 工具当前的输入信息,能够看到该命令依照正确的程序,主动启动了 tablet、nameserver、TaskManager 等组件。

在应用了 deploy-all 以及 start-all 命令当前,本来简单的部署和启动过程简化为一行命令,大大降低了整体的应用门槛。

退出移动版