注册网站流程和费用,建设银行网站多少,建设银行交学费网站,中国建设机械教育网官方网站转载自 如何设计一个高可用的运营系统
这是一篇来自粉丝的投稿#xff0c;作者【林湾村龙猫】近一年在做关于运营活动方面的设计。本文是他的关于运营活动的总结#xff0c;Hollis做了一点点修改。 概述
一个产品业务的发展总是离不开运营二字。随着业务快速的发展以及新…转载自 如何设计一个高可用的运营系统
这是一篇来自粉丝的投稿作者【林湾村龙猫】近一年在做关于运营活动方面的设计。本文是他的关于运营活动的总结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编辑就完美了 最后通过一些配置可以快速的上线一些活动无需开发接入做到自动化运营。 一些个人观点
程序的开发应该是一个搭积木的过程一些小的模块组合成一个中等模块若干中等模块组合成一个系统若干系统组合成一个业务等等。
一个大的问题可以分层分模块成若干小问题解决若干小问题最后解决大问题。
了解业务才能做出更好的系统设计。
系统设计要充分考虑到性能、可用性、可扩展性、可伸缩性、安全性等。