概述
// HBTEntry属性包含type, data(应用相关数据),timestamp
1.3 HBT上报池为客户端维护的数组,数组大小默认1024, 值域[512-2048]
1.3.1报警机制: 如果HBT上报池的大小超过数组大小的90%则记录一条errorlog
1.3.2容错机制: 客户端检测上报池超出1024不再存储, 并记录一条errorlog
1.4 每次发生HBT时 , 检查上报池中的数据,并从上报池中取出需要处理的数据(上限100条), 根据与服务端协议的数据结构构建出需要上报的数据格式和请求头信息上报服务端,成功后清除已上报的数据, 如失败则等待下一次HBT请求
请求头大小由服务端web server配置文件决定, 默认16k
请求头信息
{
"vresion":"1",
“system_config_version”:”1”, // 系统配置项版本
“user_config_version”:”1”, // 用户配置项版本
“user_config_data”:”{}”, // 用户配置项数据
“system_config_data”:”{}”, // 系统配置想数据
“report_count”:100, // 上报数据条数,可用来观察客户端HBT数据产生是否异常
“queue_count”:24, // 客户端队列中数据的条数,可用来观察客户端HBT数据产生是否异常
“device_info”:”{}”, // 用户环 境信息
“spare”:” string” // 保留字段
}
2.1 服务端根据HBT请求头中的用户配置项版本号判断是否需要更新用户配置项
2.2 每一次的HBT,同步更新用户环境信息和最后登录时间.
2.3通过HBT上报的report_count和queue_count判断客户端请求池的大小是否异常(超过90%), 如果有异常则记录一条log到表中
2.4客户端上报数据
{
"data":[
{
“type”:”error_info”,
"data":[
{
"type":"breakdown",
"info":"...",
"uid":123123123,
"nickname":"张三",
"mobile":13838384438
"device_type":"iOS",
"device_model":"iPhone 6",
"device_version":"9.3.2",
"network":"wifi",
“timestamp”:13244444444
}
]
}
]
}
2.5 客户端上报给服务端的数据直接存储到HBT表,根据HBTEntry的type由指定的守护进程去处理.(每次处理都以文件的形式记录下处理的最后一个id, 并更新该条数据的处理状态和处理时间)
2.6 HBT数据表基本结构
字段名
类型
说明
id
int
自增列
type
varchar
HBTEntry数据类型
data
text
HBTEntry数据
status
tinyint
数据处理状态, 0:待处理, 1: 处理成功, 2: 处理失败
add_time
int
数据写入时间
process_time
int
数据处理花费时间
update_time
int
数据最后处理完成时间
create_time
int
客户端HBTEntry对象生成时间
// HBT数据表按照月份分片: hbt201609
3 服务端下发数据
3.1 获取用户配置项和系统配置项, 并构建到返回头信息中
头信息
{
"vresion":"1",
“system_config_version”:”1”,
“user_config_version”:”1”,
“user_config_data”:”{}”,
“system_config_data”:”{}”,
“spare”:”string”
}
3.2 数据下发相关逻辑: 客户端根据 type调用相关程序处理对应的data数据, 实现伪推送. 每次收到HBT时到redis中查找是否有需要下发的数据, 如果有就下发到客户端, 下发完成后删除redis中已下发的数据.
如果查询出的数据超过100条, 在系统log表中存储一条异常记录
3.3 服务端下发数据结构
{
"data":[
{
“type”:””
“data”:{}
}
],
“errorcode”:0,
"timestamp":1231231231
}
最后
以上就是舒心板栗为你收集整理的HBT机制的全部内容,希望文章能够帮你解决HBT机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复