先简单介绍下我自己,楼主从事互联网行业,做后端方向的,京东,滴滴,阿里几个大厂都呆过,简单来说就是个java仔。
先说结论:拍卖行能优化吗,感觉概率比较小,很难优化。接下来说原因。 速度慢的一切归因都是数据量大(上架商品数据,重点),和请求量大(就是扫拍,次重点),由于楼主并没有详细数据,所以这两点只是猜测,以下分析皆在此基础之上,如果有大佬不认同这两点,也可以提出,我们一起探讨
第一点: 实时数据量大。 楼主之前做电商的,先简单介绍一下商品的构成,一件商品是由商品模板(cspu,例如称号里面有哪些属性,比如三攻,附加伤害等)和真实属性(每款称号三攻附加多少,附加伤害又是多少)构成,举个例子,一个夏日礼包称号,它的商品模板就是称号,至于夏日礼包里这个称号三攻加多少,附加伤害加多少,我们称之为真实属性,真实属性+商品模板=一个具体的称号,我们电商行业内称之为sku。那么我们来细算下拍卖行里面上架的数据sku大概有多少呢,我们以dnf玩家一共500w个角色,每个角色上架3个商品,这样就是1500w的数据(实际清空应该会超过这个量,很可能在亿级别左右)。
可能到这同行们都觉得1500w数据不多,so easy,我们项目的数据量随随便便上亿,也没问题啊,可是我要提2点,注意,拍卖行是实时的,以及它强大的搜索能力!(其实还有一点就是历史上架商品这种数据,因为我们知道数据库的数据不会真正删除,而是会置为逻辑删除,界面上查不到了,但是数据还是在那的,但我猜测腾讯大佬也可能会将历史上架数据放到另外的地方,从而上架商品表中只留下48小时内的数据)
上千万级别的实时计算数据,重点要突出实时2字,为什么呢,举个例子,微博热搜如果没有大事发生,每10分钟刷新一次,分钟级别,而dnf拍卖行呢,秒级别的,稍微一慢,玩家就会骂。 同行也可能说,那都上千万了,优化呗,但是优化有哪些手段呢,拆数据表,缓存,分布式搜索引擎,加服务器等方式,最为明显的就是引入了缓存,也就是拍卖行的收藏功能,可以尝试下,同样是称号,在搜索栏搜索和在收藏功能搜索完全是2个级别的速度。
有些玩家说加服务器就可以,其实单纯的加服务器没用的,举个例子,只有一个供应商去卖东西,每天只能卖100件,而送货的人之前有1个,需要1天才能干完,现在老板嫌慢,说多招2个送货的,每天给我送300件,很明显这其实是不可能的,因为从头到尾只有一个供应商,一天只能卖100件。
现在个人感觉技术上能做的数据模型和架构模型都不会存在特别多能优化的地方。可能有玩家会问为什么一周时间内有时候很卡,有时候不卡,这就是数据量级导致的问题,可能在某个时间段内,上架商品数量没有到那个量级,或者你想上架或者购买的商品刚好是热点数据放到了缓存中,这都有可能。我记得在今年51礼包的时候,出现过一次上架商品全部下架,需要玩家自己再次上架,我猜测是将上架商品表清空,短时间内拍卖行不会卡顿。
再就是拍卖行强大的搜索功能,因为搜索栏可以任意搜索,输入商品全称可以,也可以输入关键字,那么,点搜索按钮发生了什么呢,那就是先筛选商品模板,找到尽可能匹配的商品模板,再拿商品模板去匹配上架商品的数据,而且,此时为了数据的准确性,肯定是要加锁的(这句话同行可以听懂,简单来说就是加锁操作是必须的,这个操作也会影响服务器性能,为什么必须,因为在搜索的时候别人也可以购买你搜索的商品) ,腾讯的技术人员肯定是引入了类似es这种分布式搜索引擎中间件的,将数据放到es中,在你点击搜索按钮后,服务器会从es中拿到最可能的商品模板列表,再去和缓存中的sku匹配,也可能是去es中的sku匹配,获取前80条数据和总量, 这个操作其实就是很耗时的。
举个例子,你是一个新班级的班长,大家之间彼此都不熟悉,我是老师,让你去找一个人,只告诉你这个人的名字中含有2个字不确定全称多少个字,姓什么,全称叫什么统统不知道,只知道名字里包含了 ”夏日“ 两个字,那么你能做的就只能是一个一个的去问同学他们叫什么,自己再来判断名字中是否含有”夏日“两个字(例子可能不太恰当,可能会有玩家杠,说自己提问,让名字里含有”夏日“的同学自己站出来,这点在计算机中叫做广播,但是核心思想还是要有人去做判断,而且在计算机中处理起来极其麻烦)
还有一点就是上架的商品数据其实是和上架商品的玩家用户信息做了关联的,而且肯定是用角色Id来做关联的,这样就是上架商品表,和角色信息表用来关联,千万级别的数据和百万级别的数据做笛卡尔积产生的中间表,即使有索引其实也会很慢,有人可能会想,我在es中放入角色信息和商品信息不就可以吗,这样就不用两张表做关联了。但是其实会有一种场景,就是如果有玩家在上架商品期间,修改了自己的角色名称,这样就会出现数据不一致的情况,这样就算是一个bug。
接下来说说请求量问题,也就是扫拍的问题。首先,扫拍这个行为是禁止不了的,只要是对普通用户开放的功能,就完全有办法模拟正常人使用电脑进行扫拍(最典型的就是12306抢票,很多公司的抢票服务器往往比12306服务器厉害很多),它后台策略不可能因为你在10s内点了100多次搜索按钮就开始对你进行限制,普通玩家1秒中内点击2,3次万一给你限流了,那你就没有游戏体验了,也可能会造成玩家的流失。
拍卖行不同于我们在淘宝、京东去抢购商品,我们在淘宝和京东抢购商品时,他们往往会部署几百甚至上千台服务器,再就是先预估流量多少,将80%的流量都会拒之门外,打不到他们的服务器上,将放进来的流量再进行风控核查,检查你账号的安全性,是否是机器人等,最后才让你抢购商品。但是dnf拍卖行不行,当一个商品大家都在交易时,而且该商品的交易量巨大,如何去限制玩家呢? 和淘宝京东一样吗?显然是不可能的,所以目前楼主没有想到有效的办法,这种情况其实有点类似无限商品的秒杀场景,可是这是一个悖论,商品数量都是无限的了,为什么要秒杀呢?
而且其实扫拍并不是一个严重影响拍卖行服务器性能的问题,因为我们会发现,跨6拍卖行在晚上凌晨的时候会很快,难道商人扫拍这个时候就不扫了吗,其实这也能表明我们普通玩家才是主力。
只是转载,侵权必删!
|