数据上报服务 Postbe¶
简介¶
Postbe 可以保存 Postbe 客户端上送的数据,并提供基于上送数据的查询功能
应用场景¶
Postbe 数据录入¶
保存上送的 Postbe 数据。
Postbe 数据查询¶
基于主键,查询 Postbe 数据。
常见问题¶
实现方式¶
整套系统部署在阿里云环境中,数据上送到 API 端后,API 将数据发送到 Kafka 队列缓存, Data 端消费 Kafka 中的数据,保存在 HBase 中。HBase 的 table rowkey 为 buryingId
数据查询¶
目前数据保存在 Hbase 中,数据查询接口只能支持以 buryingId 查询,未来考虑将数据同步保存在 Elasticsearch 中,支持多种查询条件。另外会开发一些 MAPREDUCE 程序,将数据处理后保存到数据仓库,提供 OLAP 服务。
性能指标¶
经过压力测试,目前 API 端的 TPS 指标可以稳定在 600,如果经过进一步调优,API 的 TPS 可以达到 700。
接入流程¶
步骤 1:Jarvis 账号申请¶
完成 Jarvis BUser 账号申请,获取包括 app_token 和 app_key 等接入凭证。
具体参考“Jarvis账号申请流程”
步骤 2:申请配置 Postbe 权限¶
填写以下申请表,其中 “应用代号” 为上送数据中对应的 “appName” 字段
应用中文名 |
应用代号 |
环境 |
app_token |
app_key |
---|---|---|---|---|
闪电宝 |
shandianbao |
测试 |
1398*******************e300 |
|
速刷 |
supay |
生产 |
1398*******************e300 |
发送邮件给审核人(charles.huang@huifu.com)申请,并抄送复合人(wenhai.wang@huifu.com)与项目经理
完成审核、复合后,相关内容将自动转发给配置管理员完成配置
API 文档¶
请求地址¶
测试地址:( k8s 环境) http://192.168.25.129:10110 ; (docker 环境) http://192.168.16.210:10110,http://192.168.16.211:10110;
生产地址(阿里云):https://jua.cloudpnr.com
数据上报¶
客户端调用该上送接口后,postbe 数据会保存到阿里云 HBase 中
HTTP Request
POST http://192.168.16.210:10110/api/jpostbeApi/userAction/save
请求参数
header
名称 |
类型 |
是否必须 |
限制 |
值 |
---|---|---|---|---|
Content-Type |
String |
是 |
application/json |
body
名称 |
类型 |
是否必须 |
是否参加验签 |
描述 |
---|---|---|---|---|
batchId |
String |
是 |
是 |
包ID ,web或h5端数据规则:<8位随机字符串>-web-<时间戳(unix_timestamp,10位)> |
deviceId |
String |
是 |
是 |
设备号 |
appName |
String |
是 |
是 |
客户端应用名称 |
appVersion |
String |
否 |
是 |
客户端版本号 |
channel |
String |
否 |
是 |
客户端渠道,市场等 |
model |
String |
否 |
是 |
手机设备型号 |
sysVersion |
String |
否 |
是 |
系统版本号 |
browserVersion |
String |
否 |
是 |
浏览器版本号 |
extensions |
String |
否 |
是 |
扩展字段 |
appToken |
String |
是 |
是 |
客户端jarvis申请的token |
sign |
String |
是 |
签名 |
|
buryingInfo |
Array |
否 |
埋点数据 |
sign
1.明文拼接规则
method.toUppercase()+String.join(&,key=value), key)
key为“参加验签字段”的名称,value为对应的值,如果值为空,用””代替,key的顺序按字典表升序排列。
例如:POSTappName=test&appToken=app-a8187ae7-5671-4888-4321-2cc8c4d476ba&appVersion=v2.1.0&batchId=中文&browserVersion=&channel=huawei&deviceId=dsegsgesg&extensions=&model=Iphone7&sysVersion=11.0
2.明文加签规则
见章节“API签名”
buryingInfo说明
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
buryingId |
String |
是 |
埋点记录id,web/h5端数据规则:<8位随机字符串>-web-<时间戳(unix_timestamp,10位)> |
|
functionId |
String |
是 |
埋点编号 |
|
createTime |
String |
是 |
埋点生成时间(13位时间戳) |
|
customs |
String |
否 |
自定义数据(key和value都为字符串) |
请求参数示例
{
"batchId":"中文",
"deviceId": "dsegsgesg",
"appName": "test",
"appVersion": "v2.1.0",
"channel": "huawei",
"model": "Iphone7",
"sysVersion": "11.0",
"sign": "9efe8e9b53ac73ecb8f82225debc69d49eba095c31a69ec57778ccaae48b261a",
"appToken":"app-a8187ae7-5671-4888-4321-2cc8c4d476ba",
"buryingInfo": [
{
"functionId": "1000",
"createTime": "201805071029256",
"buryingId": "2323desd33",
"customs": "{\"port\": 90,\"kaka\": \"测试2\"}"
},
{
"functionId": "1002",
"createTime": "201805071029257 ",
"buryingId": "21324ssd",
"customs": "{\"age\": 22,\"userId\": \"55555\"}"
}
]
}
返回参数
名称 |
类型 |
是否必须 |
限制 |
值 |
---|---|---|---|---|
respCode |
String |
是 |
返回码,90000代码成功 |
|
respDesc |
String |
是 |
返回码描述 |
返回参数示例
{
"respCode": "90000",
"respDesc": "成功"
}
数据查询¶
客户端调用该上送接口后,postbe 数据会保存到阿里云 HBase 中
HTTP Request
POST http://192.168.16.210:10010/api/jpostbeQuery/userAction/query
请求参数
header
名称 |
类型 |
是否必须 |
限制 |
值 |
---|---|---|---|---|
Content-Type |
String |
是 |
application/x-www-form-urlencoded |
body
名称 |
类型 |
是否必须 |
是否参加验签 |
描述 |
---|---|---|---|---|
buryingId |
String |
是 |
是 |
埋点id |
appToken |
String |
是 |
是 |
客户端Jarvis申请的token |
sign |
String |
是 |
签名 |
签名串生成规则同上
返回参数
名称 |
类型 |
是否必须 |
限制 |
描述 |
---|---|---|---|---|
batchId |
String |
是 |
包ID |
|
deviceId |
String |
是 |
设备号 |
|
appName |
String |
是 |
客户端应用名称 |
|
appVersion |
String |
否 |
客户端版本号 |
|
channel |
String |
否 |
客户端渠道,市场等 |
|
model |
String |
否 |
手机设备型号 |
|
sysVersion |
String |
否 |
系统版本号 |
|
browserVersion |
String |
否 |
浏览器版本号 |
|
extensions |
String |
否 |
扩展字段 |
|
appToken |
String |
是 |
客户端jarvis申请的token |
|
sign |
String |
是 |
签名 |
|
buryingInfo |
Array |
否 |
埋点数据 |
返回参数示例
{
"respCode": "90000",
"respDesc": "成功"
"data": "{"key":"value"}
}
返回码
respCode |
respDesc |
---|---|
90000 |
成功 |
90099 |
系统异常,请稍后重试 |
90100 |
请求信息参数JSON格式解析失败 |
90101 |
请求信息参数非空字段为空。 |
90102 |
请求信息签名验证未通过。 |
90103 |
找不对对应的签名密钥。 |
90104 |
请求用户信息无效(此错误消息为jman的报错)。 |
90105 |
请求信息权限认证未通过(此错误消息为jman的报错) |