Kenshoo-技术分析

334 阅读4分钟

1. 背景介绍

1.1 工作环境, 查看

image

1.2 技术情况

1.3 前端技术,查看

1.4 使用aws云服务器

image

AWS服务 运用
Amazon Elastic Compute Cloud(Amazon EC2) 对于网络和应用服务
Amazon Simple Queue Service(Amazon SQS) 执行批处理的Kenshoo执行程序服务器
Amazon Simple Email Services(Amazon SES) 主要的SMTP服务
Amazon Elastic MapReduce(Amazon EMR) 生成内部报告
Amazon Simple Notification Service(Amazon SNS) 作为每天收到的数百个通知的通知服务
Amazon RDS MySql 5.6 作为主要数据库
Amazon DynamoDB 每天可以看到数以千万计的事件,数以亿计的事件。对于AWS服务监控和自定义度量使用
Amazon Simple Storage Service(Amazon S3) 存储日志数据数据,如ETL跟踪日志

2. 后端接口分析

2.1 接口协议
  • 使用的http协议,主要使用GET,POST的方式
2.2 数据格式采用json
  • 举例 & 分析接口
## 获取campaign的列表信息
https://social.kenshoo.com/services/grid/data

# 入参数
{
    "columns":[  # 行ID
        299,
        300,
    ],
    "filterContainer":{ # 过滤器
        "filterValues":[ # 过滤条件
            {
                "values":[
                    "ACTIVE",
                    "PAUSED",
                    "ARCHIVED"
                ],
                "columnConfigurationKey":293,
                "comparisonOperation":"EQUALS",
                "displayValues":null
            }
        ]
    },
    "adStatusFilter":[ #广告状态的过滤

    ],
    "accountIds":[
        130543701,
        130543702
    ],
    "dataRequestScope":"GRID", #请求接口的方式
    "exportJob":false,
    "advertiserId":130613200,
    "startDate":1504051200000,
    "endDate":1504137599999,
    "customStartDate":"30-08-2017", #选择的开始时间
    "customEndDate":"30-08-2017",#结束时间
    "dateSelectorValue":"YESTERDAY",
    "gridId":"campaignsGroupsGrid", # 查下Campaign列表(接口名称)
    "masterId":126139650,
    "email":"pan.shu@mobvista.com",
    "uniqueGridLoadingProcessId":"1504169438372",
    "limit":100, # 分页的条件
    "page":1,
    "start":0,
    "sort":"298",
    "dir":"DESC"
}

# 返回的json数据
{
    "success":true, # 状态
    "message":null, #错误的信息
    "total":null, #
    "data":{
        "gridData":[ # 表格的数据
            {
                "207":"0",
                "291":"app_test_OS-_test",
                "292":"130531806",
                "293":"ACTIVE",
                "294":"SYNCED",
                "295":"0",
                "296":"0",
                "297":"0",
                "298":"0",
                "299":"0",
                "300":"0",
                "301":"2017-08-17 17:41:05.0",
                "302":"6083243700903",
                "469":null,
                "706":"0",
                "740":"20",
                "873":"0",
                "adtype":"MAI",
                "time_zone_offset":"0",
                "account_currency_offset":"100",
                "currency":"$",
                "key_failed_sync_reason":""
            }
        ],
        "totalCount":65,
        "gridPollingId":null,
        "uniqueGridLoadingProcessId":"1504169438372",
        "compositeStatus":"SUCCESS",
        "fetchErrorStatusKey":null,
        "totalData":[  # 汇总数据
            {
                "dataIndex":"grid_rows_count",
                "value":"65"
            },
            {
                "dataIndex":"299",
                "value":"0"
            }
        ],
        "cachedTimePeriod":0,
        "columnConfigurationData":[ #表格的配置数据
            {
                "id":291,
                "orderDefault":"ASC",
                "columnAttribution":"DEFAULT"
            },
            {
                "id":292,
                "orderDefault":"DESC",
                "columnAttribution":"DEFAULT"
            },
            {
                "id":706,
                "orderDefault":"DESC",
                "columnAttribution":"DEFAULT"
            }
        ]
    },
    "jobProcessingId":-1 #异步任务的处理情况
}



2.3 异步处理
  • 创建请求的异步任务
##1. 指定同步的campaign
https://social.kenshoo.com/services/sync/campaigns?email=pan.shu@mobvista.com&advertiser=130613200
# 入参:
["130551821"]

# 结果:
{
    "success":true,
    "message":null,
    "total":null,
    "data":{
        "jobId":87030784, # 任务ID
        "totalCount":1 #处理的记录/接口数量
    },
    "jobProcessingId":-1
}

## 2. 前端轮询检查异步任务是否OK,大概200ms
https://social.kenshoo.com/services/sync/status

# 返回如果syncState  IN_PROGRESS(处理中),SYNCED(表示同步成功)
{
    "success":true,
    "message":null,
    "total":null,
    "data":[
        {
            "id":130551821,
            "syncState":"IN_PROGRESS",
            "syncedObjectData":null
        },
        {
            "id":130592572,
            "syncState":"IN_PROGRESS",
            "syncedObjectData":null
        }
    ],
    "jobProcessingId":-1
}

{
    "success":true,
    "message":null,
    "total":null,
    "data":[
        {
            "id":130551821,
            "syncState":"SYNCED",
            "syncedObjectData":{
                "not_synced_ads":0,
                "campaignLastSyncTime":1504175012000,
                "campaignStatus":"PAUSED",
                "campaignIdInTarget":"6083967478303"
            }
        }
    ],
    "jobProcessingId":-1
}

  • 定时检测,包括session和记录日志
## 检查广告客户的情况
https://social.kenshoo.com/advertiser/session?advertiserId=130613200

# 返回其权限列表,前端可以根据权限列表来判断是否有权限后面的操作
     
{
    "data":[
        "PROD_AA_SEND_EMAIL",
        "PROD_DISABLE_S3_HEALTHCHECK",
        "PROD_DPA_TRACKING",
        "QA_DO_NOT_USE_CACHED_PORTFOLIO_GRAPH_VALUES"
    ],
    "success":true,
    "message":null
}

# 记录用户的操作日志
https://social.kenshoo.com/services/componentCounter/log
{
    "username":"pan.shu@mobvista.com",
    "masterId":126139650,
    "masterName":"Mobvista",
    "advertiserId":130613200,
    "advertiserName":"Game Dreamer",
    "loginDate":1504169423539,
    "userDataLength":32082,
    "periodicUserMetrics":[
        {
            "timestamp":1504173623782,
            "value":356 #猜测功能点的ID
        },
        {
            "timestamp":1504175423362,
            "value":498 #猜测功能点的ID
        }
    ]
}
2.4 接口特性
  • 基本上有都有自增长ID, 而不是使用FB 对象ID, 而我们的系统很多展示的地方使用FB对象的ID
["130618757","130617558","130616627","130617591","130616976","130592637","130618500","130617795","130613587","130617828","130613576","130551821","130592572","130551823","130613723"]
  • 所有的请求FB接口都封装了,暂没有看到直接访问FB的接口
  • 所有的列表数据的请求都是使用统一的接口,支持参数不一致。 而gridId表示接口的方法 social.kenshoo.com/services/gr… "gridId":"analysisGrid"
  • 经常会有一些定时轮询的接口,如检查session, status,上报日志
https://social.kenshoo.com/services/grid/data/execution?executionTime=1202
https://social.kenshoo.com/advertiser/session?advertiserId=130613200
https://social.kenshoo.com/services/componentCounter/log

4. 参考资料