Skip to content

Commit

Permalink
增加压力机动态配置项
Browse files Browse the repository at this point in the history
  • Loading branch information
wangjiawei committed Mar 23, 2023
1 parent 57e91e0 commit e84d7e4
Show file tree
Hide file tree
Showing 17 changed files with 504 additions and 131 deletions.
109 changes: 57 additions & 52 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,55 +81,60 @@ canUsePartitionTotalNum: 2 #初始化压力机可使用分区
## 开源部署
1. 配置环境变量
## 配置说明
| key | 是否必填 | 默认值 | 说明 |
|:------------------------------|-----|----------------------------------------------------|----------------:|
| 本机配置 ||||
| RG_IS_DEBUG || false | 是否开启debug |
| RG_DOMAIN || | RunnerGo项目入口地址 |
| RG_MANAGEMENT_HTTP_PORT || 30000 | manage项目端口号 |
| Mysql数据库 ||||
| RG_MYSQL_HOST || 127.0.0.0 | Mysql数据库地址 |
| RG_MYSQL_USERNAME || root | Mysql用户名称 |
| RG_MYSQL_PASSWORD || | Mysql密码 |
| RG_MYSQL_DBNAME || runnergo | Mysql数据库名称 |
| RG_MYSQL_CHARSET || utf8mb4 | Mysql字符集 |
| RG_MYSQL_PORT || 3306 | Mysql端口号 |
| JWT网络令牌 ||||
| RG_JWT_ISSUER || RunnerGo | JWT账号 |
| RG_JWT_SECRET || RunnerGo#docker | JWT密钥 |
| mongo数据库 ||||
| RG_MONGO_DSN || mongodb://runnergo:123456@127.0.0.0:27017/runnergo | mongo数据库dsn |
| RG_MONGO_DATABASE || runnergo | mongo使用数据库名称 |
| RG_MONGO_PASSWORD || | mongo数据库密码 |
| RG_MONGODB_POOL_SIZE || 20 | mongo数据库密码 |
| engine服务接口 | | | |
| RG_CLIENTS_ENGINE_RUN_API || https://127.0.0.0:30000/runner/run_api | engine服务-调试接口 |
| RG_CLIENTS_ENGINE_RUN_SCENE || https://127.0.0.0:30000/runner/run_scene | engine服务-调试场景 |
| RG_CLIENTS_ENGINE_STOP_SCENE || https://127.0.0.0:30000/runner/stop_scene | engine服务-停止调试场景 |
| RG_CLIENTS_ENGINE_RUN_PLAN || https://127.0.0.0:30000/runner/run_plan | engine服务-运行计划 |
| RG_CLIENTS_ENGINE_STOP_PLAN || https://127.0.0.0:30000/runner/stop | engine服务-停止计划 |
| proof日志目录 ||||
| RG_PROOF_INFO_LOG || /data/logs/RunnerGo/RunnerGo_management-info.log | proof-操作日志地址 |
| RG_PROOF_ERR_LOG || /data/logs/RunnerGo/RunnerGo_management-err.log | proof-错误日志地址 |
| Redis ||||
| RG_REDIS_ADDRESS || 默认:127.0.0.0:6379 | redis服务端地址 |
| RG_REDIS_PASSWORD || | redis服务端密码 |
| RG_REDIS_DB || 默认:0 | redis数据库 |
| Redis-报告专属redis ||||
| RG_REDIS_REPORT_ADDRESS || 默认:127.0.0.0:6379 | redis服务端地址 |
| RG_REDIS_REPORT_PASSWORD || | redis服务端密码 |
| RG_REDIS_REPORT_DB || 默认:0 | redis数据库 |
| SMTP-邮件配置 ||||
| RG_SMTP_HOST || | 邮件服务地址 |
| RG_SMTP_PORT || | 邮件服务端口号 |
| RG_SMTP_EMAIL || | 邮箱名称 |
| RG_SMTP_PASSWORD || | 邮箱名称 |
| 邀请链接验证密钥 ||||
| RG_INVITE_DATA_AES_SECRET_KEY || qazwsxedcrfvtgby | 邀请链接验证密钥(key 长度必须 16/24/32长度) |
| 普通日志目录 ||||
| RG_LOG_INFO_PATH || /data/logs/RunnerGo/RunnerGo_management-info.log | 操作日志地址 |
| RG_LOG_ERR_PATH || /data/logs/RunnerGo/RunnerGo_management-err.log | 错误日志地址 |
| 初始化压力机可使用分区 ||||
| RG_CAN_USE_PARTITION_TOTAL_NUM || 2 | 初始化压力机可使用分区 |
| 单台压力机能快速负载的并发数 ||||
| RG_ONE_MACHINE_CAN_CONCURRENCE_NUM || 5000 | 单台压力机能快速负载的并发数 |
| key | 是否必填 | 默认值 | 说明 |
|:-----------------------------------|-----|----------------------------------------------------|----------------:|
| 本机配置 ||||
| RG_IS_DEBUG || false | 是否开启debug |
| RG_DOMAIN || | RunnerGo项目入口地址 |
| RG_MANAGEMENT_HTTP_PORT || 30000 | manage项目端口号 |
| Mysql数据库 ||||
| RG_MYSQL_HOST || 127.0.0.0 | Mysql数据库地址 |
| RG_MYSQL_USERNAME || root | Mysql用户名称 |
| RG_MYSQL_PASSWORD || | Mysql密码 |
| RG_MYSQL_DBNAME || runnergo | Mysql数据库名称 |
| RG_MYSQL_CHARSET || utf8mb4 | Mysql字符集 |
| RG_MYSQL_PORT || 3306 | Mysql端口号 |
| JWT网络令牌 ||||
| RG_JWT_ISSUER || RunnerGo | JWT账号 |
| RG_JWT_SECRET || RunnerGo#docker | JWT密钥 |
| mongo数据库 ||||
| RG_MONGO_DSN || mongodb://runnergo:123456@127.0.0.0:27017/runnergo | mongo数据库dsn |
| RG_MONGO_DATABASE || runnergo | mongo使用数据库名称 |
| RG_MONGO_PASSWORD || | mongo数据库密码 |
| RG_MONGODB_POOL_SIZE || 20 | mongo数据库密码 |
| engine服务接口 | | | |
| RG_CLIENTS_ENGINE_RUN_API || https://127.0.0.0:30000/runner/run_api | engine服务-调试接口 |
| RG_CLIENTS_ENGINE_RUN_SCENE || https://127.0.0.0:30000/runner/run_scene | engine服务-调试场景 |
| RG_CLIENTS_ENGINE_STOP_SCENE || https://127.0.0.0:30000/runner/stop_scene | engine服务-停止调试场景 |
| RG_CLIENTS_ENGINE_RUN_PLAN || https://127.0.0.0:30000/runner/run_plan | engine服务-运行计划 |
| RG_CLIENTS_ENGINE_STOP_PLAN || https://127.0.0.0:30000/runner/stop | engine服务-停止计划 |
| proof日志目录 ||||
| RG_PROOF_INFO_LOG || /data/logs/RunnerGo/RunnerGo_management-info.log | proof-操作日志地址 |
| RG_PROOF_ERR_LOG || /data/logs/RunnerGo/RunnerGo_management-err.log | proof-错误日志地址 |
| Redis ||||
| RG_REDIS_ADDRESS || 默认:127.0.0.0:6379 | redis服务端地址 |
| RG_REDIS_PASSWORD || | redis服务端密码 |
| RG_REDIS_DB || 默认:0 | redis数据库 |
| Redis-报告专属redis ||||
| RG_REDIS_REPORT_ADDRESS || 默认:127.0.0.0:6379 | redis服务端地址 |
| RG_REDIS_REPORT_PASSWORD || | redis服务端密码 |
| RG_REDIS_REPORT_DB || 默认:0 | redis数据库 |
| SMTP-邮件配置 ||||
| RG_SMTP_HOST || | 邮件服务地址 |
| RG_SMTP_PORT || | 邮件服务端口号 |
| RG_SMTP_EMAIL || | 邮箱名称 |
| RG_SMTP_PASSWORD || | 邮箱名称 |
| 邀请链接验证密钥 ||||
| RG_INVITE_DATA_AES_SECRET_KEY || qazwsxedcrfvtgby | 邀请链接验证密钥(key 长度必须 16/24/32长度) |
| 普通日志目录 ||||
| RG_LOG_INFO_PATH || /data/logs/RunnerGo/RunnerGo_management-info.log | 操作日志地址 |
| RG_LOG_ERR_PATH || /data/logs/RunnerGo/RunnerGo_management-err.log | 错误日志地址 |
| 初始化压力机可使用分区 ||||
| RG_CAN_USE_PARTITION_TOTAL_NUM || 2 | 初始化压力机可使用分区 |
| 压力机相关配置 ||||
| RG_ONE_MACHINE_CAN_CONCURRENCE_NUM || 5000 | 单台压力机能快速负载的并发数 |
| RG_MACHINE_ALIVE_TIME || 10 | 压力机上报心跳超时时间,单位:秒 |
| RG_INIT_PARTITION_TOTAL_NUM || 2 | 初始化可用kafka分区数量设置 |
| RG_CPU_TOP_LIMIT || 65 | 可参与压测的压力机cpu使用率上限 |
| RG_MEMORY_TOP_LIMIT || 65 | 可参与压测的压力机memory使用率上限 |
| RG_DISK_TOP_LIMIT || 55 | 可参与压测的压力机disk使用率上限 |
8 changes: 8 additions & 0 deletions configs/dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,11 @@ canUsePartitionTotalNum: 2

#单台压力机能快速负载的并发数
oneMachineCanConcurrenceNum: 5000

#运行计划相关配置
machineConfig:
MachineAliveTime: 10 # 压力机上报心跳超时时间,单位:秒
InitPartitionTotalNum: 2 # 初始化可用kafka分区数量设置
CpuTopLimit: 65 # 可参与压测的压力机cpu使用率上限
MemoryTopLimit: 65 # 可参与压测的压力机memory使用率上限
DiskTopLimit: 55 # 可参与压测的压力机disk使用率上限
10 changes: 9 additions & 1 deletion configs/prd.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,12 @@ inviteData:
canUsePartitionTotalNum: 2

#单台压力机能快速负载的并发数
oneMachineCanConcurrenceNum: 5000
oneMachineCanConcurrenceNum: 5000

#运行计划相关配置
machineConfig:
MachineAliveTime: 10 # 压力机上报心跳超时时间,单位:秒
InitPartitionTotalNum: 2 # 初始化可用kafka分区数量设置
CpuTopLimit: 65 # 可参与压测的压力机cpu使用率上限
MemoryTopLimit: 65 # 可参与压测的压力机memory使用率上限
DiskTopLimit: 55 # 可参与压测的压力机disk使用率上限
10 changes: 9 additions & 1 deletion configs/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,12 @@ inviteData:
canUsePartitionTotalNum: 2

#单台压力机能快速负载的并发数
oneMachineCanConcurrenceNum: 5000
oneMachineCanConcurrenceNum: 5000

#运行计划相关配置
machineConfig:
MachineAliveTime: 10 # 压力机上报心跳超时时间,单位:秒
InitPartitionTotalNum: 2 # 初始化可用kafka分区数量设置
CpuTopLimit: 65 # 可参与压测的压力机cpu使用率上限
MemoryTopLimit: 65 # 可参与压测的压力机memory使用率上限
DiskTopLimit: 55 # 可参与压测的压力机disk使用率上限
2 changes: 0 additions & 2 deletions internal/pkg/biz/consts/machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,4 @@ const (

StressBelongPartitionKey = "StressBelongPartition" // 压力机对应已经使用的分区数据前缀
TotalKafkaPartitionKey = "TotalKafkaPartition"

InitPartitionTotalNum = 2 // 初始化总共可使用的分区上限数量
)
2 changes: 0 additions & 2 deletions internal/pkg/biz/consts/report.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ const (
ReportStatusNormal = 1
ReportStatusFinish = 2

// report使用的kafka分区数量
KafkaReportPartitionNum = 10
// kafka全局的报告分区key名
KafkaReportPartition = "kafka:report:partition"
)
93 changes: 70 additions & 23 deletions internal/pkg/conf/conf.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,37 @@ import (
var Conf Config

type Config struct {
Base Base `yaml:"base"`
Http Http `yaml:"http"`
GRPC GRPC `yaml:"grpc"`
MySQL MySQL `yaml:"mysql"`
JWT JWT `yaml:"jwt"`
MongoDB MongoDB `yaml:"mongodb"`
Prometheus Prometheus `yaml:"prometheus"`
Kafka Kafka `yaml:"kafka"`
ES ES `yaml:"es"`
Clients Clients `yaml:"clients"`
Proof Proof `yaml:"proof"`
Redis Redis `yaml:"redis"`
RedisReport RedisReport `yaml:"redisReport"`
SMTP SMTP `yaml:"smtp"`
Sms Sms `yaml:"sms"`
InviteData inviteData `yaml:"inviteData"`
Log Log `yaml:"log"`
Pay Pay `yaml:"pay"`
GeeTest GeeTest `yaml:"geeTest"`
WechatLogin WechatLogin `yaml:"wechatLogin"`
CanUsePartitionTotalNum int `yaml:"canUsePartitionTotalNum"`
OneMachineCanConcurrenceNum int `yaml:"oneMachineCanConcurrenceNum"`
Base Base `yaml:"base"`
Http Http `yaml:"http"`
GRPC GRPC `yaml:"grpc"`
MySQL MySQL `yaml:"mysql"`
JWT JWT `yaml:"jwt"`
MongoDB MongoDB `yaml:"mongodb"`
Prometheus Prometheus `yaml:"prometheus"`
Kafka Kafka `yaml:"kafka"`
ES ES `yaml:"es"`
Clients Clients `yaml:"clients"`
Proof Proof `yaml:"proof"`
Redis Redis `yaml:"redis"`
RedisReport RedisReport `yaml:"redisReport"`
SMTP SMTP `yaml:"smtp"`
Sms Sms `yaml:"sms"`
InviteData inviteData `yaml:"inviteData"`
Log Log `yaml:"log"`
Pay Pay `yaml:"pay"`
GeeTest GeeTest `yaml:"geeTest"`
WechatLogin WechatLogin `yaml:"wechatLogin"`
CanUsePartitionTotalNum int `yaml:"canUsePartitionTotalNum"`
OneMachineCanConcurrenceNum int `yaml:"oneMachineCanConcurrenceNum"`
MachineConfig MachineConfig `yaml:"machineConfig"`
}

type MachineConfig struct {
MachineAliveTime int `yaml:"MachineAliveTime"`
InitPartitionTotalNum int `yaml:"InitPartitionTotalNum"`
CpuTopLimit int `yaml:"CpuTopLimit"`
MemoryTopLimit int `yaml:"MemoryTopLimit"`
DiskTopLimit int `yaml:"DiskTopLimit"`
}

type Log struct {
Expand Down Expand Up @@ -187,6 +196,7 @@ func MustInitConfByEnv() {
initLog()
initCanUsePartitionTotalNum()
initOneMachineCanConcurrenceNum()
initMachineConfig()
}

func initBase() {
Expand Down Expand Up @@ -332,7 +342,7 @@ func initSMTP() {
if err != nil {
Conf.SMTP.Port = 465
} else {
Conf.RedisReport.DB = port
Conf.SMTP.Port = port
}
Conf.SMTP.Email = os.Getenv("RG_SMTP_EMAIL")
Conf.SMTP.Password = os.Getenv("RG_SMTP_PASSWORD")
Expand Down Expand Up @@ -381,3 +391,40 @@ func initOneMachineCanConcurrenceNum() {
Conf.OneMachineCanConcurrenceNum = oneMachineCanConcurrenceNum
}
}

func initMachineConfig() {
machineAliveTime, err := strconv.Atoi(os.Getenv("RG_MACHINE_ALIVE_TIME"))
if err != nil {
Conf.MachineConfig.MachineAliveTime = 10
} else {
Conf.MachineConfig.MachineAliveTime = machineAliveTime
}

initPartitionTotalNum, err := strconv.Atoi(os.Getenv("RG_INIT_PARTITION_TOTAL_NUM"))
if err != nil {
Conf.MachineConfig.InitPartitionTotalNum = 2
} else {
Conf.MachineConfig.InitPartitionTotalNum = initPartitionTotalNum
}

cpuTopLimit, err := strconv.Atoi(os.Getenv("RG_CPU_TOP_LIMIT"))
if err != nil {
Conf.MachineConfig.CpuTopLimit = 65
} else {
Conf.MachineConfig.CpuTopLimit = cpuTopLimit
}

memoryTopLimit, err := strconv.Atoi(os.Getenv("RG_MEMORY_TOP_LIMIT"))
if err != nil {
Conf.MachineConfig.MemoryTopLimit = 65
} else {
Conf.MachineConfig.MemoryTopLimit = memoryTopLimit
}

diskTopLimit, err := strconv.Atoi(os.Getenv("RG_DISK_TOP_LIMIT"))
if err != nil {
Conf.MachineConfig.DiskTopLimit = 55
} else {
Conf.MachineConfig.DiskTopLimit = diskTopLimit
}
}
2 changes: 1 addition & 1 deletion internal/pkg/handler/machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ func InitTotalKafkaPartition() {

//组装总共需要初始化的分区数组
canUsePartitionTotalNum := conf.Conf.CanUsePartitionTotalNum
totalKafkaPartitionArr := make([]interface{}, 0, consts.InitPartitionTotalNum)
totalKafkaPartitionArr := make([]interface{}, 0, conf.Conf.MachineConfig.InitPartitionTotalNum)
for i := 0; i < canUsePartitionTotalNum; i++ {
if _, ok := usedPartitionMap[i]; !ok {
totalKafkaPartitionArr = append(totalKafkaPartitionArr, i)
Expand Down
Loading

0 comments on commit e84d7e4

Please sign in to comment.