转载自   如何设计一个高可用的运营系统

这是一篇来自粉丝的投稿,作者【林湾村龙猫】近一年在做关于运营活动方面的设计。本文是他的关于运营活动的总结,Hollis做了一点点修改。

概述

一个产品业务的发展总是离不开运营二字。随着业务快速的发展以及新业务的扩充,运营需求越来越大,并且很多时候需要追热点,因此在有限的资源下,如何做到快速、准确、灵活、稳定的满足日趋增多的运营需求,成了个问题。我们根据运营的四个基本要数(目标、人群、门槛、激励)通过对活动的抽象、建模、组件化,实现了能满足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编辑就完美了

最后,通过一些配置,可以快速的上线一些活动,无需开发接入,做到自动化运营。

一些个人观点

程序的开发,应该是一个搭积木的过程,一些小的模块组合成一个中等模块,若干中等模块组合成一个系统,若干系统组合成一个业务等等。

一个大的问题,可以分层分模块成若干小问题,解决若干小问题,最后解决大问题。

了解业务,才能做出更好的系统设计。

系统设计,要充分考虑到性能、可用性、可扩展性、可伸缩性、安全性等。

如何设计一个高可用的运营系统相关推荐

  1. 陪玩网站源码开发,如何设计一个高可用的订单系统

    陪玩网站源码开发订单系统的基本架构: 陪玩网站源码前台有结算页提供用户去结算,当后台收到前台用户点击结算操作时就会开始处理下单服务,起初订单被写入到陪玩网站源码后台的数据库中,然后异构数据到缓存中以此 ...

  2. 2 小时快速搭建一个高可用的 IM 系统

    知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=4994 本文快速搭建的 IM 系统也是使用 Go 语言来快速实现的,这里先和 ...

  3. 如何设计一个高可用系统?要考虑哪些地方?

    来自:JavaGuide 一篇短小的文章,面试经常遇到的这个问题.本文主要包括下面这些内容: 高可用的定义 哪些情况可能会导致系统不可用? 有些提高系统可用性的方法?只是简单的提一嘴,更具体内容在后续 ...

  4. 如何设计一个高可用、高并发秒杀系统

    作者:vincentsu,腾讯 PCG 后台开发工程师 如今的互联网已经在海量服务领域有了很成熟的理论,因此自己也很庆幸,能够从 0 到 1 完整践行海量服务.微视春节项目中的集卡瓜分活动,是一个典型 ...

  5. tcpdump如何判断丢包_亿级规模的高可用微服务系统,如何轻松设计?

    " 说到大规模微服务系统,往往是一些 7*24 时不间断运行的在线系统.那么如何设计一个大规模的微服务系统呢? 图片来自 Pexels 这样的系统往往有以下的要求: 高可用.这类的系统往往需 ...

  6. 【面试】如何设计一个高并发系统

    一.为什么需要秒杀系统? 电商平台本质是在线上撮合买卖双方的购销需求,达成交易.虽然是线上交易,但也遵守朴素的经济学原理,供求关系决定了商品的经济活动.当供求平衡时,买方和卖方处于对等关系,双方相对稳 ...

  7. 【面试题】如何设计一个高并发的系统?

    每个行业都一样,人才都是分层次的,从事技术行业的程序员们更是如此,按照技术能力分为三六九等. 每个层次的人出去面试,面试官考察的方向是不一样的. 刚入职场的小白,会问你很多基础性的知识,有过几年经验的 ...

  8. mysql每秒支持多少并发_如何设计一个高并发系统?

    面试题 如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先. 如果你确 ...

  9. oom 如何避免 高并发_【面试题】如何设计一个高并发系统?

    面试题 如何设计一个高并发系统? 原文链接:https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/high- ...

最新文章

  1. 微信jssdk批量添加卡券接口(踩坑经验)
  2. Micropython教程之TPYBoardv102 DIY蓝牙智能小车实例
  3. Web前端开发笔记——第三章 CSS语言 第六节 CSS定位
  4. 03-java学习-基本数据类型-运算符-键盘接收用户输入
  5. linux系统月初月末,Linux last显示系统开机以来获是从每月初登入者的讯息命令详解...
  6. 【Guava】Guava Cache的refresh和expire刷新机制
  7. css按钮大小固定,在CSS中创建一个固定宽度的按钮
  8. 迷失lost结局什么意思_蒙上你的眼结局是什么意思?最后谁活下来了
  9. mac下打开多个相同应用程序
  10. Python下的云计算(OpenStack技术书籍)
  11. Qt的project文件的设置相关
  12. 冷高轮时间王思聪吃热狗电脑屏幕保护下载
  13. ioswifi信号测试软件app,‎App Store 上的“Speedtest - 网络测速测量和wifi分析仪”...
  14. 流水过亿的《海盗来了》被指抄袭 微信小游戏为何抄袭事件频出?
  15. 实现HTTP下载的几种方式
  16. Ubuntu查看文件夹占用空间大小以及磁盘空间大小
  17. 公司最大的内卷,是“管理错位”
  18. 从军事走向民用,惯导定位能否破解室内导航难题?
  19. 2020年全球吸附分离材料行业现状、竞争格局与发展环境分析,各国政策扶持,市场空间大「图」
  20. 区块链革命,革的是哪些“黑中介”的命?

热门文章

  1. 算法设计与分析——递归与分治策略——全排列
  2. 后端学习 - SpringBoot
  3. leetcode45. 跳跃游戏 II
  4. [数据结构]对称矩阵和三角矩阵压缩公式
  5. [JS-DOM]DOM概述
  6. [蓝桥杯][2013年第四届真题]剪格子-dfs
  7. C++set容器-内置类型指定排序
  8. 算法-连续项的最大和问题(最大子数组问题)三种不同解法
  9. b树与b+树的区别_面试必考:B树、B树、B+树、B*树图文详解
  10. leetcode 二进制求和 addBinary