惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
Google DeepMind News
Google DeepMind News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Proofpoint News Feed
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog
U
Unit 42
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
G
Google Developers Blog
I
InfoQ
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
Jina AI
Jina AI
量子位
宝玉的分享
宝玉的分享
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 聂微东
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
美团技术团队
The Hacker News
The Hacker News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tailwind CSS Blog
博客园 - 司徒正美
博客园 - 叶小钗
Hugging Face - Blog
Hugging Face - Blog
P
Palo Alto Networks Blog
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
Spread Privacy
Spread Privacy
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
Vercel News
Vercel News
Martin Fowler
Martin Fowler
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Forbes - Security
Forbes - Security
Attack and Defense Labs
Attack and Defense Labs
Google DeepMind News
Google DeepMind News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
P
Privacy International News Feed
G
GRAHAM CLULEY
The Last Watchdog
The Last Watchdog
C
Cyber Attacks, Cyber Crime and Cyber Security
AI
AI
V2EX - 技术
V2EX - 技术

Posts on WKLKEN THINKING

apisix 中的 lrucache apisix 中的服务发现机制 apisix 中的负载均衡 apisix etcd机制 聊聊框架 关于 k8s 的 zero downtime deployment 一些建议 apisix 遇到的一些问题 关于在除夕前一天换了一个洗衣机的故事 Django DRF 性能优化 DRF 的一些实践 Part1: Serializer DRF继承关系图 Better Code: 关于接口的灵活性 新的仓库: wklken/naming 缓存使用的一些经验 Better Code: 抽象: 可扩展性与可维护性的抉择 Better Code: 异常时, 该提示用户哪些信息? Better Code: 更好的异常日志打印 Go: some libs Go: go-redis/cache升级的坑 Go: logrus性能提升 Go: gin validation 远程办公的一点总结 Go: 开发过程中的一些bug 项目管理实践: 风险驱动开发 Go: 一种error wrap调用链处理方式 漫谈技术选型 Go: 基于 apitest 做handler层单元测试 Go: go-sql-driver interpolateparams参数优化 [分享]深度工作 你需要更多的思考时间 Django项目重构小结 工作七年小结: 学习,生活及其他 [分享]bash日常: bash-utils 极客时间推广海报 2017总结: 予时光以意义 k8s APIServer源码: api注册详细细节 k8s APIServer源码: api注册主体流程 k8s APIServer源码: 服务启动 k8s APIServer源码: go-restful框架 重构 - 读书笔记(Python示例) 写给新人的沟通建议 vim 杂谈 - 关于快速编辑 vim 杂谈 - 关于移动 读书笔记-重构: 章11 处理概括关系 读书笔记-重构: 章10 简化函数调用 读书笔记-重构: 章9 简化表达式 读书笔记-重构: 章8 重新组织数据 读书笔记-重构: 章7 在对象之间搬移特性 读书笔记-重构: 章6 重新组织函数 Python 代码规范小结 [分享]关于vim ElasticSearch集群部署文档 Logstash+ElasticSearch处理mysql慢查询日志 [分享]关于代码调试DE那些事 Logstash+ElasticSearch+Kibana- 实现相对通用的数据收集分析 ELK维护的一些点(二) [分享]Python源码剖析-数据结构 一些Centos Python生产环境的部署命令 摘录<<6个月学会任何一种外语>> ELK 维护的一些点 也许是一个新的开始 一些vim的个性化配置 读书笔记-调试九法 这段时间的一些想法 Python 源码阅读 - 垃圾回收机制 我为什么要写博客 APUE笔记-第一章 UNIX基础知识 Python源码阅读-闭包的实现 Python源码阅读-内存管理机制(二) Python源码阅读-内存管理机制(一) Python-基础-数据结构小结 一些简单的Python测试题 我的tmux配置及说明【k-tmux】 Review and Restart 工作四周年小结 vim插件: surround & repeat[成对符号编辑] vim插件: gundo[时光机] vim插件: expand-region[区域选中] vim插件: quickrun[快速执行] vim插件: trailing-whitespace[行尾空格处理] vim插件: closetag[成对标签补全] vim插件: ctrlp[文件搜索] vim插件: airline[状态栏增强] vim插件: theme[主题] vim插件: tagbar[大纲式导航] vim插件: nerdcommenter[快速注释] vim插件: rainbow_parentheses[括号高亮] vim插件: syntastic[语法检查] vim插件: delimitmate[符号自动补全] vim插件: matchit[成对标签跳转] vim插件: easy-align[快速对齐] vim插件: multiple-cursors[多光标操作] vim插件: vim-signature[快速标记跳转] vim插件: easymotion[快速跳转] vim插件: vundle[管理插件] Elasticsearch几个问题的解决 分享一份 Vim 简介PPT k-vim 更新9.0版本 关于知识管理工具的思考 Logstash+ElasticSearch+Kibana处理nginx访问日志
'活动'设计的一些trick
2015-08-28 · via Posts on WKLKEN THINKING

在梳理过去做过的项目

之前做项目的时候, 十个月期间做了不少活动, 类型比较多, 有推广/抽奖/小游戏等等.

有些活动需求明确一气呵成, 也有些活动需求模糊一度推倒重来, 还有的活动被刷了><#

好吧, 来说说活动

一些想法, 可以是技术, 非技术


目的

活动的目的是什么? 有没有存在的意义?

存在由于没有想清楚, 耗费人力物力搞了结果不尽人意……所以目的应该先想清楚, 并且明学下来

活动开发简要流程

  • 需求分析: 整体流程, 用户侧细节, 管理侧需求, 统计需求等等, 对整个流程达成一致, 对每个环节的条件/处理逻辑/后续出口等等明确下来, 对一些资质/数字限制等确定下来
  • 设计出图/后端建模-逻辑代码-API/前端开发
  • 测试环境上线
  • 内部测试, 试玩, 针对活动本身给意见. 测试人员测试, 针对逻辑本身, 同时进行网速测试(2g/3g/wifi) / 浏览器测试 / 不同手机-系统测试
  • 修正迭代, 测试
  • 正式上线
  • 管理侧/统计侧上线
  • 推广/监控
  • 活动结束
  • 奖品派发/数据统计等
  • 活动下线

quick and maybe dirty

由于活动本身的性质, 这类代码逻辑属于短平快一类的.

简而言之: 怎么快怎么来

  1. 可以不要考虑复用
  2. 当然, 有些代码是复用的, 例如CRUD/get some list/check permission/call base service等等
  3. 不要考虑将来/以后, 很多活动上了就下了, 不会有所谓的将来, 切忌过渡设计, 空耗费许多精力没有必要
  4. 要快

注意代码/数据/部署隔离

前面说过, 很多活动逻辑没有将来

所以, 活动的代码尽量独立, 保证随写随测, 随上随下, 尽量隔离于主体代码之外, 这样上下线也方便

当然, 不可能完全独立, 依赖外部尽量使用独立的服务接口, 被外部依赖提供也尽量通过提供接口解决(情况很少)

数据独立, 包括, 数据库实例/redis or memcached/文件等, 活动需要记录一些数据, 和主体业务独立开来, 尽量不共用, 有条件的话单独提供实例

部署隔离, 尽量不要和关键服务在同一台机器或者共用带宽, 由于活动本身的特质, 可能带来突发的流量, 可能导致带宽/IO/缓存占用/机器负载等变高, 会影响到其他服务.(可以给定独立url, 通过反代定到活动服务)

开发注意

  • 做好缓存
  • 每个接口做好资质/权限控制, 这类逻辑放在api代码的前面(判断条件放到最前面), fail fast, 验证通过后才进入主体逻辑代码
  • 友好的异常处理/用户提示
  • 后端需要考虑防刷, 前端需要处理下重复提交
  • 做好事务控制(并发), 特别是涉及数字增减的情况, 例如奖品数
  • 涉及步骤的活动, 做好流程限制, 第一步-第二步-第三步……, 防止用户跳过某一步直接进入下一步.(可以通过签加密token的方式)
  • 图片, 尽量放到 CDN (血的教训, 前端一张背景图导致带宽被跑满, 后续用户进不来)
  • 需要有一套成熟的统计系统, 活动数据直接发送到统计系统, 由统计系统统一出数据
  • 对于关键性的步骤/数据, 可以记日志
  • 有必要的话, 做成一期一期的, 有开始结束时间, 自动切换(有些复杂的活动)
  • 有必要的话, (传说中的开关)提供方便的配置或者入口, 可以一键上下线活动/奖品(valid/invalid/shutdown)
  • 对于关键性的代码, 做好注释, 例如一些限制逻辑/数量等等

学会打时间差

很多活动, 可能是热点? 节日? 等等, 时效性比较强的.

然而, 当活动逻辑很复杂的时候, 又要在规定时间内上线, 这时候可以仔细切分需求, 分不同时间上线.

例如, 一个玩游戏/抽奖/兑奖的活动, 可能分为两部分, 用户侧和管理侧, 用户侧逻辑玩游戏/兑奖/查看是否获奖, 管理侧查看获奖情况/颁奖/新增用户统计/渠道统计/流量统计等等

那么, 可以先保证用户侧完成, 同时加入向统计系统发送统计数据的接口, 然后上线, 保证用户侧主体流程. 上线后开始开发管理侧, 管理侧可以按照运营优先级处理, 例如要查看实时统计信息的话, 先做统计, 保证推广效果, 获奖及颁奖可以稍稍押后, 作为第三阶段上线(如果活动兑奖都是在一个周期结束的话)

例如, 要发奖数据, 如果没有管理后台, 直接库里导一份出来就是了. 其实这时候应该思考, 要不要花力气做管理后台, 大不了活动结束手工操作一下, 十分钟.

下线

额, 活动做完, 要下线了.

如果程序是带日期限制的, 到点了自动结束, 提示用户活动结束, 活动流程无法走下去.

如果需要人肉, 直接将外网入口去掉即可.

然后, 可以考虑后续了

首先, 要确认, 该记录的统计数据记录了, 该分析的分析了, 该发奖的也发奖了……

首先, 备份代码到活动代码仓库(供后续参考/复用, 防止雷同逻辑/代码要重写), 然后从代码库删除.

线上, 备份数据到备份服务器, 包括数据库数据/日志/文件等等, 如果缓存中有需要dump的, dump出来. 然后下线数据库, 清空缓存, 日志等


活动, 很大程度上是一堆临时无用并且没有技术含量, 而且非常短命的代码组成的, 做多了容易烦躁, 最好一个项目组里轮流处理, 当然有人认领更好.

活动成不成功, 决定因素很多, 但无论如何, 下线前做好review, 防止重复犯错

就这些

wklken

2015-08-28