写点什么

关于网上积分,你不知道的一些事

  • 2017-12-10
  • 本文字数:3414 字

    阅读完需:约 11 分钟

关于业务、架构,我们一直在聊电商平台或社交平台等系统的相关内容,有一类平台我们平时见得比较少,但是却在各个活动中扮演了重要的角色,那就是“用户运营平台”,像我们常见的商城中的转盘抽奖、积分兑换等活动,很多是由这种平台来外接去支撑的。

兑吧正是这样一个平台,它的定位是做用户运营的服务平台,业务包括积分商城管理、活动配置、签到等可以帮助 APP 提升用户粘性和活跃度的运营服务。InfoQ 此次采访了兑吧的技术副总裁武彻,以兑吧为例,请他带我们简单了解这种类型的平台。

武老师告诉我们,这种类型的平台在功能、用户情况和技术实现等方面相比常见的电商、社交等平台有一些特别之处。

与常见的电商、社交等平台相比,兑吧平台在功能上的特点是:多样性与时效性。

多样性是指活动工具的多样性。目前日常运作的活动工具达 60 多款,包括用户非常喜爱的大转盘、砸金蛋、刮刮卡等。这是根据积分业务和用户的行为决定的。

如果仅用一款,或者几款活动工具来运作积分业务,时间长了,用户很容易产生疲劳,所以需要有大量的、创新的活动工具,让用户保持新鲜感。再者,兑吧平台对接了很多用户体量很大的 APP,这些 APP 需要一些个性化定制活动,这些活动工具进一步提升了多样性。

常见的活动工具:

时效性是指兑吧平台在节假日,会给各个 APP 平台制作应景的活动工具。比如中秋节、国庆节、9 月份开学季、暑假等等。这些活动工具有很强的时效性,过了节日就会下线。

从用户行为来看,兑吧提供 SaaS 服务平台,把积分商城通过 H5 的形式,接入到各个 APP 中,用户通过访问 APP 中的“积分商城”入口,跳转到由兑吧提供的积分商城,在商城页面中可以进行“抽奖活动”、“兑换”等活动。

以外卖 APP 为例。用户在 APP 上购买了下午茶,签收、点评后获得了 20 个积分。访问 APP 的“积分商城”,来到兑吧提供的积分商城服务,并拥有 20 个积分。用户看到一个“消耗 10 积分参与 iphone8 抽奖”活动,参与活动后,消耗 10 个积分,剩余 10 个积分。当用户返回 APP 的时候,就剩下 10 个积分了,“积分商城”在维护着用户的积分数据。

业务多样性和时效性,对技术的最大挑战就是如何快速支撑业务,保证用户体验。一开始,兑吧发布一个活动,需要经历这些流程:

  1. 设计并制作一套活动工具
  2. 运营在此活动工具的基础上进行活动信息配置和部分展示内容配置
  3. 发布后,获取活动的数据,进行页面呈现

活动工具的发布,需要经历:设计、前端制作、后端套页面、测试、发布。

同一个类型的活动工具,仅仅修改颜色,或者部分元素修改,技术也需要花 2 个工作日左右。而我们的多样性业务属性又决定了每周有大量的定制化活动工具需要设计、发布。

目前,我们采用模板化技术,内部叫“手脚架工程”,来提升开发效率。如下图所示:

现有的活动工具中,html 部分内容,可以通过页面内配置来获取内容信息,比如:主题图、活动规则。把活动工具,拆成模板和元素。把公共的 js 模板化,背景图、活动图、颜色、活动规则等多变的属性变成元素,而存储元素的这个文件,作为这个活动工具的配置文件。类似于:

每个活动都有一份默认的配置文件,当活动被保存时,根据配置文件的内容生成一份此活动特有的副本。当活动页面被加载时,相关元素读取副本中的内容,进行页面渲染。流程图如下:

这样做的好处是,同样类型的活动工具,只需要通过不同色彩和图片的搭配,可以展现出不同的活动页面,满足各类定制化需求。模板化之前,我们每周只能支持 20 多个需求,模板化后,支撑的需求量已经达到每周 60 多个,解决了业务多样性的问题。

其中的积分业务是大多数人都会遇到的场景,但是大家对它背后的东西又是很陌生的,可能会比较好奇和感兴趣,武老师为我们具体介绍了这块业务的情况。

兑吧的积分业务,主要是帮助开发者(APP),消耗已有的积分,比如把 APP 上通过签到,购买商品等行为产生的积分,在兑吧的积分商城进行兑换、抽奖等活动,消耗积分,形成积分的良性循环。


整体对接图

积分,有非常丰富的业务。下面用积分兑换这一场景来帮助大家理解,开发者 APP 的积分,是怎么在兑吧的积分商城玩转的,这背后又涉及到了哪些系统?一图胜千言,用图的形式来展示积分的兑换业务。


功能流程图

目前,兑吧的平台全部采用 SOA 架构,一次积分兑换,会涉及到好几个业务系统,这些业务系统又是采用分布式部署,来保证 7*24 小时提供服务。详细的技术实现,请看下图:


时序图

具体到兑吧的平台系统,武老师向我们介绍了其早期的架构设计和后来的演进过程。

兑吧的系统功能架构主要分成 3 个阶段。

第一阶段:单体架构。和很多创业公司一样,公司成立初期,我们选择了 java 的 Grails 框架。业务探索期,grails 单体架构发挥了很大的作用。简单、易上手。

第二阶段:SOA 架构。随着业务量的不断增加,单体架构慢慢暴露很多问题。首先,代码工程越来越大,所有的业务代码都在一个工程里面,每次部署,发布都是一件非常漫长、痛苦的事情。

其次,随着团队的壮大,大家都在一个工程里写代码,研发效率低下,在一个工程里,大家的依赖是代码,或者接口级别。A 同学写完了代码,依赖了 B 同学的代码,但是 B 同学还没写完,不能一起提交,需要等待。

在提交的过程中,经常会出现代码冲突,抢开发环境的事情。如何解决这些问题呢?首先要从架构中进行拆分,把原来的单体应用,拆成分布式的多服务应用。这个时候,整个平台的业务访问量已经达到亿级别,业务也处于高速发展期,拆分服务,相当于给高速行使的跑车换轮胎。架构可以拆,但是不能影响业务。让业务在无感知的情况下,完成架构的演进。

我们的解决方案是:技术上,尽量选择成熟的方案,缩短技术探索周期。最终我们选择了 springboot+dubbo 的 SOA 方案。业务上,先保持原来的单体工程不变,继续提供服务。在原来的单体工程中,先拆分出相对独立的商品中心,再慢慢拆分出来活动中心、商城中心、库存中心以及一些非业务属性的基础服务。

历时 1 年左右,到 2017 年的第二季度结束,完成了从原来的单体架构演进到 SOA 架构。研发效率和系统稳定性,都得到了很大的提升。

第三阶段,容器化架构。经过第二阶段的架构改造,目前我们的系统非常稳定,在此基础上,我们也在调研新技术,利用容器化,进一步提升研发效率,降低研发成本。

而在架构演进过程中,从单体架构到 SOA 架构,遇到了很多坑,把其中几个分享给大家,如果大家也处于架构升级和演进的阶段,可以从中吸取经验,减少踩坑。

1、 基础服务。监控和日志是最基础、最重要,也是最容易忽视的服务。我们从单体架构迁移到 SOA 架构的时候,一开始没有监控系统,都不敢动手。不清楚迁移后服务怎么样?是不是稳定?接口的性能如何?响应时间怎么样?

监控系统就像雷达,没有雷达系统,都不敢贸然让战斗机飞出去。所以在系统完善的过程中,一开始,就要搭建一套完备的监控系统和日志系统。我们的监控系统是开源的 CAT 实时分析平台,可以清晰地看到各个系统调用,接口性能等参数。日志系统是 loginsight,基于 ELK 的一整套日志解决方案。这两个系统,在我们迁移架构,日常系统完善过程中,发挥了很大的作用。

2、 系统未动,业务先行。系统的拆分,要基于业务的拆分。一开始,从这么庞大一个单体应用中要拆分出系统来,我们无从下手,拆什么,都是动一发而牵全身。既然无从下手,就开始讨论业务架构,划分业务边界,再来拆分系统。经过充分的讨论,我们发现“商品”这个业务,相对独立,可以第一个拆出来。慢慢的,业务架构的边界就清晰了,系统架构也成型了。

3、 技术要有前瞻性。如果非要等到架构撑不住了,再去优化架构,那真的太晚了。从单体架构,演进到 SOA 架构的时候,我们就有点吃力了。业务快速增长,老系统要维护,新系统要拆分,这是一场与时间赛跑的游戏,对技术团队的挑战非常大。所以从 SOA 架构演进到微服务架构,我们吸取了经验。在业务稳定增长,系统平稳期,就开始进行架构选型。

嘉宾介绍

武彻,目前在兑吧负责基础架构团队,主要负责架构选型,性能优化,系统稳定性等工作。2010 年加入阿里巴巴淘宝网,负责淘宝网的性能测试和性能优化,经历了 10 年~12 年的双 11 性能压测以及性能自动化平台 PTS 的研发工作。2013 年,加入来往团队。历任来往 Android 客户端负责人,来往项目总负责人。2014 年,加入钉钉团队。钉钉初创团队成员,历任钉钉的开放平台项目负责人,smartwork 项目 & 技术负责人,带领项目组从零开始孵化钉钉考勤、签到、日志、审批等办公协同平台。2016 年,离开阿里巴巴,加入兑吧。

2017-12-10 16:523148

评论

发布
暂无评论
发现更多内容

Elasticsearch之mapping

北漂码农有话说

拥抱K8S系列-04-基于docker部署更多应用

张无忌

Docker 标准化 vsftpd

为什么Java二维数组不用指定列的长度

Rayjun

Java 数组

妈妈,今天您几点下班?

脑极体

智能商业时代的思考(一)从在线化到网络化

刘旭东

拼多多 淘宝 智能商业 网络协同

人生革命由自律发起

胡迪伦

自学编程 拖延症 懒惰 死循环

2020-09-03-第十三周作业

路易斯李李李

一个在交流群里讨论过两轮的问题,答案竟然跟一个 PEP 有关

Python猫

Python 编程

JavaScript 深拷贝与浅拷贝

梁凤波

Google鼓励的13条代码审查标准 [建议收藏]

简爱W

【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!

冰河

MySQL 面试 事务 隔离级别 冰河

Flink从保存点启动应用-18

小知识点

scala 大数据 flink

java安全编码指南之:声明和初始化

程序那些事

安全编码 java安全编码 编码指南 对象初始化

如何将VSCode变成绿色版本

lmymirror

vscode 教程

区块链技术破解数字版权保护难题

CECBC

区块链 版权保护 数字技术

Python 函数为什么会默认返回 None?

Python猫

Python 编程

Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?

Python猫

Python 编程

Python 为什么能支持任意的真值判断?

Python猫

Python 编程

商业通识 : 商业到底是什么?

Walker

学习 得到 个人成长 商业

[翻译]Defer,Panic,and Recover

卓丁

defer panic recover Go 语言

云原生 go-zero 微服务框架

万俊峰Kevin

微服务 microservice go-zero Go 语言

首个数字银行卡明年发行,广州出台区块链措施支持大湾区

CECBC

区块链 金融科技 社会

oeasy教您玩转linux010206toilet

o

怎么向女朋友解释什么叫区块链?

艾小仙

比特币 区块链 以太坊 defi

持续集成有什么好处?快来看鸭

清菡软件测试

jenkins

为稳外贸保驾护航 区块链交易平台显身手

CECBC

区块链 银行 福费廷

宁波新基建之路 基于制造优势破题智慧发展

CECBC

新基建

区块链技术应用于链接智慧医疗

CECBC

区块链 社会保险 智能医疗

职场求生攻略答疑篇之 3 —— 数据是土地

臧萌

数据 职场成长

SpringBoot 缓存之常用注解

hepingfly

Java 缓存 springboot 注解

2020-09-03-第十三周学习总结

路易斯李李李

关于网上积分,你不知道的一些事_架构_雨多田光_InfoQ精选文章