如何设计一个高可用的运营系统
概述
一个产品业务的发展总是离不开运营二字。随着业务快速的发展以及新业务的扩充,运营需求越来越大,并且很多时候需要追热点,因此在有限的资源下,如何做到快速、准确、灵活、稳定的满足日趋增多的运营需求,成了个问题。我们根据运营的四个基本要数(目标、人群、门槛、激励)通过对活动的抽象、建模、组件化,实现了能满足80%的运营需求的自动化运营系统,运营产品同学只需要通过一份配置文件就可以生成一个新的活动。
引子
通常,我们做一个活动,我们需要做什么?
我们需要UI设计、前端排版、接口定义、数据库创建、测试流程等等。这样下来整个流程快一点上一个活动大概一周左右,慢一点可能两周左右。
但很多时候,一个活动的生命周期可能就一周、一个月左右。我们是否有必要花如此大的开发代价去做这样事情?一个活动如此,那十个,一百个呢。
我们先来通过三个活动来了解一下活动的本质。
活动1,为了拉新,针对老用户,每拉来一个人,奖励20元的额度提升。
活动2,为了拉GMV,针对老用户,每还款xx元,奖励多少优惠券。
活动3,为了拉绑卡,针对全部用户,完成绑卡,就有机会抢100张1000元现金券。
...
我们可以发现活动的四个要素:人群、目标、门槛、激励
我们可以用一句话概括运营活动:
针对什么人群,我们想要达到什么目标,设置什么样的门槛(规则),最后给用户什么样的激励措施。
活动生命周期这么短,我们是否可以以比较小的开发代价来完成活动的开发呢? 是否针对某个业务的一个活动开发完?我可以快速的复用到其他业务上呢?
在这些活动的开发中,我们遇到了挑战和难题:
可维护性差:活动的生命周期短,活动下线,接口、数据库废弃,但代码遗留,代码维护性差。
开发效率低:重复开发、开发效率低、无法复用。每个活动新建接口、新建数据库表
可扩展性不高:每个活动只能运用到自己的业务上,无法快速复用到其他业务。
性能和监控: 无可靠的数据监控、性能低下。
安全低:没有做接口签名、接口限流等等,容易被刷。
运营要做什么?
于是我花了一段时间来系统性的来梳理运营体系相关东西,通过已经做了什么,来思考,我们将来怎么做?
接入业务:有了具体的产品,我们才有运营他的基础。
运营活动:有了具体的业务,通过运营活动来运营业务。
用户触达:活动出来后,我们需要告知用户才行。
数据分析:活动效果如何,我们需要分析数据,改进我们的方案。
监控告警:系统本身不是100%可靠,我们需要一些仪表盘来监控我们的系统。
安全/防刷:运营是有激励措施的,有利益,需要防止恶意侵入。
基础能力:通过抽象化、工具化提高开发效率。
组件化系统:是否有个可视化的界面,以便于运营人员的快速接入呢。
根据已做的活动经验和遇到的问题,让我不断的思考,我该如何去优化该运营系统,来提高开发效率、安全、和性能。最后,确定的一个大方向:
平台化、标准化、配置化、组件化。
系统架构设计
从上往下看:
前端层:做前后分离,动静分离、接入按钮触发统计系统、组件化模块。
网关层:接入协议适配、签名校验,接口监控统计、限流等等。保障接口安全。
逻辑层:分三个子层。
第一层:接入统一配置中心,接口标准统一化、插件化、组件化常用模块。消息处理引入观察者,抽象公用模块。
第二层:根据运营四要素,抽象出规则集(绑卡?还款等等)、奖励集(优惠券、实物?等等)构成活动主逻辑。
第三层:抽象所有活动储存结构(标签服务)、配置、监控、分布式锁计数器以服务形式提供给上层调用。
基础平台:一些依赖的基础能力:比如用户信息、订单信息、平台优惠券系统、基础推送能力等等。
存储层:所有活动数据以统一结构存储。
从左往右看:
一个活动可以快速复用到其他业务。
将活动通过广告系统、消息推送系统等推送出去。通过数据分析系统做数据分析和优化活动流程。
说明几个点:
1.活动路由
所有接口统一通过SaleService.handler接入
根据活动ID与方法找到对应执行方法。
参考MVC的路由方式
通过反射+代理模式实现
这样做的一些好处:
由于活动的什么周期短,可以通过对配置的更改,调整接口的有无。维护方便。
可以很方便的做一些公共校验或埋一些钩子,(比如是否限制登录、是否过期等)
可以与配置系统深度整合。
做一些接口监控和拦截。
2. mq消息(消息的解耦)
观察者模式
对修改关闭,对扩展开放
3.统一配置中心
可以参考之前写的统一配置中心
这里可以优化的点是,引入版本号,先更新配置+新的版本号到redis,然后再更新每个配置的版本号id, 客户端来取配置的时候,先取配置的版本,在根据版本号+配置key去redis中取配置内容,这样可以平滑的将缓存配置切换到新的缓存配置。
4.关于组件化
一个活动通常可以看成若干个组件组成。
每一个组件又有他自己的特性。
前后端如何通过组件交互?
最好能在OA编辑就完美了
最后,通过一些配置,可以快速的上线一些活动,无需开发接入,做到自动化运营。
一些个人观点
程序的开发,应该是一个搭积木的过程,一些小的模块组合成一个中等模块,若干中等模块组合成一个系统,若干系统组合成一个业务等等。
一个大的问题,可以分层分模块成若干小问题,解决若干小问题,最后解决大问题。
了解业务,才能做出更好的系统设计。
系统设计,要充分考虑到性能、可用性、可扩展性、可伸缩性、安全性等。
欢迎加入Java高级架构学习交流群:468947140
进群获取架构资料 还有在大型企业工作十余年的架构师分享经验,Java工程化管理、高性能、分布式、高可用架构、zookeeper、Spring cloud,MyBatis,Netty源码分析和大数据等多个知识点高级进阶干货
进群修改群备注:开发年限-地区-经验
点击链接加入群聊【Java-BATJ企业级资深架构】:https://jq.qq.com/?_wv=1027&k=52j2FVO
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Akraino Edge Stack进入执行阶段
旧金山 - 2018年8月20日 - Akraino Edge Stack是一个Linux基金会项目,它创建了一个开源软件堆栈,以支持边缘计算系统和应用程序优化的高可用性云服务,今天宣布它已经从规划阶段过渡到执行阶段。该项目吸引了Arm,AT&T,戴尔EMC,爱立信,华为,英特尔公司,inwinSTACK,Juniper网络,诺基亚,高通,Radisys,Red Hat和Wind River等成员的加入。 Akraino Edge Stack旨在改善企业边缘,OTT边缘和运营商边缘网络的边缘云基础架构状态。它将为用户提供新的灵活性,以便快速扩展边缘云服务,最大限度地提高边缘支持的应用程序和功能,并帮助确保系统在任何时候都有较高的可靠性。 “自从今年早些时候成立以来,Akraino Edge Stack项目已经有了强大的行业支持,现在已经准备好为各种边缘用例创建优化蓝图,”Linux基金会网络和编排总经理Arpit Joshipura说。 “我们很高兴欢迎领先的成员,他们拥有广泛的专业知识和资源,可以合作改善开源边缘软件的状态。” 社区建立了一个轻量级的治理结构,欢迎所有参与者的技术贡献...
- 下一篇
让面试官颤抖的Tomcat系统架构系列!
前言 俗话说,站在巨人的肩膀上看世界,一般学习的时候也是先总览一下整体,然后逐个部分个个击破,最后形成思路,了解具体细节,Tomcat的结构很复杂,但是 Tomcat 非常的模块化,找到了 Tomcat最核心的模块,问题才可以游刃而解,了解了Tomcat的整体架构对以后深入了解Tomcat来说至关重要! 一、Tomcat顶层架构 先上一张Tomcat的顶层结构图(图A),如下: Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。 Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下: 一个Tomcat中只有一个Server,一个Server可以包含多个Service,一个Service只有一个Container,但是可以有多个Connectors,这是因为一个服务可以有多个连接,如同时提供Http和Https链接,也可以提供向相同协议不同端口的连接,示意图如下(Engine、Host、Context下边会说...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果