神策中台使用Netty作为web服务器,app将神策sdk采集的数据发送到神策中台的Controller,包含data_list(数据)和crc(校验码),Controller使用算法判断数据是否合法,不合法不做处理,合法的数据发送到RabbitMQ队列。
RabbitMQ队列消费者监听消息进行处理,对data_list进行base64解码和gzip解压缩后,得到包含很多事件的数组。
对每个事件,按照事件类型和事件名称,分发器Dispatcher将不同的事件分发到不同的管道Pipeline,一个管道Pipeline可以添加多个步骤Step进行分步处理。
例如,曝光事件被分发到PcautoContentExposurePipeline管道,PcautoContentExposurePipeline管道包含PCautoContentExposureStep对事件进行处理。
Step中处理通常为,通过事件的某属性,使用WebClient响应式客户端调用后端接口,为事件补充其他属性。
由于神策中台部署在公司IDC机房,出于安全考虑未连接外网,所以WebClient通过r系统方式调用,先用DNS类通过后端域名解析得到公网IP,再通过路由表得到后端应用的私网IP。
Step中如果调用后端接口拿到的内容可以缓存,比如通过cms文章id拿cms文章内容,使用redis,将后端内容缓存一段时间。
使用Flux Spring 5 响应式编程技术,不同的事件可以异步处理,待一次请求的所有事件都处理完毕,对事件的jsonArray字符串,再进行gzip压缩和base64编码,将数据发送到神策。