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

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

这是一篇来自粉丝的投稿,作者【林湾村龙猫】近一年在做关于运营活动方面的设计。本文是他的关于运营活动的总结,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编辑就完美了

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

 

一些个人观点

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net中的AOP系列之《AOP实现类型》

本系列的实验环境:VS 2017。 读完本章后,可能仍然不能实现自己的AOP工具,但应该对两种主要类型(PostSharp和Castle DynamicProxy)的AOP工具的运行原理有了基本的理解。PostSharp是一个在编译时编织的后期编译器&#x…

JavaFX官方教程(一)之JavaFX概述

翻译自 JavaFX概述 本章概述了可以使用JavaFX API构建的应用程序类型,下载JavaFX库的位置以及有关正在交付的关键JavaFX功能的高级信息。 JavaFX是一组图形和媒体包,使开发人员能够设计,创建,测试,调试和部署在不同平…

mybatisPlus的分页查询

结论:不是直接limit进行分页的 而是通过rowBounds进行的

详解CockroachDB事务处理系统

本文提到的一些术语,比如Serializability和Linearizability,解释看Linearizability, Serializability and Strict Serializability。 本文中观点大部分都是参考了CockroachDB多篇官方blog,设计文档,代码以及相关资料,相对来说比较…

JavaFX官方教程(二)之JavaFX体系结构

翻译自 JavaFX体系结构 本章提供了JavaFX体系结构和生态系统的高级描述。 图2-1说明了JavaFX平台的架构组件。图中的部分描述了每个组件以及这些部件如何互连。JavaFX公共API下面是运行JavaFX代码的引擎。它由包含JavaFX高性能图形引擎的子组件组成,称为Prism; …

Work Time Manager【开源项目】- 创建自己日志组件 2.0重构

这次我们真是开始来聊聊开源项目里,小而有用的模块或者组件的开发思想。 同时,软件已经更新到1.60的版本了,支持新用户注册,可以不再使用统一的test账户了。 您可以通过以下路径进行下载: 1、在GitHub上fellow一下项目…

JavaFX官方教程(三)之JavaFX示例应用程序入门

翻译自 JavaFX示例应用程序入门 此示例应用程序集旨在帮助您开始使用常见的JavaFX任务,包括使用布局,控件,样式表,FXML和视觉效果。 Hello World,JavaFX Style JavaFX中的表单设计 用CSS设计的花式设计 使用F…

SSH(Spring+Struts2+Hibernate)框架搭建步骤(含配置文件以及运行结果)

1.创建web项目2.导入ssh 所需要的多有jar包,到web-inf下面的lib里面3.将导入过来的jar包都build--path一下4.切换到myeclipse database视图中,添加链接数据库的链接5.新建一个数据库连接(如果忘记了数据库链接时你可以去下面的网址中查看&…

Unity 游戏用XLua的HotFix实现热更原理揭秘

本文通过对XLua的HoxFix使用原理的研究揭示出来这样的一套方法。这个方法的第一步:通过对C#的类与函数设置Hotfix标签。来标识需要支持热更的类和函数。第二步:生成函数连接器来连接LUA脚本与C#函数。第三步:在C#脚本编译结束后,使…

JavaFX官方教程(四)之Hello World,JavaFX样式

翻译自 Hello World,JavaFX Style 教你创建和构建JavaFX应用程序的最佳方法是使用“Hello World”应用程序。本教程的另一个好处是,它使您能够测试您的JavaFX技术是否已正确安装。 本教程中使用的工具是NetBeans IDE 7.4。在开始之前,请确…

WebAssembly,开发者赢了

自从WebAssembly标准发布以及各大浏览器完成对其默认支持之后,WebAssembly成为前端热门话题。在WebAssembly之前,类似的前端二进制标准有火狐主导的asm.js和Chrome主导的PNaCl。二者均用于将后端C/C代码用于前端,作为它们折中方案&#xff0c…

JavaFX官方教程(五)之在JavaFX中创建表单

翻译自 在JavaFX中创建表单 在开发应用程序时,创建表单是一项常见活动。本教程将向您介绍屏幕布局的基础知识,如何将控件添加到布局窗格以及如何创建输入事件。 在本教程中,您将使用JavaFX构建如图4-1所示的登录表单。 图4-1登录表单 本入…

来腾讯云开发者实验室 学习.NET

腾讯云开发者实验室为开发者提供了一个零门槛的在线实验平台,开发者实验室提供的能力: 零门槛扫码即可免费领取实验机器,支持使用自有机器参与,实验完成后支持保留实验成果; 在线WEBIDE支持shell命令操作,支持机器文件…

JavaFX官方教程(六)之带有JavaFX CSS的花式表单

翻译自 带有JavaFX CSS的花式表单 本教程通过添加级联样式表(CSS)使您的JavaFX应用程序看起来很有吸引力。您开发设计,创建.css文件并应用新样式。 在本教程中,您将获取一个使用标签,按钮和背景颜色的默认样式的登录…

搭建ssh框架的步骤

1.创建web项目 2.导入ssh 所需要的多有jar包,到web-inf下面的lib里面 3.将导入过来的jar包都build–path一下 4.切换到myeclipse database视图中,添加链接数据库的链接 5.新建一个数据库连接: 常用数据库连接字符串:https://blog.…

JavaFX官方教程(七)之使用FXML创建用户界面

翻译自 使用FXML创建用户界面 本教程展示了使用JavaFX FXML的好处,JavaFX FXML是一种基于XML的语言,它提供了构建与代码的应用程序逻辑分开的用户界面的结构。 如果您从一开始就开始使用本文档,那么您已经了解了如何使用JavaFX创建登录应用…