当前位置:主页 > 新闻热点 >正文

通过机器学习和时间序列数据理解软件系统行为

作者: 丈哥 分类: 新闻热点 发布时间: 2019-01-12 19:00

• 当人们在使用你的服务时,你应该期望数据具有季节性。在设计预测算法时要考虑到这一点。

• 请注意你为异常检测设置的阈值。在单个服务器上不太可能发生的事件在对应用程序进行扩展之后很可能会发生。

在分析时间序列时,需要了解你想要实现的目标。确保不要只是使用简单的确定性SQL分析工具。了解你的算法的行为,了解你是否正在自动化对算法的解释,或者你是否正在将数据转换为预测残差并使用它们。

在2018年QCon.ai大会上,David Andrzejewski呈现了“通过机器学习和时间序列数据来理解软件系统行为”的演讲。David是Sumo Logic的工程经理,Sumo Logic是一个基于云的机器数据分析平台。运行软件系统(如应用程序或云群集)的开发人员可以将Sumo Logic作为日志记录的后端。Sumo Logic为机器数据提供持续智能。

我们使用软件来解决很多问题,而人工智能技术开始进入到软件世界。在深入研究机器学习对软件系统行为的影响之前,必须先了解传统的时间序列方法。了解传统方法的局限性可以让你在选择技术时做出明智的权衡。首先,问问自己是否知道要完成什么任务。然后再试着问自己是否可以通过简单或确定性的分析来实现这一目标。只有在其他方法不可行的情况下才考虑是否使用机器学习。

了解软件的运行状况以及为什么会发生故障可能很困难。公司在部署服务时,如果这些服务依赖了其他多个主机上的微服务,那么可以列出这些微服务之间的依赖关系,并绘制成图表,这样有助于理清服务之间的关系。在绘制这些图标之后,你可能会得到一个人们称之为微服务死亡之星的图像:



通过机器学习和时间序列数据理解软件系统行为



很多应用程序每天都生成数TB的日志,包括千兆字节的源代码,并且每分钟输出数百万个度量指标。手动分析这些数据是不现实的,因此你需要机器智能的帮助。但是,通过分析数据来找出系统运行状况是一项艰巨的任务,即使不是不可能完成。有一篇有趣的论文深入研究了数据的粒度——“神经科学家可以理解一个微处理器吗?”。论文的作者使用模拟器来玩大金刚游戏。因为他们可以访问模拟的内存,所以可以访问系统的完整状态。从理论上讲,这意味着有可能可以通过分析数据从较高层面了解系统正在做什么。不过,尽管这种策略可以提供小的见解,但只通过查看数据似乎并不能让你从更高级层次完全理解大金刚游戏的运行状态。

当你仅使用原始数据来理解复杂、动态、多尺度的系统时,这种剖析变得非常重要。将原始数据聚合到时间序列视图中可以让我们更容易看清问题。谷歌的“Site Reliability Engineering”是一本非常好的参考书,可以免费在线阅读。

了解复杂、动态、多尺度的系统对于轮班待命的工程师来说尤为重要。当系统出现故障时,他或她必须能够知道系统在做什么。为此,工程师既需要原始数据,,也需要可视化的方法,以及能够聚合数据的更高级别的指标。在这种情况下,工程师通常需要将故障服务器与其他服务器的行为做对比,或与昨天的行为做对比,或与进行软件更新之前的行为做对比。



通过机器学习和时间序列数据理解软件系统行为

百分位的好处和不足

在查看一长串日志数据时,你不会只看连续几毫秒的数据细节。你可以按照时间来量化数据。最基本的方法是使用min、max、average、sum和count等函数。很多人在聚合数据时也喜欢使用百分位。百分位的优势在于它们可以用明确的语言来表达你的数据。例如,“加载一个请求最长的时间是4,300毫秒”,这句话很精确,但无法用来确定它与正常操作之间有多少差距。但是,如果说成“p99小于2,000毫秒”,它就可以告诉我们,不超过1%的客户请求需要超过两秒的加载时间。

百分位的缺点是难以将数据组合成有意义的东西。虽然50%左右的值趋于稳定,但较高的百分位会有很大差异,并且可能值会呈现出长尾分布。另一个问题是很容易就聚合成对几个数据集的简单分析。你可以基于两个数据集的最小值来计算它们的整体最小值。但是,你不能简单地使用百分位方法。从数学角度来讲,我们不可能将数据集X的p95与数据集Y的p95组合在一起。这意味着如果没有进一步的分析,只是组合多个数据集并不一定是有意义的。

重要的时间序列概念


本文链接地址:https://www.0471seo.com/news/2046.html
  • 上一篇:<<评论:我们究竟该不该禁止人工智能武器研发

  • 下一篇:国内传统企业对Hadoop到底什么态度?>>
  • 如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!