构建智能MSA企业系统:原理、实践与应用
构建必要工具
创建项目工具的目的在于构建AI模型、模拟整个ABC - Intelligent - MSA系统,以及收集统计数据并分析系统操作。虽然网上可能有可用工具,但我们选择为特定用例定制简单工具。以下是主要工具:
1.
API流量模拟器
:
simulate_api_rqsts.py
可模拟系统中一个或多个微服务的API请求负载。它能创建多线程API请求,并并行发送到各个目标微服务。API负载以每分钟请求数衡量,请求节奏可均匀或随机。
- 均匀节奏:若配置为每分钟600个API请求,每100ms发送1个API调用。
- 随机节奏:每个API调用在随机时间段
TR
后发送,且
TR
范围为
(1 - 95%)T <= TR <= (1 + 95%)T
,例如每分钟600个请求时,
5 ms <= TR <= 195 ms
。
2.
微服务性能监视器
:
ms_perfmon.py
是一个多线程工具,用于在理想条件模拟期间收集和构建AI训练数据。它向系统中的每个微服务发送并行API调用,并记录API调用超链接、发送日期和时间、接收微服务的响应时间以及HTTP响应代码。每个微服务的统计数据存储在以API链接命名的CSV日志文件中,位于
perfmon_stats
目录下。
3.
响应延迟模拟器
:为模拟延迟响应或有问题的微服务,关键微服务中添加了延迟API调用响应的功能。该功能有最小延迟和最大延迟两个可配置值,当微服务收到API调用时,会在配置的最小和最大延迟之间随机分配一个延迟值,然后等待该时间再响应。
#Simulate a delay if received an API to do so
if delay_max_sec > 0:
delay_seconds = round(delay_min_sec + random.random()*(delay_max_sec - delay_min_sec), 3)
#print("Adding a delay %s ..." %delay_seconds)
time.sleep(delay_seconds)
可使用API调用配置最大和最小延迟响应,例如:
curl http://inventory_ms:8080/api/simulatedelay?min=1500&max=3500
- API响应错误模拟器 :该功能仅用于演示,使用每小时平均HTTP错误这一可配置值。启用后,微服务会随机选择适用的服务器500错误,并以匹配配置错误率的随机节奏响应API请求。可使用API调用配置错误率,例如:
curl http://inventory_ms:8080/api/response_err?rate=5
系统初始化与训练数据构建
系统初始化步骤
-
使用系统的Docker compose文件
abc_msa.yaml初始化MSA系统:
$ docker-compose -f abc_msa.yaml up &
-
启用Docker的API远程管理:
-
在Ubuntu系统上,使用
vi、vim等工具编辑/lib/systemd/system/docker.service文件。 -
找到
ExecStart条目并修改为:
-
在Ubuntu系统上,使用
ExecStart=/usr/bin/dockerd -H=fd:// -H=tcp://0.0.0.0:2375
3. 保存文件。
4. 重新加载Docker引擎:
systemctl daemon-reload
5. 验证Docker引擎是否正常响应API调用:
curl http://localhost:8080/version
构建和使用训练数据
-
使用
ms_perfmon工具在<ms_perfmon's working path>/perfmon_stats目录下为每个微服务创建单独的统计文件。建议至少收集48小时的训练数据,理想情况下应考虑季节性负载。 -
运行
training_data_cleanup.py工具检测异常值并清理性能数据:
python training_data_cleanup.py
- 编写Python代码训练PBW:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
# 读取数据
payment_ms_stats_df = pd.read_csv('scrubbed_stats/payment_ms_stats.csv')
# 提取要预测的列
payment_ms_rt = np.array(payment_ms_stats_df['response_time'])
# 加载其余性能数据列
model_data = payment_ms_stats_df.drop('response_time', axis = 1)
model_data = np.array(model_data)
# 划分训练和测试数据
model_data_train, model_data_test, payment_ms_rt_train, payment_ms_rt_test = train_test_split(model_data, payment_ms_rt, test_size = 0.20, shuffle=True)
# 构建模型
lr_model = LinearRegression()
lr_model.fit(model_data_train, payment_ms_rt_train);
# 保存数据到CSV文件
trend_payment_ms_rt_predictions = lr_model.predict(payment_ms_rt)
df = payment_ms_rt_df.assign(predicted_payment_ms_rt = trend_payment_ms_rt_predictions)
df.to_csv("predicted_payment_ms_rt_trend.csv", mode = 'w', index=False)
系统初始化流程图
graph LR
A[开始] --> B[使用abc_msa.yaml初始化系统]
B --> C[启用Docker API远程管理]
C --> D[编辑docker.service文件]
D --> E[修改ExecStart条目]
E --> F[保存文件]
F --> G[重新加载Docker引擎]
G --> H[验证Docker引擎响应]
H --> I[系统运行收集训练数据]
模拟ABC - Intelligent - MSA的操作
使用
docker-compose
重新初始化系统,使用
abc_intelligent_msa.yaml
文件:
$ docker-compose -f abc_intelligent_msa.yaml up &
该文件包含AI服务的初始化。系统运行后,AI工具会监控和收集微服务性能,当检测到系统问题且指标超过配置的性能阈值时触发修复操作。可使用
simulate_api_rqsts
API流量模拟器和响应延迟模拟器模拟生产流量,必要时使用API响应错误模拟器模拟HTTP错误。
PBW的实际应用
监控与预警
在训练期间,PBW构建了AI模型并计算了ABC - Intelligent - MSA系统中每个微服务的预期响应时间。例如,在正常系统负载下,库存微服务的平均响应时间约为20ms。我们配置PBW的警告阈值为250ms,行动阈值为750ms。通过
simulate_api_rqsts
增加库存微服务的API调用负载,并使用响应延迟模拟器添加延迟,观察PBW的反应。当响应时间持续超过250ms但低于750ms时,PBW会触发黄色警报并发送到NMS/OSS系统。
自我修复操作
当响应时间持续超过750ms时,PBW会发送红色警报到NMS/OSS系统,并采取自我修复操作。在我们的演示系统中,仅配置了在微服务出现问题时重启微服务容器。PBW会锁定库存微服务,避免与其他AI服务的修复操作冲突,然后向Docker引擎发送重启API调用,验证微服务是否恢复正常,最后解锁微服务。
# 重启Docker容器
POST /containers/<container id or name>/restart?t=10
PBW操作流程图
graph LR
A[开始监控] --> B[检测响应时间]
B --> C{响应时间 > 250ms?}
C -- 是 --> D{响应时间 > 750ms?}
C -- 否 --> B
D -- 是 --> E[发送红色警报]
D -- 否 --> F[发送黄色警报]
E --> G[锁定微服务]
G --> H[发送重启API调用]
H --> I[验证微服务状态]
I --> J[解锁微服务]
F --> B
通过以上步骤和工具,我们可以构建一个智能的MSA企业系统,实现系统的监控、预警和自我修复功能。在实际应用中,可根据具体需求进一步优化和扩展系统,以应对不同的业务场景和挑战。
自我修复效果验证与深入分析
自我修复效果评估
在PBW触发自我修复操作后,我们需要验证其是否有效解决了库存微服务的问题。通过查看PBW的性能日志,我们可以对比修复前后的响应时间。在修复前,库存微服务的响应时间持续超过1秒,而修复后,响应时间下降到了最高170ms。虽然没有恢复到问题出现前的水平,但为微服务争取了一定的缓冲空间。
以下是修复前后性能日志的对比:
| 时间 | 修复前响应时间 | 修复后响应时间 |
| ---- | ---- | ---- |
| 2022 - 11 - 23 18:30:16.334608 | 1.326528787612915 | 0.1380960941314697 |
| 2022 - 11 - 23 18:30:27.629649 | 1.4279899597167969 | 0.1693825721740723 |
| 2022 - 11 - 23 18:30:38.486793 | 1.0108487606048584 | 0.1700718116760254 |
潜在问题与解决方案
虽然本次自我修复操作取得了一定的效果,但如果底层问题没有得到妥善解决,性能问题可能会再次出现。在实际应用中,我们可以根据不同的问题场景采取不同的解决方案:
1.
高API请求负载导致的性能问题
:当性能问题是由于API请求负载过高引起时,最恰当的修复操作是首先尝试扩展微服务,并分配更多的资源来响应高流量的API请求。
2.
未知原因导致的服务不稳定
:如本次模拟中库存微服务出现的问题,可能是由一些不可预见的因素导致服务不稳定,无法及时处理API调用。在这种情况下,重启微服务可能是一个有效的解决方案。
自我修复效果验证流程图
graph LR
A[触发自我修复操作] --> B[等待修复完成]
B --> C[收集修复后性能数据]
C --> D[对比修复前后响应时间]
D --> E{响应时间是否改善?}
E -- 是 --> F[确认修复有效]
E -- 否 --> G[分析潜在问题]
G --> H[采取进一步解决方案]
H --> B
系统扩展与优化建议
扩展AI服务功能
随着业务的发展,我们可能需要扩展系统的AI功能,以满足不同的需求和用例。例如,增加更多的AI服务来进行性能统计收集、异常检测和预测分析等。为了避免随着收集器数量的增加而出现可扩展性问题,我们可以将
ms_perfmon
功能扩展为MSA系统中所有AI或非AI服务的主要AI收集器。
优化系统配置
为了提高系统的性能和稳定性,我们可以对系统的配置进行优化。例如,调整API流量模拟器的请求节奏、优化PBW和PAD的性能阈值配置等。同时,我们还可以使用更安全的方式来模拟延迟,如使用安全的配置文件或本地参数。
系统扩展与优化步骤
-
扩展AI服务功能
:
- 分析业务需求,确定需要增加的AI服务功能。
-
扩展
ms_perfmon功能,使其成为主要的AI收集器。 - 开发和集成新的AI服务。
-
优化系统配置
:
- 调整API流量模拟器的请求节奏,根据实际情况选择均匀或随机节奏。
- 优化PBW和PAD的性能阈值配置,根据系统的历史数据和业务需求进行调整。
- 使用安全的配置文件或本地参数来模拟延迟,提高系统的安全性。
系统扩展与优化流程图
graph LR
A[分析业务需求] --> B[扩展AI服务功能]
B --> C[扩展ms_perfmon功能]
C --> D[开发和集成新AI服务]
A --> E[优化系统配置]
E --> F[调整API流量模拟器节奏]
F --> G[优化性能阈值配置]
G --> H[使用安全方式模拟延迟]
D --> I[系统测试与验证]
H --> I
I --> J[系统上线运行]
总结
通过构建必要的工具、初始化系统、模拟生产操作和验证自我修复效果,我们成功构建了一个智能的MSA企业系统。该系统能够实现系统的监控、预警和自我修复功能,提高系统的性能和稳定性。在实际应用中,我们可以根据具体需求进一步扩展和优化系统,以应对不同的业务场景和挑战。同时,我们还需要不断地收集和分析系统的性能数据,及时调整系统的配置和策略,以确保系统始终保持最佳的运行状态。
超级会员免费看

被折叠的 条评论
为什么被折叠?



