hulk是一个胶水型的系统,联结Pigeon(数据事件系统),Tesla(服务化框架), Sentry(统计组件)以及业务方自身开发组件,
完成DB事件驱动型的任务。它利用脚本引擎,加载业务逻辑脚本,快速解决问题,支持热部署,免去业务方的重复劳动,大大提升开发效率。
1. 基于DB数据事件的相应处理需求增多(例如 需要监听商品数据变更做相应调整, 静态化失效中心)
2. 主业务流程的减负和异步化需求 (例如 商品发布流程中提交反作弊反垃圾审核)
3. 数据统计的需求,现在数据团队可提供一定范围内的sum,但是没法反应实时的数据状态(例如,每天各个时段新增的商品数,更新商品数)
4. 目前搭建java工程使用服务化 API比较麻烦,主业务流程之外的附属工作多,同时各个工程之间重复度很高。
5. 业务方有监控的需求,工程发生异常需要报警通知
1. glue like, 做得轻薄,尽量利用站内现有的技术组件,只做系统之间的粘连
2. 部署&调试方便, 使业务方专注自身业务开发,支持热部署
3. 对业务方组件友好,方便业务方添加自身组件
4. 高可用性
1. 快速提升业务开发效率,原有完成一个类似系统需要自建java工程,需要写一堆自身业务不相关代码,现在业务方可专注自身业务代码
2. 有监控,有报警,可展示
3. 可扩展性高,组件和容器重用方便
1. 考虑到学习曲线,采用groovy作为动态脚本语言,利用spring dynamic language support, 热部署脚本。
2. script engine 的 context 继承自hulk core 的context,在脚本中方便地使用context中注入的组件
3. 抽象出task的概念,数据结构如下:
{
team, // 团队名称
name, // 任务名称
topic, // 数据事件 [task].[database].[schema].[table]
owners,// 负责人花名
phones,// 负责人电话
errThreshold, // 错误容忍值
script, // 脚本名称
}
支持 task 动态reload
4. 支持报警机制,当脚本执行失败次数超过用户设置阈值是会短信和邮件报警
5. 支持框架层面的数据统计,会将task执行频率和服务化API调用频率数据上报到sentry
6. 方便地让用户集成自身开发的组件,在自身容器的spring配置文件中添加注册即可
7. 分测试和线上环境,本地测试设置API黑名单机制(未添加的API才可在脚本中调用通)
8. 控制台显示总体运行情况,所有容器都会在启动后注册到注册中心,但我们只做粗粒度地统计
hulk-framework
|
| ------ hulk-archetype // 原型工程,业务方在原型上开发即可
| |
| | ---- assembly // 线上容器配置和启动项
| | ---- script // 脚本目录
| | ---- test // 本机测试入口
|
| ------ hulk-benchmark // hulk 性能测试相关
|
|
| ------ hulk-bootstrap // 线上启动入口
|
|
| ------ hulk-component // 框架自研组件
|
| ------ hulk-core // 系统核心
|
| ------ hulk-doc // 文档相关
1. 根据archetype创建hulk容器,设置本地 API blacklist
2. 向@Pigeon项目组确认DB事件源是否接入,获取[task], [database],[schema], [table]
3. 修改本项目配置文件,在pom.xml 和data-services.xml 配置文件中添加依赖的服务化API
4. 启动test下的启动入口,测试脚本
5. 部署上线, 在sentry面板中添加统计数据监控(之后考虑可能在控制台直接显示)
6. 线上机器部署logstash-forwarder,收集脚本日志进入logkibana
更具体使用相关的内容请参见《用户使用手册》
控制台
sentry 接入
异常邮件
1. 评价统计
2. 商品脏数据扫描
3. 商品图片打标
4. 商品统计
5. 店铺上新事件通知
6. 市场发布新商品通知
7. 静态化失效中心