广告系统中通道类推送服务实践

目录

1 广告系统概述

2 广告系统中的推送服务

3 推送服务实践

3.1 推送服务任务流程

3.2 任务状态流转 

3.3 推送服务业务处理流程

4 总结


1 广告系统概述

        首先介绍下广告系统,本文所述的广告系统指类似CSDN、InfoQ这类型依托站点庞大的用户群,根据用户的喜好等类型表情作广告定点推送。主要包括页面类、通道类两种类型的广告。

  • 页面类:主要表现为依托csdn站点所进行的各类型信息推送,比如网站首页顶部、底部的活动推广链接、爆灯广告、siderbar、弹窗等形式的广告;
  • 通道类:主要表现形式,如手机收到的活动短信、邮箱收到的活动推广邮件及链接、APP收到的各种消息通知、私信消息等统称为通道类广告。

作为技术人员,我们可能更加关系底层技术层面的内容。系统逻辑架构包含哪些?系统内部交互?数据流向?底层那么这些广告底层是如何运作的产生,如何展现到用户面前的?

下面咱们就来说说广告系统的设计。系统逻辑架构如下图所示。

模块说明:

  • 1、api模块:负责分发广告/任务。silkroad-api:负责代理推荐、搜索、热榜等服务,并在各种feed流中进行分发强运营/广告内容。
  • 2、管理后台,运营创建任务工单。
  • 3、定时任务模块:报表数据统计、广告扣费、计算ctr、更新任务状态、刷新客群/分发名单等到缓存。
  • 4、推送类服务:sms、push、私信、邮件

图1 广告系统逻辑架构

2 广告系统中的推送服务

        推送服务处于整个系统框架中的业务层,可以理解成一种渠道消息推送服务,就是运营选择一些用户感兴趣的、热门的话题、文章、博客等主动、准确、及时、高效,推送给CSDN用户,这里的渠道目前支持邮件、短信、私信、公众号、PUSH等。这也是本文关注的焦点,其跟上下游系统交互的时序图如下:

图2 推送服务时序图              

流程:

  • ①、运营小哥哥、小姐姐创建通道类任务(填写各类参数,客群、分发方式、触发方式、过滤条件等等)
  • ②、推送服务获取运营后台的任务数据,根据相关参数获取用户,生成响应的推送事件
  • ③、调用消息中台对应服务接口,给查询到的用户发送数据

引入问题: 1、不知大家注意到没,我在描述推送时特意加了几个修饰词"主动、准确、及时、高效”,这些词可以说间接的概括了我们的推送服务的工作重点,后面在重构部分将介绍推送服务是即如何“主动、准确、及时、高效”实现消息推送的?

3 推送服务实践

        本文的推送服务系统,主要基于EDA架构组织代码

1、什么事基于事件驱动架构?

        EDA 事件驱动架构( Event-Driven Architecture )是一种软件设计模式,有助于组织检测 “事件” 或重要的业务时刻(例如交易、实地参观、购物车丢弃等),并实时或接近实时地对其采取操作。这种模式取代了传统的 “请求/响应” 架构,在该架构中服务必须等待答复才能进入下一个任务。事件驱动架构的流程由事件运行,它旨在响应事件或针对事件执行一些操作。 使用事件驱动架构,当发送事件通知时,系统会捕捉发生的事情,例如发生了状态变化,并等待向发出请求的人发送回复,无论他们何时请求回复。收到该消息的应用程序可以做出响应,也可以等待响应,直到正在等待的状态发生变化。

2、架构有何优点?

  • 异步,内部的组件不需要知道之前发生了什么,接下来发生什么,只需要关注处理各自的事件即可。
  • 松耦合,服务不需要(也不应该)知道或依赖于其他服务。 易扩展:扩展现有服务:由于服务在事件驱动的体系结构下解耦,而且服务通常只执行一项任务,因此跟踪特定服务的进行扩展变得很容易。
  • 弹性扩展,只需要新增一个消费者即可,可随时自由的添加

3.1 推送服务任务流程

整个推送服务按业务可以划分成任务事件、用户选择事件、用户推送事件处理模块。

  • 任务处理模块: 从运营平台定时获取推送任务,接收任务事件,更行任务状态
  • 用户选择模块: 从分发名单、画像系统、客群系统获取需要推送的用户
  • 用户推送模块:向目标用户推送数据

 

3.2 任务状态流转 

任务状态流转如下:

 

 核心组件:

  • TaskEventListener 事件监听类
  • TaskEventHandlerService 事件处理服务,类似Manager这种管理中心的角色,将事件的不同状态类型交由专门的状态类处理
  • TaskUnStarted、TaskInitizing、TaskRunning TaskStatusMachine的各种实现类,仅处理各种状态

        在MQ中创建任务事件Topic,TaskEventListener监听改Topic,一旦接收到相关任务事件,进行相应的处理,会生成后续的事件(用户选择事件)发布到MQ中,同时将任务状态更改成初始化完成状态。热舞监听器获取到任务任务事件后,发现任务完成后同样会生成后续事件(用户推送时间)并改变任务状态。UML类图如下:

3.3 推送服务业务处理流程

业务处理流程如下:

用户选择核心组件:

  • UserSelectEventListener 事件监听类
  • UserSelectEventHandleService 事件处理服务
  • UserSelectEventHandle 事件处理类

        UserSelectEventListener事件监听器订阅了RocketMQ的推送topic,获取用户选择事件,将改事件交由UserSelectEventHandler根据具体的分发方式(画像、客群、分发名单)选着不同的UserSelectEventHandler获取到目标用户, 创建任务初始化完成事件,由任务事件处理模块获取事件,将任务状态从未开始更新到初始化完成状态。UML类图如下所示

 

用户推送核心组件:

  • UserPushEventListener 事件监听类
  • UserPushEventHandleService 事件处理服务
  • UserPushEventHandle 事件处理类

        UserPushEventListener事件监听器订阅了RocketMQ的推送topic,获取用户推送事件,将该事件交由UserPushEventHandler根据具体的推送资源类型选着不同的UserPushEventHandler做数据处理及适配MessageSystemApiService(消息系统)接口数据, 将推送信息发送给目标用户,生产任务完成事件,最终由任务事件处理模块获取事件,更新任务状态

 

 

4 总结

本文简单介绍了广告系统,并对其中推送类服务的落地实践进行了相关介绍,且给出了相关设计流程图、UML图,希望能帮助大家对广告推送服务有简单的了解。其中也涉及相关细节问题的解决并未给出点出,如用户去重、分布式锁、分布式事务等,后面看情况补充,感兴趣的同学可以给出自己的见解。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值