什么时候您需要预测服务?
预测的作用是帮助提前规划,减少资源消耗,降低成本,未雨绸缪。
最简单的例子,就是天气预报。提前几天预测台风的到来,可以提前做好准备,降低损失,这样不会措手不及。提前预测是否会下雨,可以帮助管理出行计划。
在企业生产里,产品的需求是波动的,有了对产品将来一段时间的需求比较准确的预测,可以帮助合理提前安排采购计划,生产计划,方便人员排班部署。否则,会出现产品过剩、库存积压、资金不能通畅流转;或者用户想买产品而买不到,选择竞争对手的产品,浪费机会成本,降低自己的竞争力。这是因为采购或者生产都需要时间的,在物流供应链里的术语叫提前期(lead time)。如果采购、运输或者生产不需要时间,能够瞬间完成,这时候是不需要提前预测的。
在IT系统自动化领域里,用户的请求是波动的,用户的请求量决定了资源的消耗量。资源的调度也是需要时间的,比如为了实现服务的弹性伸缩,自动租用和释放虚拟计算机来满足高峰期的用户的请求和减少低谷期的资源的消耗。由于租用、启动VM,安装特定的软件包等等都需要时间,提前预测好用户的请求量,就能帮助提前规划资源调度。否则,如果资源不足,用户的请求可能没法及时地响应,超时出错,用户体检非常差。如果资源过多,造成资源浪费。有了准确的预测,就能帮助在正确的时间准备正确数量的资源。
总之,在企业生产或者计算机服务里,用户的需求是外部的,生产和资源调度等是企业内部的(Logistics),内部的可控性通常比外部的可控性要高很多,预测能够帮忙连接企业外部需求和内部的组织管理,让内部生产和组织平滑运作,降低成本,提升用户体验。
阿里云日志服务的AI预测服务
阿里云日志服务提供的预测服务,不同于其他的预测服务,阿里云日志存储提供的AI预测服务把所有数学建模的细节都包起来,对用户没有任何数学建模知识上的任何要求,只要求会点SQL,把数据表对应的列填到指定的函数参数就可以了。这样可以降低AI预测模型的使用门槛,让您的AI预测服务更容易落地。
另外,阿里云日志服务提供的预测服务不仅可以用于短期的预测,还可以比较准确地对远期的情况进行预测。
对于预测服务,我们直接用图来描述吧。我们提供了三个预测效果的可视化展示,参考下面的三个图。其中蓝色的曲线表示到目前为止的最近一段时间的历史数据,红色的曲线是模型预测出来的未来的时间点的指标数值。对三个指标数据组成的时间序列数据分别进行预测,分别对预测了接下来的1440个时间点(分钟)的指标数值。其他的大部分预测模型对近期的几个时间点预测比较准确,如果往前预测很多个时间点,预测效果就变得很差了。但是,可以看到阿里云存储日志服务在往前预测超过上千的时间点的情况下,还能保持比较高的准确度。
图1. 时间序列预测范例一
图2. 时间序列预测范例二
图3. 时间序列预测范例三
指标数据通常是以高维二维表指标数据的形式保存的,参考下面的高维指标数据。这一类的指标数据都有一个时间维度列、一个或者多个指标数值列、一个或者多个上下文维度列。
高维指标数据例子: metric_data_table
cluster | server | metric_name | time_period | metric_value |
Cluster-A01 | Server-01 | request_count | 2024-01-01 00:00:00 | 180 |
Cluster-A01 | Server-01 | request_count | 2024-01-01 00:01:00 | 200 |
Cluster-A01 | Server-01 | request_count | 2024-01-01 00:06:00 | 150 |
Cluster-A01 | Server-01 | request_count | 2024-01-01 00:08:00 | 175 |
Cluster-A01 | ... | ... | ... | ... |
Cluster-A01 | Server-01 | network_ingress | 2024-01-01 00:00:00 | 2000000000 |
Cluster-A01 | Server-01 | network_ingress | 2024-01-01 00:01:00 | 2500000000 |
Cluster-A01 | Server-01 | network_ingress | 2024-01-01 00:02:00 | 1200000000 |
... | ... | ... | ... | ... |
在这个例子的数据中,每个cluster的每个server的每个metric_name的time_period和metric_value的两个字段构成一个时间序列。可以使用阿里云日志服务中的ts_forecast(…)函数按照下面的SQL语句来对每一个cluster的每个server的每个metric_name的指标数据分别进行预测。
sql
select cluster, server, metric_name, ts_forecast( array_agg(time_period), --时间序列中的时间数据拼成的数组 array_agg(metric_value), --时间序列中的指标数值列拼成的数组 '2024-01-01 00:00:00', -- 时间序列历史数据开始的时间点(该点有历史数据)以便自动填充数据 '2024-01-08 00:00:00', -- 时间序列历史数据结束的时间点(第一个时间点没有历史数据)以便自动填充数据 '2024-01-10 00:00:00', -- 指定要预测的结束的时间点(不包含该点) '1 minute' -- 指定时间序列的相邻点的时间间隔以方便自动填充数据 ) as forecast_outcome from metric_data_table where time_period >= '2024-01-01 00:00:00' -- 指定历史数据开始的时间点 and time_period < '2024-01-08 00:00:00' -- 指定历史数据结束的时间点 group by cluster, server, metric_name
ts_forecast(…)函数的参数规范参考这个例子的注释部分。这个例子是把2024-01-01 00:00到2024-01-07 23:59的分钟级别的数据交给ts_forecast(…)函数,让其帮忙预测从2024-01-08 00:00一直到2024-01-09 23:59的分钟级别的2880个时间点的指标的数值。
这里的每个cluster的每个server的每个metric_name的预测是相互独立的,阿里云日志服务能够自动地把预测计算分发到后台成百上千台计算机进行分布式并行计算,因此,计算速度会非常快。
另外,用户在存储数据的时候,为了节省空间,通常会把数据值为0的数据点移除。ts_forecast(…)函数能够帮我们把这些数据自动地填补回来,帮助用户在预测时减少了数据预处理的工作量。
因此,阿里云日志服务的预测服务的接口非常简单,不需要数学建模的知识,计算速度快。
阿里云日志服务中的ScheduledSQL——让AI模型计算成为自动计算服务
之前介绍的阿里云日志服务的AI计算,是以SQL的形式介绍的。这仅仅是ad hoc的分析。我们可以结合阿里云日志服务中的ScheduledSQL的功能把AI计算形成定期计算的服务。要在阿里云日志服务生成持续执行的预测计算任务,在查询分析的界面上提供了一个 “定时保存分析结果”的按钮,点击这个按钮,参考下图,之后会弹出窗口,然后在这个窗口上配置这个定时执行的AI计算就可以了。
图4. 日志服务中的定时SQL服务
ScheduledSQL任务的配置很直观。ScheduledSQL计算任务会定时把预测计算的SQL所产生的计算结果写入到另外一个日志库,如果这个目标日志库还不存在,需要先创建。另外要配置的是调度时间间隔和SQL读取的数据窗口等。