概述

我在2015年的时候,听了关于国内某一家互联网公司的技术分享,他们的技术架构经历了三个阶段,分别是

1.传统的LAMP架构

2.对系统进行基于业务边界的垂直切分,包括对数据库进行垂直切割

3.这个阶段很神秘,没有分享

但是在第3阶段,他们提到了Java开发人员不再需要去开发商城端的营销活动类的业务,开发人员的精力全部集中到了中间件、供应链、进销存等重业务软件的开发。因为这种系统架构能够帮组他们提高生产力,在市场竞争中取得优势,所以基于商业的目的考虑,他们没有分享。于是那时在心里留下了一个疑问。最近机缘巧合,公司来了一位资深的产品经理,在和他交流的过程中他多次提到了自动化营销的话题,又一次触发了我对于在2015年心中的那个疑问的思索。 经过一个月左右的调研和思考,有了一些思路和实践,因此阅读完本文,你会知道如下内容

  1. 如何通过设计系统架构就能够实现将经常变化的业务需求转成规则配置,不再需要开发人员去写代码实现;

  2. 上述的系统设计带来的一些问题;

  3. 上述的问题的利和弊的一些思考;

详情

问题的提出

互联网公司经常会有类似的营销类的需求,比如:

1.如果用户浏览过A商品之后没有下单,发送一个关于B商品的消息推送;

2.基于不同渠道引入的注册用户在不同的时间范围内发送不同的优惠券;

3.如果A用户将商品加入购物车后,没有支付,我们要给用户发送A商品降价通知;

作为技术人员,该如何将面对这些时效性高,业务规则变化频繁,生命周期短的需求? 如果我们按照传统的方式去开发,就会出现加班加点,人手还不够,经常出现bug,团队士气下降等问题,我想这是大部分互联网公司面临的问题。 这个问题怎么破? 解决问题的思路:

比如一个商城,有如下的业务模块:登陆、注册、订单、购物车、充值等等,但是我们的营销活动可能会从这些模块中获取用户的行为,经过一定的规则过滤,然后触发另一个行为,这个行为可能是:发送优惠券、发送消息推送,发送成长积分等等,所以我们可以利用规则引擎来实现这些活动中的规则定义。但是会出现另一个问题,我们如何实时的获取用户在各个模块的行为,然后将这些行为都发送到各种规则引擎中去实时计算后去触发各种事件。

具体的如何实施的方式

基于上面的思路,我们需要解决如下的问题:

  1. 如何处理实时的行为数据

  2. 如何对行为数据进行分组聚合,形成一个复杂行为

  3. 如何定义步骤2中的复杂行为,并触发一个或者多个系统行为

基于如上的问题,我经过一个月左右的调研和思索,我们可以用如下的技术方案解决上述的问题

  1. 采用Flink作为实时的分布式计算平台;

  2. Flink有实时的数据处理能力;

  3. Flink具备复杂事件处理引擎,可以解决对多个行为的聚合问题;

  4. 采用Groovy+ Aviator 解决活动规则自定义的问题;

该方案在最近的一个月中,在技术实施层面都已经打通,然后下面就要开始进行生产环境的验证。

我们用这种方案可能会遇到的问题和思考

1.模块之间都是通过事件的机制进行通信,如果我们需要改变事件的定义,那么很难精确的评估出有哪些模块需要做相应的调整;

2.另一个角度思考,事件发送方如果要改变事件的格式定义,那么也是提前发起通知,让各个业务模块自己检查是否需要做相应的调整,也是合理的,但这是系统之外的行为,存在一定的不可靠性;

3.如果要紧急做一些全局范围内的调整,可能会比较滞后;

总结

本文主要介绍了在互联网企业经常会遇到的各种营销活动类的开发需求,然后基于这类需求我们如何做就可以将变化频繁的内容通过规则引擎来支撑,通过实时计算平台实现各种规则的计算和事件触发。

参考资料

美团点评基于 Flink 的实时数仓建设实践

美团酒旅实时数据规则引擎应用实践