00:00
好,各位同学,接下来我们就模拟淘宝网站首页这样的一级UV的ready统计方案,咱们呢尝试着做一个通过lolo,下面呢来看一下我们的需求。UV的统计我们需要去重复,一个用户一天内的多次访问只能算作一次,咱们以IP地址来决定这个人是不是同一个啊。第二个淘宝天猫啊,京东啊,拼多多啊,这样的首页,就这个他每天的首页点击量和访问量大概是一到1.5个亿左右,如果我们每天要存1.5个亿的IP,假设都不重复啊,访问者来了后,先去查是否存在,那么不存在再加入,那么又是我们原来说过的这种大数据,第一个你要存的进去,第二个你能够取得出来,还要取得快,第三个多维度的统计和展现,那么接下来我们来讨论讨论我们的方案,因为这个时候比如说老板跟你说,你告诉我我们淘宝每天有多少人访问呢?你说你不能说这个需求我们做不了,这个需求是提的,是不合理的。
01:08
那弟兄们那麻烦了,要不要精确呢?好假设啊,就是1.5个亿第一种。杨哥简单,反正有什么东西往MYCQ里面装,MYQ它是个框,哪里不够哪里装,你别忘了一极,甭管你分库分表,买CQ是扛不住的,而且这些都是些统计数据,那么这个时候你天天往里面买CQL灌,买CQ单表300万就已经非常吃力了,虽然说他实验室的理论数据是500万以上在建议你分库分表,但实质而言,300万在高频华的系统,他已经开始系统性的有点衰减了,好,所以不解释啊,你接下来来杨哥抖ready。哈希结构,那无非就是这个key,好,那么我们都知道这个哈希啊,比如说h set,比如说这个叫淘宝IP可以吧,那么假设这个IP叫192.168.111.1,然后他来了一次,另外一个IP22.109.68.5,他也来了一次,这不简单吗?我到时候我就统计一下这个淘宝IP,今天访问了来一个IP,我呢就记录一次,来一个IP我呢就记录一次,这不很简单,如果是同样的IP最多干嘛,他这变成了一个二是吧,那杨哥我这儿可以统计啊,那h get what,爽死了,那么淘宝冒号。
02:36
IP行不行,那这个IP今天登录了一次啊,这个IP今天登录了一次啊,最后搞一下这个合并,哎呀,取个交集什么之类的,不就完活吗?怎么来吧,兄弟们老眼假设啊,这是某一天的UV,这个P一次,这个IP次等等等等,妥了,那就是算算嘛,有多少条记录是不是,那么这个T里面有多少个S,数据量是多大,统计完了呀,我当然可以做了,不难杨哥小问题,这个思路正不正确,非常正确,但是弟兄们不好意思啊。
03:09
如果我们用哈希结构这个T对IP每天每一次就加个一,重复访问加个二,再访问加个三,按照IP的V结构来说,每个IP地址最多是15个字节,对不对,那么就说我们大家都清楚IP嘛,最多255 25255嘛,对吧,那么大家请看。三四十二个叉叉,然后三个点12加三是不是15个字节,那么像某一天1.5个亿乘以15个字节,两个G,一个月60个G,两个月120个G,三个月180个G,你告诉我你这个是不是在内存里面,我光是一个某个哈希,那不是大K这个big k这个问题是very very big k这个问题了,那么一个月就是60个G,三个月,那么一年呢,十个月呢,600个G。我的妈呀,那你这个red死定了啊,当然你说你那羊哥我每天杀,但是你告诉我一个月60个G,他能做这个思路没有错,但是不是不是最佳答案,所以大数据难,难在哪?你的思路没有错,百万级别可以实现,但是千万级亿级的话你就死定了,所以这个你别怕。那么接下来我们就要用一下我们的red给我们提供的版助,还per log log,我只给你提供一个统计数据,相当于我只存了一条记录,当然很轻松啦。再次强调,12KB就可以统计二的64次三个不同元素的基数,我会自己内部帮你算,那么来吧,他为什么只需要12KB呢?
04:42
Red安特雷斯的设计,16384个桶分母,那给你限定了它是使用二的十四次方,就是16384个桶,那么按照上面的标准就是误差是0.81,前面讲过精度是相当高了,就是99%的正确率,这个纯度已经非常纯了,那么使用了一个浪型呢?哈希值的前14个比特Y用来确定铜的编号,也就是说六位。
05:05
他只用前六位,那两位他不用,那么剩下50个比特用来做基础估值,那么二的六次方就是64,所以只需要六个比特表示下标的值。一般情况下,一个还派logo的数据结构占用内存大小为16384啊,除以乘以六,因为它总共是这么一个桶是16384个,它最多只占用六位,那么乘以那么多位数,再除以82KB,所以它就可以搞定上面红框框这句话,那么在ready当中就称为密集存储,OK,好,那么同学们这个就是hyper log log的方案和存储原理。那么接下来老规矩controlr了,Service写起来,结合我们的微服务来给同学们做一下这个统计。不废话,需求明了,方案对比还log log结合Java、微服go service controltr了。那么该如何写呢?下面请听我分析。
06:02
第一个我们这就需要有一个后台程序,模拟不同的IP地址来点击我们这个淘宝首页,对吧。那么我们需要有一个后台的程序,不停的产生不一样的IP地址,作为一个UV来进行访问,那么第二个我需要统计,那么怎么个统计呢?来,弟兄们。无非也就是什么我们这两个命令的使用,每一个IP过来了,P fatd加进来,最后告诉我,因为它会天生自带的驱虫,它是基数统计,所以这个里面只有一条记录,就是一个一个不同的IP地址。那么接下来讲完了,我们呢,先来看一眼杨哥节约时间,SERVICE100%要调我们的red temp,对吧,然后呢,Controlt出了,要调我们的hyper log log service,那么结合我们的spring加我们的S哥走,那么第一个弟兄们,我们呢,要能够完成和处理的问题,是不是要搞一个初始化,那么VO,那么就是我们的unit IP,那么假设啊,我们这就是模拟一堆IP能够来点击我们的后台,那所以我们这post constructor,那么这个是什么,在spring里面我们都详细讲过啊,那么咱搁到这,那么这我们干嘛呢,就是。
07:28
模拟后台有用户点击淘宝首页对吧,这3W点淘宝点。com这么一个页面,每个用户来自不同的IP地址,妥了,那么来了,那弟兄们,那么问题是这个怎么模拟呢。那么来直接起个线程,那么这个线程啊,就是一个后台模拟这个线程呢,就运行了,嗯多少呢,比如说是啊string IP现在这呢,是等于一个呢,然后完了以后我们这200啊,我们这次呢,就是比如说这一个线程。
08:13
有相当于说后台启动了一个线程模拟,有200个用户来点我们这个淘宝首页,那么他点的话,他要干些什么呢?那么怎么来模拟这个IP呢?那么首先我们来分析啊,弟兄们,这个IP是不是就是255.255.25.255最大是这么一个,当然最后一个是不是零对不对?那么换句话说,这个数字的范围是不是叫255,那么我们要模拟的话叫有四个2555范围以内的随机数,结合那些点点号拼起来一个IP地址,没错吧?所以各位亲,我们这要random random,然后呢,我们的这个IP就等于我们的随机数点next。In桃多少是不是256听懂,那么就加上一个点点,再加上一个我们随机数256,弟兄们这么说听不听得懂,这个没问题吧,那相当于说就192.168.2111.1,然后再加上我们的一个IP。
09:27
OKOK吗?那么现在啊,如果说你不好看的话,我就给它甩过来。弟兄们,这个是不是相当于模拟了一个四位的IP吧,那么来了,接下来IP地址是有了,那么我们的right.ops啊,注意这是不是有。操作for hiper log log.a那么假设我们这个key就叫per log log,当然你可以叫什么淘宝点IP啊,天猫点IP随便你啊,那么我们就最粗糙的一种写一个IP还log log,然后这就是我们的IP,这么说能跟上,那么弟兄们大家请看log.in four,那么这个时候我们这儿就是IP9。
10:17
等于多少,那么相当于说这个就是该IP地值访问首页的次数,OK,那么来吧,现在正常情况下是不是每次IP访问一个,那么这个就是IP,那么这个就是highper log log OK,来,那么在这啊,点搁到这,那么就是我们的一个浪形。完活好了,那么接接下来我们要模拟的像个像回事啊,那假设也不能太快,不能太慢啊,比如说我们这就这个,嗯,三秒钟吧,好吧,同学们,我们为了好看一点,会了好讲课啊,暂停三秒钟,那下来说每三秒钟就有一个人点击一下我们的这个首页,好看一点,OK,后台打出来的看着像这么一回事,好了,那么这是一个程序的初始化过程,一个线程后台启动了一个模拟,点击访问首页的那么200个IP。
11:21
还lo存进来,那么来吧,对外暴露public,那么接接下来这就是个UV这么一个方法,那杨哥怎么给它暴露出去呢?说白了是不是就是我们这儿还per log log的这一个命令的Java程序命令的编写,这么说听不听得懂?那么来吧,干嘛,是不是red,诶,Red tempate.op for hyper log log点谁是不是我们这儿有个叫size啊?那么其实这个size等价于不是上面我们这个命令PF count谁呀?那么我们这个key是不是叫hyper log log,那么点2RETURN搞定,那么这个时候有人点着只要来一个IP,我就存到我们的这个hyper log log这个key里面,那么待会是不是又是一个去重统计的一个过滤素,OK,好了,那么service我们呢?
12:18
完成,那接下来service完成以后,那么弟兄们,那么control怎么写呢?那么来了public long UV,好,那接下来那么也就是我们的hylo log service.uv这么一个方法,你给我弹回去就完了,那么老规矩是不是我们的斯瓦哥API operation对于方法的说明,那么就是获得IP去。重复。厚的。UV统计访问量好了,这是一个第二个,那么是不是就是我们的rest map品这随便你爱用什么用什么了啊value来,那么搁到这,那么我们就UV方法,那么就是request master.get OK,好,兄弟们打完收购,那么接下来我们呢,启动一下我们的微服务的程序,好,我呢先暂停一下录屏等程序启动,那么同学们请看啊,这块程序已经启动来我们这后台写了个程序怎么着,是不是模拟IP,这个该IP访问页面的次数实机,那么也就是有一个反问了,有一个反问了,这么说能跟上没问题了吧,妥了,那么接下来呢,那么弟兄们我们呢,是不是local host苏瓦哥过来,那么大家请看,这是不是就是我们的淘宝一级UV的统计方案,那么我们在这儿尝试执行一下,点击一下我们弟兄们请看。
13:50
现在是不是就是13,哎,说明现在P,比如说count hyper log log多少15了,因为每三秒就有一个人反问,所以呢,我们就通过这样的程就可以把我们的首页统计通过我们的微服务给你记录下来,那么大家请看我们后台模拟了是不是不同的IP,再点击着在反问着对不对,反正只要是同样的IP是加不进去的,那么这个时候弟兄们我们就会明白这样的UV统计是不是才是我们正确率达到99%的。
14:22
大数据的一级流量系统首页浏览的统计量,OK,这个就是hyper log log对我们的落地案例的使用情况,那么请同学们可以尝试着练习一下这个案例。
我来说两句