背景:这是一个活动,按照流程操作能够领取兑换券,高峰期每分钟会有上百个请求领到兑换券。
从数据库层面上解决并发问题
整个项目的唯一难点就是保证多个用户对兑换券的合理竞争,在这个过程中,必须有一道“关卡”将这些请求排序,让它们有序的进行访问,这跟秒杀活动有点像,只不过程度上来说没有那么激烈,所以我们采用了数据库层面上来保证。
之所以将这道“关卡”设在数据库一是比较好理解、二是比较容易实现、三是因为数据库是唯一安全的“关卡”(流程为请求—》web/JVM—》memcache—》数据库,因为存在多个JVM,memcache虽然是唯一的但也没有数据库安全)。具体来说,是根据数据库的unique机制来保证的,我们在代码层面将这道“关卡”抽象出“兑换券分配器”,数据模型如下:
字典表,兑换券:
保存用户是否领取过兑换券的表,相当于兑换券的分配器:
id
|
uid(unique)
|
1
|
123456
|
2
|
NULL
|
像秒杀这种活动基本思想都是对同一时刻大量的请求进行排序,可以设置多个“关卡”(还可以用C或者shell实现某一时间段对http请求进行排序),一层一层的将请求流进行剥离,最终减小数据库层面的压力,当然,实际情况可能比这复杂的多。
动态上线问题
像活动之类的上线一般都不是立即生效的,有具体的活动时间,所以需要动态上线(这名字听起来有点别扭),这时候最好有一个后台的开关。因为一旦上线,这个开关都会被频繁访问,所以最好放在缓存中。
重定向无法带参数的问题
在开发过程中碰到一个难题,可以这样来理解:有两个页面A和B,A页面是重定向到B页面的,B页面的访问可能来自A页面,但更多的时候是来自其他页面,怎么让B页面知道是从A页面跳转过来的呢?因为将参数直接写在URL是不安全的,所以最后决定使用memcache,在A页面的时候设置标记到memcache,然后在显示B页面的时候用一个ajax请求到controller,在controller里我从memcache里找这个标记,如果有这个标记,就表示是从A跳转过来的,然后删除它防止下次生效;如果没有就表示是从其他页面跳转过来的。因为用户操作不确定性以及memcache会失效的原因,所以这个办法也不是非常完美。
尽可能的测试,甚至不惜多写一些代码
因为活动是在活动期间打开的,所以你上线了并不知道你打开活动后,一切是否正常,如果不正常就来不及修复了。为此,我不惜修改了代码的逻辑,在后台设置了此活动的“超级测试员”,他不受活动开关以及活动次数的限制,能够走完整个活动流程,随时随地进行测试。我相信,这个功能是最出色的,因为它不再让我担心受怕。
尽可能将变化的因素分离出来动态管理
有一些东西是变化的,就算产品告诉你,这个已经确定了,但是你不能保证他不反悔,如果你代码写死了,你就必须重新上线一次,要知道,上线是要经过老大们审批的,各种麻烦。所以,为了将我们程序员“懒惰”品质发扬光大,最好将这些变化因素设置成动态可变的,比如活动的时间,活动的开关等等。
日志很重要
不管做什么,做完美不容易,就算你考虑的再全面,你也可能面临用户的投诉。当收到投诉的时候,我们首要任务是安抚用户,让用户满意,然后查找问题,给用户和自己一个交代,以免下次重复犯错。在这个查找问题的过程中,日志就显得特别重要,比如有用户投诉没收到兑换券,我看代码发现在分配兑换券入口的前面有N多个异常可能会抛出,但这些异常的抛出却直接返回,没有进行任何的异常记录,这个时候你就会觉得很无助。
时刻保持对数据的敏感,记录必要数据,证明自身的价值
活动肯定是有目标的,往往这些跟产品是挂钩了的,就比如这个活动,你肯定很想知道它到底对产品目标起了多大的作用,这个时候就需要数据作为支持,最好记录下每半个小时消耗多少个兑换码。这只是冰山一角,提醒我们以后在开发中务必保持对产品数据的敏感性。
分享到:
相关推荐
伊格田项目总结1
Java__SSM项目总结1.mp4
1. 记录历史:项目总结是对项目全过程的真实记录,便于未来查阅和学习。 2. 提升效率:通过总结经验教训,可以优化工作流程,提升团队工作效率。 3. 传承知识:项目总结能够传递项目管理知识,培养团队成员的能力。 ...
胡克烈总结的部分主要强调了编码规范和项目计划的重要性。编码规范方面,团队遵循了流行的Java编码规范,确保代码的可读性和维护性。在项目计划上,虽然原计划是两个增量版本,但由于考试压力,最终只完成了初始版本...
项目总结报告模板.pdf 本资源是一个项目总结报告模板,用于记录和总结项目的执行情况和结果。下面是该资源的详细知识点解析: 一、项目总结报告的重要性 项目总结报告是项目管理中的一個重要组成部分,它扮演着...
1. **项目总结的意义**:项目总结不仅仅是报告项目的成功或失败,更重要的是通过总结来学习,为未来的项目提供参考。它可以帮助团队识别出项目执行过程中的亮点和不足,以便在未来的工作中做出改进。 2. **PPT模板...
**项目总结报告的目的** 项目总结报告是项目执行完毕后,对整个项目进行全面回顾和分析的重要文档,其目的是确保项目的经验和教训得以记录和传承,以便为未来的项目提供宝贵的参考。通过对项目的目标达成、成果产出...
1.1 电商项目基本业务概述 1.2 电商后台管理系统的功能 1.3 电商后台管理系统的开发模式(前后端分离)
网上订餐系统课程设计系列文档之-项目总结和个人总结 MyEclipse开发,Spring-Struts-Hibernate框架,MySql数据库 特别声明:文档是项目总结和我个人的原创总结,个人总结,个人总结,个人总结哦~并不含团队其他成员...
【腾讯项目总结报告模板】是项目管理中一个重要的工具,尤其在IT行业中,它能够帮助团队高效地回顾项目过程,提炼经验教训,并为未来的项目提供参考。这份资源包含了一系列可以直接套用的报告模板,旨在提升工作效率...
ERP项目总结报告:1、前期的调研;2、软件的选型;3、合同的签订;4、 顾问的能力;5、 确定详细的项目实施范围、定义递交的工作成果、评估实施过程中主要的风险、制定项目实施的时间计划、成本和预算计划、人力资源...
在IT行业中,项目总结与项目心得体会是至关重要的环节,它们能帮助我们提炼经验,提升技能,为未来的项目提供宝贵借鉴。以下将详细讨论这些文件所涵盖的知识点。 首先,我们看到"Ext3.2中文API(最终完成版2010-12-...
“软件项目总结报告.pdf” 本报告为软件项目总结报告,旨在总结软件项目的执行情况、项目信息、项目说明、软件开发和管理过程、开发工具和环境、风险管理、估计偏差率、规模、工作量等方面的信息。 项目信息 项目...
【项目总结报告】是项目执行结束后对整个项目过程进行回顾、评估和提炼经验教训的重要文档。一份详尽的项目总结报告通常包括以下几个核心部分: 1. **目标的实现状况**: - 项目的目标应清晰明确,报告需列出项目...
【项目总结报告模板详解】 项目总结报告是项目执行完毕后,对项目进行全面回顾、分析和评价的重要文档,它能够帮助团队总结经验教训,为未来项目提供参考。本模板旨在为软件部提供一个标准的框架,确保报告内容全面...
React 项目总结及流程
项目总结报告是项目结束后对整个项目执行情况的全面回顾,旨在提炼经验教训,评估项目绩效,并为未来的项目提供参考。以下是对"项目总结报告模板DOC"的详细解释: 一、项目基本信息 这部分包括项目的基本概况,如...
项目总结模板 个人总结报告 包括工时总结,个人总结,负责模块等等
《华为项目管理模板之10 项目总结表》是一份详尽的项目管理文档,旨在对项目的全过程进行回顾和总结,以提炼出宝贵的经验和教训,为未来项目的成功执行提供指导。以下是根据模板内容解析出的关键知识点: 1. **项目...
项目总结ppt模板,敏捷项目,非敏捷项目均可使用