庖丁解牛之监控系统(二)

欢迎大家加入运维开发讨论交流群来交流,群号 365534424

关于扩展性的定义

可伸缩性(可扩展性)是一种对软件系统计算处理能力的设计指标,高可伸缩性代表一种弹性,在系统扩展成长过程中,软件能够保证旺盛的生命力,通过很少的改动甚至只是硬件设备的添置,就能实现整个系统处理能力的线性增长,实现高吞吐量和低延迟高性能。

   可伸缩性和纯粹性能调优有本质区别, 可伸缩性是高性能、低成本和可维护性等诸多因素的综合考量和平衡,可伸缩性讲究平滑线性的性能提升,更侧重于系统的水平伸缩,通过廉价的服务器实现分布式 计算;而普通性能优化只是单台机器的性能指标优化。他们共同点都是根据应用系统特点在吞吐量和延迟之间进行一个侧重选择,当然水平伸缩分区后会带来CAP定理约束。

可扩展与过度设计的矛盾

具体讨论到监控系统的可扩展性,我们这里特指系统可以随着被监控对象的规模扩大而无需对架构做大的变更修改。一千台服务器的时候,是这个架构,一万台服务器的时候还是这个架构,最好十万台的时候只需要增加服务器就可以,架构还是那个架构。听起来很棒吧。这也是每个系统架构设计者的梦想。但现实照进理想的时候,发现理想很残酷。首先是对于设计者来说,当他在一家只有几百台服务器规模的公司时,很难去想到自己的系统可能有一天会在跑在几万台的服务器规模上。这里面也有一个架构设计里面的原则,就是要尽量避免过度设计。如果一个几百台服务器规模的公司的运维开发,对他的老板说要做一个系统可以支撑几万台服务器,但因此要多花了多少时间去架构和重构,我想老板会认为自己的运维开发一定是疯了。架构原则之一也是要尽量避免过度设计。

但软件设计依然还是推崇良好的架构、良好的可扩展性。否则架构设计的价值就会打很大的折扣,代码复用和系统实现成本会随着规模的扩大而线性增长。良好的架构可以通过迭代得出之后,反过来指导低阶的系统设计。但低阶的无法预测高阶的。这就是架构的用处之一。所以这里稍后我会介绍一下我对于监控系统架构的一些经验和心得。

一个称职的设计者,是可以站在几百台服务器的规模时,考虑到几千台的情况的。但他考虑几万台的话就有点过度了。这里并非说能支撑几万台的系统架构不优秀。只是如果他不知道,那也没必要过度考虑。如果能提前知道,甄嬛就会说,那显然是极好的。

但很显然需要考虑的内容会越来越多。几十台的时候你可能只需要考虑一个机房了,几百台的时候会有2、3个机房,当几千台的时候可能依然在10个IDC以内,但当几万台的时候很可能已经超过15个IDC了。而且地理位置的分布会更广泛,由此而带来的运营商的覆盖、网络的复杂度、业务的复杂度也会完全不同。非逼着一个运维开发去完全臆想着来做是不现实的。他没有经历过实际的这种需求场景,是没有办法考虑到这样那样的各种问题的。所以我完全理解一些大公司对于开源项目的态度。好一点的可能拿来改改用,进一步可能单独拉一个分支开始改,更甚的就改的完全和主干不一样了 ,其实还有就是自己造轮子的。但有时候就是这样,自己不造轮子,开源的轮子用着的确不好使。

监控的可扩展性

具体到监控系统,可扩展性体现在哪些方面呢?我们从头捋一下。监控系统的输入是监控到的各项监控数据。这些数据经过一系列的处理,最终存储下来用于事后分析和离线分析,同时更主要的作用是要实时的报警。整个这个过程我们可以视为是一个流式计算的过程。说到流式计算其实大家想到的是storm这些。这倒是另外一个我曾经想过的思路,就是把所有处理过程放到strom上去。balabalabala.... 说远了。但我们仔细去看,strom也好,流式计算平台也罢,都是分布式的。分布式架构的一个特性就是良好的扩展性。随着服务器规模的扩大,对于中间的数据处理层的可扩展性要求,就是计算能力要能具备扩展性。简单来说就是数据多了,通过加服务器或者升级服务器就能搞定。

还有几个边界的地方需要把扩展性支持好。第一个就是入口。或者叫做数据的接收口。外面的数据源源不断的进入,如果要想做到扩展性良好,第一个需要考虑的就是接收环节。数据可以走TCP、UDP、SNMP、HTTP等多种协议进入到监控系统。考虑到数万服务器的规模,这个地方比较考验技术底子。如果走SNMP、HTTP当然可以,但这两个协议都走在应用层,必然会带来额外的开销。拿HTTP举例子,我们拿Nginx或者apache做server,其实天然带有可扩展性。数据收到以后,存到一个存储即可(不管这个存储是缓存还是永久存储)。这个过程,不带有状态,所以天然具有可扩展性。一个Nginx实例扛不住了,再来一个,再来一个,再来十个。这样就解决了接口的可扩展问题。

另外一个可扩展是存储环节。这个存储主要是监控数据的持久化存储。前面我们说,数据接收、计算环节都可以通过一些方式支持可扩展。那存储必然会成为一个瓶颈。这个在很多系统里面都是这样,前端可以通过Web Server实现可扩展,但最终大家都跑到一个数据库上读写。哪怕是读写分离的,还是一个主库。主库压力山大。

这个地方我推荐用一些分布式存储来解决这个问题。但不是很推荐mango这种比较奇葩的。因为写入的能力不是很好。虽然它后来又有一些改进方案来缓解这个问题,但注意,只是缓解。

综上,对于可扩展性,我们的思路是:分布式、无状态。

未完待续

时间: 2024-12-11 05:18:51

庖丁解牛之监控系统(二)的相关文章

Zabbix监控系统二:配置邮件报警

在zabbix的使用中,最重要的一点就是完善的报警机制,作为监控平台,需要时刻关注机器和服务的运行状态,更重要的是发现故障之后需要及时的报警给相关人员,早点发现问题,将隐患消除在未然阶段.这样才能保证服务的稳定运行.报警的方式是多种多样的,微信.短信和邮件报警是我们比较常见的方式. 邮件报警的配置主要划分为一下几个步骤: 1.在zabbix服务端配置邮件发送脚本和修改zabbix服务端配置文件; 2.在zabbix前端控制台进行相关设置: 实验环境 Zabbix监控服务器.客户端都已经部署完成,

大数据系统之监控系统(二)Flume的扩展

一些需求是原生Flume无法满足的,因此,基于开源的Flume我们增加了许多功能. EventDeserializer的缺陷 Flume的每一个source对应的deserializer必须实现接口EventDeserializer,该接口定义了readEvent/readEvents方法从各种日志源读取Event. flume主要支持两种反序列化器: (1)AvroEventDeserializer:解析Avro容器文件的反序列化器.对Avro文件的每条记录生成一个flume Event,并将

python-Django监控系统二次开发Nagios

1.Nagios安装 yum install -y nagios.i686 yum install -y nagios-plugins-all.i686 安装完后会在apache的配置文件目录下/etc/httpd/conf.d/产生一个外部的配置文件nagios.conf service httpd start service nagios start default user nagiosadmin password nagiosadmin 2.配置文件生成器 Django前期的收集主机信息

庖丁解牛(一):监控系统

好朋友"雪糕"是前Baidu的高工,当年我们一起参与构建了一个庞大的运维自动化系统Noah.转载一些他的关于监控系统的感悟,我也深有同感. 我们在后来也用Python写了个简易版:51reboot/rebootMon-4 · GitHub 最近借着出去分享的机会,画了张简化的监控系统架构图: 写在前面 我从事运维自动化相关的工作,也已经8年了.当初刚开始做的时候,运维开发(devops)这词还不火.很少人知道.国内对运维的理解,也就是机房.服务器.苦逼的7*24小时值班.甚至当时还流传

Cacti+Nagios监控系统(二):安装Cacti

一.设置mysql,创建Cacti数据库和账号 mysql -u root -p mysql> create database cactidb; mysql> GRANT ALL ON cactidb.* TO [email protected] IDENTIFIED BY '123456'; mysql> flush privileges; mysql> quit 二.安装rrdtool yum -y install rrdtool  rrdtool-devel  rrdtool

Open-falcon运维监控系统——微信接口二次开发

1.Open-falcon运维监控系统简介 OpenFalcon是一款由小米运维团队从互联网公司的需求出发, 根据多年的运维经验,结合市面上使用的一些运维监控系统的使用经验和反馈,开发的一套企业级.高可用.可扩展的开源监控解决方案.简单了使用一下Open-falcon运维监控,结合使用过的zabbix,cacti,nagios来说,觉得有以下几个优点: 支持用户主动push,可以结合一些业务需求采集数据,同时也支持用户自定义的插件. 支持策略模板,模板继承和覆盖,多种告警方式,支持callbac

搭建前端监控系统(二)JS错误日志收集篇

===================代码展示================    监控系统地址: Demo地址                          页面探针代码: GitHub地址             分析后台地址: GitHub地址                        展示平台地址: GitHub地址                        ===================代码展示================ 对于前端应用来说,Js错误的发生直接

开源监控系统中 Zabbix 和 Nagios 哪个更好?

监控平台的话,各有优劣,但基本都可以满足需求.等达到一定监控指标后,发现,最困难的是监控项目的管理. CMDB中小规模(服务器<=1k):Zabbix大规模(1k>=服务器<=10k):Nagios进行二次开发超大规模(服务器>=10k):开发适应自己平台的监控软件吧另推荐个牛逼的东西:http://prometheus.io 作者:好撑链接:https://www.zhihu.com/question/19973178/answer/131911060来源:知乎著作权归作者所有.

zabbix(一):zabbix自动化监控系统搭建详解

一.监控系统机制 1.监控工具工作机制 监控是通过传感器采集数据,在经过数据的存储加工后,进行展示.一般采集的数据为时间序列数据,即随时间变化而动态变化的数据:当采集到的数据超出阈值将会报警.监控功能的实现可基于专用agent.ssh.SNMP协议.IPMI(专业级监控接口IntelligentPlatform Management Interface,指挥平台管理接口) 2.SNMP协议 Simple Network Management Protocol,简单网络管理协议.由一组网络管理的标