大型网站架构的技术细节:云计算服务架构监控软件的构造

大型网站架构的技术细节:云计算服务架构监控软件的构造监控软件的构造监控软件构造的目的是监控和启动同一服务器的云计算服务软件。另外,构造监控软件的同时,也需要确保监控软件本身能正常运行。本节将从两个

监控软件的构造

监控软件构造的目的是监控和启动同一服务器的云计算服务软件。

另外,构造监控软件的同时,也需要确保监控软件本身能正常运行。本节将从两个方面进行深入讲解:软件构造和Supervisor。

软件结构

监控软件启动云计算服务软件是以自身服务器的能力为依据的,与任务池积压的任务个数无关。另外,同一服务器只运行一种云计算服务软件(方便管理)。如果同一服务器需要运行多种云计算服务软件,则需要多个监控软件进行管理(监控软件是同一个,配置文件有区别),一个监控软件管理一种云计算服务软件。

监控软件其实是一个比较简单的定时任务软件,不需要复杂的线程模型和逻辑,它只需要4个任务即可。

·监控软件需要有配置文件,配置文件记录云计算服务软件最大的CPU和内存使用率、最大程序运行个数、判定异常的超时时长及云计算服务软件启动的参数模板。

·当所有云计算服务软件处于运行状态(都在执行任务)或没有运行中的云计算服务软件时(初始状态),监控软件根据具体情况(当前CPU和内存使用率、配置的最大云计算服务软件个数),决定是否启动新的云计算服务软件。

·监控软件启动云计算服务软件时,通过命令行参数给启动的云计算服务软件设置参数。

·监控软件通过状态数据池监控云计算服务软件,对异常的云计算服务软件进行清理。

根据以上任务描述,监控软件的主逻辑如图5.32所示。

大型网站架构的技术细节:云计算服务架构监控软件的构造

图5.32 监控软件的主逻辑

监控列表用于记录本服务器正在运行的云计算服务软件的进程ID、上次更新时间、系统资源使用率等信息。异常云计算服务软件的判断,是根据状态数据是否长期未更新判断的(与设置的超时时长对比)。是否启动新的云计算服务软件,是根据配置的最大进程数是否已达到、是否还存在空闲的云计算服务软件、当前CPU和内存负荷是否能支撑新的云计算服务软件(根据记录的最大内存和CPU使用率判断)等因素决定的。在一个任务周期内,最多只创建一个新的云计算服务软件,防止过多云计算服务软件的出现。

以上提到的监控列表与监控软件配置的数据格式一般为JSON或哈希表,这样能做到灵活配置。监控列表是监控软件中的数据结构,一般是通用的,但如果需要适配某些特殊场景,则需要修改监控软件。监控软件的配置文件需要根据所监控的具体云计算服务软件类型而修改。监控列表与监控软件配置文件的示例如代码5.28所示。

代码5.28 监控列表与监控软件配置文件示例

//监控列表

{

“身份ID” : {

“pid” : “进程ID”,

“timestamp” : “上次更新状态的时间”,

“maxMemory” : “该进程最大内存使用率”,

“maxCpu” : “该进程最大CPU使用率”,

“其他数据” : “”,

}

}

//监控软件配置

{

“自身设置” : {

“name” : “监控软件标识(唯一)”,

“logRoot” : “日志文件路径”,

“statePool” : “数据池相关连接配置”,

“intervalTime” : “定时任务间隔时间”,

“watchDogDeathTime” : “判定异常的超时时长”,

“theoreticalMemory” : “云计算服务软件理论内存使用率,用于初始化信息”,

“theoreticalCpu” : “云计算服务软件理论CPU使用率,用于初始化信息”,

“limitFreeNum” : “最多空闲的云计算服务软件进程的个数”,

“limitNum” : “启动云计算服务软件进程的最多个数”

“其他设置” : “”,

},

“云计算服务软件启动参数的模板”:{

“通用设置” : {

“identity” : “身份ID,启动时生成”,

“loop” : “云计算服务软件执行多少次任务后自动消亡”,

“其他设置” : “”,

},

“任务获取部分的设置”:{

“任务池相关配置” : “”,

},

“变更指令获取部分的设置”:{

“专属的消息队列名称” : “启动时生成”,

“指令池其他配置” : “”,

},

“汇报部分的设置”:{“progress_fieldname”:”altair.progress.mission”,

“watchdog_fieldname”:”altair.watchdog-+IP”,

“intervalTime” : “定时汇报间隔时间”,

“watchdog_keyname” : “状态数据池的标识”,

“watchdog_fieldname” : “身份ID”,

“状态数据池其他配置” : “”,

“进度数据池相关配置” : “”,

},

“任务执行部分的设置”:{

}

}

}

监控软件是一个简单的软件,为了让其快速开发和便于修改(适配某些特殊要求),监控软件最好是一个脚本,而Python对于简单脚本的开发是具有优势的,所以这里选用Python作为开发语言。监控软件的重点操作代码如代码5.29所示。

说明:开发语言的选择一般取决于软件的应用场景、软件的规模、开发语言的擅长领域及开发团队的偏好等。

代码5.29 监控软件的相关代码

//状态数据池获取状态数据(Redis 操作)

import redis //引用redis模块

statePoolKey = ‘此监控软件对应的进度数据池标识’

//连接状态数据池

redisPool = redis.ConnectionPool(host= ‘IP地址’, port=’端口’, password=

‘端口’)

connection = redis.Redis(connection_pool = redisPool)

//从状态数据池中获取此监控软件监控的所有身份ID(获取哈希表的所有键)

result = connection.hkeys(statePoolKey)

//从状态数据池中获取指定云计算服务软件的运行状态(获取哈希表的值)

result = connection.hget(statePoolKey, key)

//从状态数据池中删除指定云计算服务软件的状态信息(删除哈希表的值)

result = connection.hdet(statePool, key)

//进程相关

//启动一个云计算服务软件

import subprocess //引用subprocess模块

item = subprocess.Popen(‘云计算服务软件地址 命令行参数’, shell=True)

item.pid //启动的进程ID

//终止进程import os,signal //引用os、singal模块

os.kill(‘进程ID’, signal.SIGKILL)

//内存使用率、CPU使用率相关

import psutil //引用psutil模块

//获取单个进程的内存使用率和CPU使用率

process = psutil.Process(‘进程ID’)

cpuRate = process.cpu_percent(None) //单个进程的CPU使用率

memoryRate = process.cpu_percent(None) //单个进程的内存使用率

//获取服务器当前内存使用率和CPU使用率

cpuUsage = psutil.cpu_percent(None) //服务器当前CPU使用率

memoryUsage = psutil.virtual_memory().percent //服务器当前内存使用率

Supervisor监控软件

Supervior是一个通用的进程管理软件,它能让一个程序以后台进程的方式运行,并实时监控该进程的状态。

如果所监控的进程异常退出,则该程序会自动重新启动。监控软件可以交由Supervisor管理,这样就能确保监控软件正常运行。那么,为什么不使用Supervisor作为云计算服务软件的监控软件呢?这是因为云计算服务软件运行的个数是需要根据服务器性能作动态调整的,而Supervisor只能确保程序持续运行。

以CentOS为例,Supervisor的相关操作如代码5.30所示,其中包括Supervisor的安装、Supervisor的相关命令以及Supervisor对监控软件的管理设置。

说明:Supervisor只能在Linux系统(CentOS、Ubuntu等)上运行,无法运行在Windows系统上。另外,Supervisor是使用Python编写的,需要依赖Python的运行环境。

代码5.30 Supervisor的相关操作

//Supervisor的安装,依赖Python运行环境

yum install epel-release

yum install supervisor

//Supervior相关命令

systemctl enable supervisord.service #开机启动

systemctl start supervisord.service #启动Supervisor

systemctl stop supervisord.service #停止Supervisor

systemctl status supervisord.service #查看Supervisor状态

//Supervisor对监控软件的管理设置

//在Supervisor的配置路径(/etc/supervisord.d/)中创建一个配置文件,如

mission.ini

//Supervisor启动时会自动扫描该配置路径中的所有配置文件,一个程序对应一个配置

文件

//向新创建的配置文件中写入以下内容

[program:mission] ;程序的名称

directory=/run/mission ;命令执行的目录

;监控软件的启动命令command=python3.6 /run/mission/moniter.py config.json

autostart=true ;自动启动

autorestart=true ;异常退出时自动重启

startsecs=1 ;自动重启间隔

user=root ;启动进程的用户

stderr_logfile=/log/supervisor/moniter_error.log ;错误日志目录

stdout_logfile=/log/supervisor/moniter.log ;标准日志目录

小结

云计算服务部分不是每个网站系统都需要的,而且由于其应用场景的复杂性,云计算服务部分的框架没有像Spring Boot一样的成熟框架。

但随着网站系统的运营发展,现成的第三方云计算服务终将会成为发展的瓶颈(很难与同行对手拉开差距)。因此,云计算服务部分是一个大型网站系统的核心,是与同行对手拉开服务优势的强有力手段。而拥有一套稳定的云计算服务框架,无疑会成为大型网站系统强大的后盾。

本文还原了一个通用的云计算服务框架的设计与实现,其中包括云计算服务软件的基础框架构建、任务池与指令池的搭建与使用、进度数据池与状态数据池的搭建与使用,以及监控软件的构造。当然,这个通用的云计算服务框架不是唯一的实现形式,还是需要根据实际情况斟酌参考。

截至本章,已经把前端架构、后端架构、云计算服务架构都介绍完了。

不过,做好了这三部分不等于做好了整个系统,要想做好整个系统,还需要考虑整体架构。

本文给大家讲解的内容是云计算服务架构监控软件的构造

  1. 下篇文章给大家讲解的内容是云计算服务整体架构:网站系统的基本结构
  2. 感谢大家的支持!

今天的文章大型网站架构的技术细节:云计算服务架构监控软件的构造分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/7872.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注