把一个Python应用程序装进Docker
|
对于上面说到的这些功能,Prometheus 都能够实现。Prometheus 能根据这些收集的数据实现告警功能。 例如:运维希望在 CPU 达到 80% 的时候给值班的运维人员发送邮件,产品希望活动积分发放数量超过 10 万的时候发送告警邮件。这些都可以通过 Prometheus 实现。
除了数据收集、告警功能之外,Prometheus 还有很多强大的功能,例如:强大的 ProQL 查询、许多客户端库等。 看到这里我们大概知道 Prometheus 其实就是一个数据监控解决方案,它能帮你简单快速地搭建起一套可视化的监控系统。 但这么说还是有点抽象,下面我举几个简单的例子,帮助大家理解 Prometheus 究竟能做什么? 对于运维人员来说,他们需要监控机器的 CPU、内存、硬盘的使用情况,以此来保证运行在机器上的应用的稳定性。 对于研发人员来说,他们关注某个异常指标的变化情况,从而来保证业务的稳定运行。
对于产品或运营来说,他们更关心产品层面的事情,例如:某个活动参加人数的增长情况,活动积分的发放情况。 第一次接触 Prometheus 是在去年,我工作了六年的时间点上。但现在看来,工作六年才知道 Prometheus 是有点晚了,因为 Prometheus 确实比较重要。个人感觉 Prometheus 在你 3-5 年之时就应该了解,并且应该掌握关于它的一整套知识,最终你应该掌握:如何从零去搭建一套业务监控系统! 说到 Prometheus,大多数人可能不太清楚它是做什么的。即使知道它是做监控的,也不明白为什么要做监控。这其中涉及到许多原因,我想主要有下面两点原因。 第一,全局观不足。 许多开发同学长期在一线开发,局限于自己开发的需求上,对整个系统不了解,对整个系统业务不了解。只有当你做了 leader 之后,你才会更关注系统的整体情况。而如果你当了 leader,你会发现业务监控系统是多么重要!(毕竟,你也不想半夜被电话吵醒,睡眼惺忪地打开电脑解决问题~) 第二,工作经验欠缺。 刚刚工作一两年的同学,对于 Java 整个知识体系还学得不够全面。而 Prometheus 的监控知识更多属于进阶的知识,自然会被排到更后面的位置。 除了前面说到的这两个主要原因,其实也还有一些其他原因,例如:公司技术体系问题等等。 言归正传,那 Prometheus 到底是做什么的,为什么要学习 Prometheus 呢? 什么是 Prometheus?
Prometheus(普罗米修斯)是古希腊的一个神明,名字的意思是「先见之明」。从它的名字可以看出,Prometheus 是做「先见之明」的监控告警用途。维基百科简单写了它的作用:Prometheus is a free software application used for event monitoring and alerting(Prometheus 是用来监控、报警的免费软件)。 要计算原问题 f(10),就需要先计算出子问题 f(9) 和 f(8) 然后要计算 f(9),又要先算出子问题 f(8) 和 f(7),以此类推。 一直到 f(2) 和 f(1),递归树才终止。 我们先来看看这个递归的时间复杂度吧,「递归时间复杂度 = 解决一个子问题时间*子问题个数」
因此,青蛙跳阶,递归解法的时间复杂度 = O(1) * O(2^n) = O(2^n),就是指数级别的,爆炸增长的,「如果n比较大的话,超时很正常的了」。 回过头来,你仔细观察这颗递归树,你会发现存在「大量重复计算」,比如f(8)被计算了两次,f(7)被重复计算了3次...所以这个递归算法低效的原因,就是存在大量的重复计算! 「那么,怎么解决这个问题呢?」 既然存在大量重复计算,那么我们可以先把计算好的答案存下来,即造一个备忘录,等到下次需要的话,先去「备忘录」查一下,如果有,就直接取就好了,备忘录没有才再计算,那就可以省去重新重复计算的耗时啦!这就是「带备忘录的解法」 我们来看一下「带备忘录的递归解法」吧~ 一般使用一个数组或者一个哈希map充当这个「备忘录」。 假设f(10)求解加上「备忘录」,我们再来画一下递归树:
「第一步」,f(10)= f(9) + f(8),f(9) 和f(8)都需要计算出来,然后再加到备忘录中,如下: (编辑:伊春站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
