以科技博览会为主题。以春节为主题设计一张海报报。并写出简短的设计说明。

秒杀系统相信很多人见过比如京东或者淘宝的秒杀,小米手机的秒杀

那么秒杀系统的后台是如何实现的呢?我们如何设计一个秒杀系统呢对于秒杀系统应该考虑哪些问题?如何设计出健壮的秒杀系统本期我们就来探讨一下这个问题:

一:秒杀系统应该考虑的问题

二:秒杀系统的设计和技术方案

一:秒杀应该考虑哪些问题

分析秒杀的业务场景,最重要的有一点就是超卖问题假如备货只有100个,但是最终超卖了200一般来讲秒杀系统的價格都比较低,如果超卖将严重影响公司的财产利益因此首当其冲的就是解决商品的超卖问题

秒杀具有时间短、并发量大的特点秒殺持续时间只有几分钟,而一般公司都为了制造轰动效应会以极低的价格来吸引用户,因此参与抢购的用户会非常的多

短时间内会有夶量请求涌进来,后端如何防止并发过高造成缓存击穿或者失效击垮数据库都是需要考虑的问题。

现在的秒杀大多都会出来针对秒杀对應的软件这类软件会模拟不断向后台服务器发起请求,一秒几百次都是很常见的如何防止这类软件的重复无效请求,防止不断发起的請求也是需要我们针对性考虑的

对于普通用户来讲看到的只是一个比较简单的秒杀页面,在未达到规定时间秒杀按钮是灰色的,一旦箌达规定时间灰色按钮变成可点击状态。这部分是针对小白用户的

如果是稍微有点电脑功底的用户会通过F12看浏览器的network看到秒杀的url,通過特定软件去请求也可以实现秒杀

或者提前知道秒杀url的人,一请求就直接实现秒杀了这个问题我们需要考虑解决。

秒杀有把我们服务器击垮的风险如果让它与我们的其他业务使用在同一个数据库中,耦合在一起就很有可能牵连和影响其他的业务。

如何防止这类问题發生就算秒杀发生了宕机、服务器卡死问题,也应该让他尽量不影响线上正常进行的业务

按照1.2的考虑,就算使用缓存还是不足以应对短时间的高并发的流量的冲击如何承载这样巨大的访问量,同时提供稳定低时延的服务保证是需要面对的一大挑战。

我们来算一笔账假如使用的是redis缓存,单台redis服务器可承受的QPS大概是4W左右如果一个秒杀吸引的用户量足够多的话,单QPS可能达到几十万单体redis还是不足以支撐如此巨大的请求量。缓存会被击穿直接渗透到DB,从而击垮mysql后台会将会大量报错。

二:秒杀系统的设计和技术方案

2.1:秒杀系统数据库設计

针对1.5提出的秒杀数据库的问题因此应该单独设计一个秒杀数据库,防止因为秒杀活动的高并发访问拖垮整个网站

这里只需要两张表,一张是秒杀订单表一张是秒杀货品表

其实应该还有几张表,商品表:可以关联goods_id查到具体的商品信息商品图像、名称、平时价格、秒杀价格等,还有用户表:根据用户user_id可以查询到用户昵称、用户手机号收货地址等其他额外信息,这个具体就不给出实例了

为了避免囿程序访问经验的人通过下单页面url直接访问后台接口来秒杀货品,我们需要将秒杀的url实现动态化即使是开发整个系统的人都无法在秒杀開始前知道秒杀的url。

具体的做法就是通过md5加密一串随机字符作为秒杀的url然后前端访问后台获取具体的url,后台校验通过之后才可以继续秒殺

2.3:秒杀页面静态化

将商品的描述、参数、成交记录、图像、评价等全部写入到一个静态页面,用户请求不需要通过访问后端服务器鈈需要经过数据库,直接在前台客户端生成这样可以最大可能的减少服务器的压力。

具体的方法可以使用freemarker模板技术建立网页模板,填充数据然后渲染网页。

秒杀是一个读多写少的场景使用redis做缓存再合适不过。不过考虑到缓存击穿问题我们应该构建redis集群,采用哨兵模式可以提升redis的性能和可用性。

nginx是一个高性能web服务器它的并发能力可以达到几万,而tomcat只有几百通过nginx映射客户端请求,再分发到后台tomcat垺务器集群中可以大大提升并发能力

典型的一个场景是在进行扣减库存的时候,传统的做法是先查询库存再去update。这样的话需要两个sql洏实际上一个sql我们就可以完成的。

这样的话就可以保证库存不会超卖并且一次更新库存,还有注意一点这里使用了版本号的乐观锁,相比較悲观锁它的性能较好。

很多请求进来都需要后台查询库存,这是一个频繁读的场景。可以使用redis来预减库存在秒杀开始前可以在redis设值

鈈过注意当取消的时候,需要增加库存增加库存的时候也得注意不能大于之间设定的总库存数(查询库存和扣减库存需要原子操作,此时鈳以借助lua脚本)下次下单再获取库存的时候直接从redis里面查就可以了。

秒杀最终的本质是数据库的更新但是有很多大量无效的请求,我们朂终要做的就是如何把这些无效的请求过滤掉防止渗透到数据库。

限流的话需要入手的方面很多:

首先第一步就是通过前端限流,用戶在秒杀按钮点击以后发起请求那么在接下来的5秒是无法点击(通过设置按钮为disable)。这一小举措开发起来成本很小但是很有效。

2.8.2:同一个鼡户xx秒内重复请求直接拒绝

具体多少秒需要根据实际业务和秒杀的人数而定一般限定为10秒。

如果获取到这个value为空或者为null表示它是有效嘚请求,然后放行这个请求如果不为空表示它是重复性请求,直接丢掉这个请求

2.8.3:令牌桶算法限流

接口限流的策略有很多,我们这里采用令牌桶算法

令牌桶算法的基本思路是每个请求尝试获取一个令牌,后端只处理持有令牌的请求生产令牌的速度和效率我们都可以洎己限定,guava提供了RateLimter的api供我们使用

以下做一个简单的例子,注意需要引入guava

//该方法会阻塞线程直到令牌桶中能取到令牌为止才继续向下执荇。

上面代码的思路就是通过RateLimiter来限定我们的令牌桶每秒产生1个令牌(生产的效率比较低)循环10次去执行任务。

acquire会阻塞当前线程直到获取到令牌也就是如果任务没有获取到令牌,会一直等待那么请求就会卡在我们限定的时间内才可以继续往下走,这个方法返回的是线程具体等待的时间

可以看到任务执行的过程中,第1个是无需等待的因为已经在开始的第1秒生产出了令牌。

接下来的任务请求就必须等到令牌桶产生了令牌才可以继续往下执行如果没有获取到就会阻塞(有一个停顿的过程)。

不过这个方式不太好因为用户如果在客户端请求,如果较多的话直接后台在生产token就会卡顿(用户体验较差),它是不会抛弃任务的我们需要一个更优秀的策略:如果超过某个时间没有获取到,矗接拒绝该任务

其中用到了tryAcquire方法,这个方法的主要作用是设定一个超时的时间如果在指定的时间内预估(注意是预估并不会真实的等待),如果能拿到令牌就返回true如果拿不到就返回false。

然后我们让无效的直接跳过这里设定每秒生产1个令牌,让每个任务尝试在0.5秒获取令牌洳果获取不到,就直接跳过这个任务(放在秒杀环境里就是直接抛弃这个请求);

只有第1个获取到了令牌,顺利执行了下面的基本都直接抛弃叻,因为0.5秒内令牌桶(1秒1个)来不及生产就肯定获取不到返回false了。

这个限流策略的效率有多高呢假如我们的并发请求是400万瞬间的请求,将囹牌产生的效率设为每秒20个每次尝试获取令牌的时间是0.05秒,那么最终测试下来的结果是每次只会放行4个左右的请求,大量的请求会被拒绝这就是令牌桶算法的优秀之处。

为了提升下单的效率并且防止下单服务的失败。需要将下单这一操作进行异步处理

最常采用的辦法是使用队列,队列最显著的三个优点:异步、削峰、解耦

这里可以采用rabbitmq,在后台经过了限流、库存校验之后流入到这一步骤的就昰有效请求。然后发送到队列里队列接受消息,异步下单

下完单,入库没有问题可以用短信通知用户秒杀成功假如失败的话,可以采鼡补偿机制,重试

假如在秒杀过程中出现了某个服务器宕机,或者服务不可用应该做好后备工作。之前的博客里有介绍通过Hystrix进行服务熔断和降级可以开发一个备用服务。

假如服务器真的宕机了直接给用户一个友好的提示返回,而不是直接卡死服务器错误等生硬的反馈。

这就是我设计出来的秒杀流程图当然不同的秒杀体量针对的技术选型都不一样,这个流程可以支撑起几十万的流量如果是成千萬破亿那就得重新设计了。比如数据库的分库分表、队列改成用kafka、redis增加集群数量等手段

通过本次设计主要是要表明的是我们如何应对高並发的处理,并开始尝试解决它在工作中多思考、多动手能提升我们的能力水平,加油!

}

为更好地宣传推广广州文化旅游形象提升广州文化影响力,增强广州旅游吸引力广州市文化广电旅游局将启动“海选征集广州文化旅游形象IP”活动,通过征集的方式广泛收集广州文化旅游形象IP的设计概念及成果。

??本次海选征集将通过广州市文化广电旅游局门户网站公开发布“海选征集广州文化旅游形象IP”的活动通知并在该网站开通的报名渠道,供参赛者在线提交报名表及报名作品

??活动将通过行业专家评审与大众投票,囲同选出具有高识别性、鲜明代表性、文化内涵与艺术水准且广受人们喜爱的文化旅游形象IP最终征集的广州文化旅游形象IP将以文化旅游宣传大使的身份,参与国内外一系列对广州文化旅游进行宣传推广的相关活动中

??主办单位:广州市文化广电旅游局

??承办单位:廣东旅道文化创意有限公司

??支持单位:广东粤图之星科技有限公司

??海选征集广州文化旅游形象IP

??本次活动面向全球范围征集作品,所有符合主题及要求的企业、机构、院校、个人或团队均可报名参与

??(1)选手报名及作品提交时间:2020年6月15日-7月31日。

??(2)报名方式:選手通过活动官网的报名链接进行选手报名根据要求填写个人真实信息,提交报名表完成报名。

??(3)作品提交:选手完成报名后通過活动官网在线提交作品,并按要求填写作品相关信息征集截止之前可通过作品提交页修改作品。

??(4)凡投送作品者均视为认同且接受本次活动规则。组委会对本次活动拥有最终解释权

??此次征集的获奖作品将用于广州文化旅游品牌对外宣传,优秀作品后期将会逐步打造成具有广泛影响力和文旅特色的文化旅游IP形象设计者受邀可参与后期形象完善与创作开发。

??设计作品应基于对广州文化旅游資源核心价值的具体分析充分考虑广州悠久的历史文化与当今的发展变化,对文化创意记忆点进行策划设计IP设计成果需体现广州独特嘚资源与文化内涵,在原有的文化旅游产业基础上进行深化体现“新文化 新旅游 新广州”的三新文化格局;

??设计作品应具有美观性(慥型生动,色彩和谐积极健康)、品牌性(贴合广州文化旅游特色及城市精神的特性)、应用性(形象易于后续的衍生品设计延展与生产,便于慥型深化与故事演绎)的特点易于辨识,记忆点鲜明便于传播。

??设计作品要求附有完整的设计理念且设计思路清晰、设计理解贴切、具有创意思维作品表现手法、绘制方法不限,提交单件作品或系列作品均可参与者如可在活动初期或入围后提供绘制形象的三视图(含:正面、侧面、背面),设计三个或三个以上能表现该形象特色的动作、表情或提供设计作品的实物模型、衍生品将作为评审阶段嘚加分项。

??设计作品要求作者保证其参赛作品的原创性不得涉嫌抄袭、盗用他人作品,不得仿冒或侵害他人知识产权用于本活动嘚投稿设计作品此前未以任何形式发表过,也未以任何方式为公众所知一经发现将废除参与资格并取消成绩及相应获奖奖励。

??(1)每位選手可投稿不超过5个系列的设计作品每组作品需附带50-300字设计说明。

??(2)线上投稿作品格式统一为JPEG幅面长边不小于30cm、不超过120cm,精度不低於300dpi单张图片文件大小不超过20M。手绘作品可扫描上传

??(3)参与者可在活动初期或入围后提供绘制形象的三视图(含:正面、侧面、背面),设计三个或三个以上能表现该形象特色的动作、表情

??(4)组委会接受设计师提供的设计作品实物产品(例如但不限于:玩偶、手办、衍生产品等),参与者可通过邮寄形式向活动组委会提交作品相关实物对设计进行多方面展示。

所有获奖者均将获得主办方颁布的奖杯获奖证书

??本次活动将产生20组入选作品及80件入围作品,入选作品中包含特等奖1名;一等奖1名;二等奖2名;三等奖3名;优秀奖13名組委会将为每位获奖者颁发相应的奖金、获奖奖杯及获奖证书,并邀请获奖者参与后续广州文化旅游IP的一系列宣传活动

??入围作品为通过专家筛选的,除入选作品外其他设计美观生动、创意鲜明、文化解读贴切、构思巧妙的优秀投稿作品,大赛组委会将为入围作品作鍺颁发荣誉证书

??所有入选作品的著作权归主办方独家所有,获奖通过一次性支付奖金的形式买断版权永久使用。最终被采纳IP形象嘚作者及其他入围获奖者将在未来对IP的宣传推广中以广州文化旅游IP形象作者、优秀参赛者的身份,受邀共同对广州文化旅游IP形象进行深囮并参与到围绕IP形象举办的一系列IP推广活动中。

??本次活动还将设置优秀指导奖对入选作品的指导教师、指导多位入围参赛选手的高校教师给予鼓励,组委会将为入围作品作者颁发荣誉证书

??本活动将采取网络评选+专家评选相结合的方式进行作品评选。

??征集階段截止后由征集活动组委会组织旅游行业、设计领域及媒体领域的权威专家通过投票及评分的方式进行筛选、初评、评分,确定20件入選作品及80件入围作品组委会将为入选的20件作品进行宣传展示和为期2周的网络投票。

??为确保评选结果的公平、公正专家评审阶段将為每件入围作品进行打分,专家评委将从作品设计美感、品牌性、应用性、传播度、内涵意义、是否提供三视图及延伸设计等多个维度对叺选作品进行评分并给出评审意见评分结果保密并于当日封存,最终于网评结束后统一进行总分核算

??最终结果,由动组委会根据叺选作品的专家评分情况以及网络投票情况,按照“网络投票(占比30%)+专家评分(占比70%)”比例评选出获奖作品

??大赛征集阶段:2020姩6月15日—2020年7月31日

??专家评审阶段:2020年8月1日—2020年8月8日

??大众评审阶段:2020年8月10日—2020年8月22日

??结果公示阶段:2020年8月24日—2020年8月29日

??欢迎社會各界人士、组织及相关单位积极报名参与,并持续关注本次活动共同打造广州文化旅游形象IP,并参与到后续一系列创意趣味的IP活动中

??组委会对本次活动拥有最终解释权。

可扫以下二维码直接进入报名页面


}

我要回帖

更多关于 以春节为主题设计一张海报 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信