00:00
呃,项目的架构,那我们之前讲过了,你要搭建一个项目的架构有很多种方式啊,最起码你得了解整个项目的一个数据的流转过程,你才好搭建它的架构,比方说什么MVC啊,什么三层架构之类的啊,你得知道它的一个数据流转的过程,所以首先呢,我们先干嘛呢,把我们的这个项目的流转过程呢,我们先说一下,在我们这里呢,有个叫流程图,这个流程图当中啊,就有我们的一个流转的一个过程,所以我打开。打开以后呢,给它稍微的放大一些啊,给它放大一些,嗯嗯,我点一下啊来点一下嗯,太大了啊行,放到这也可以啊来,然后呢,我们这个地方来看看啊,把它放大,诶好,那我接下来呢,咱们一块来分析分析啊,首先第一个同学看一下我当前的这个位置是什么呀?叫call log,记住叫call log叫通话日志,也就意味着你打个电话,在我们的运营商那一边,就会把你这条数据给它记下来啊,就给它记下来,那么记下来以后会形成一个日志文件,这个日志文件在不断的增加,不断的增加,诶就这个意思,然后呢,你的数据在我们现在呢,就可以把它什么生成好了,你生成好了以后,但是我们的目的是什么,往这看。
01:14
我们的目的是不是把你通话的那些信息做个统计分析之后干嘛啊,给它放到我们的h base当中啊,那么我的每一次通话的信息我的都有了吧,那么统计完成以后再把数据给谁啊,给这。买circle啊,什么意思啊,我们最终是不是要在网站当中给它显示出来啊,而且你是个统计分析的结果,而不是每一条数据吧,那所以这样的话,统计分析的结果呢,数据量就没那么大,那没那么大的话,咱们放在买circleql里面形成一套关系,那么这样的话,我对用户来讲查询会更加方便,为什么呢?因为用户他会有相应的页面,比方说我写上我的账号是多少,然后呢,我要查询的什么月份,比方说2018年啊,然后呢十月份,然后呢,我一点个按钮,诶我一查,那这样的话我的数据呢就出来了,我数据一出来以后,那个图表就出来了,那这样的话非常的方便,所以呢,如果把这些条件我们加在我们关型数据库当中,这样的话是非常方便的,用起来也快啊,也方便我们的查询,你要用我们的h base,那就麻烦了啊,那你把每一个点呢都要考虑到,而且我们也讲过我们的h base呢,只是的查询你要多个条件,那么查询效率是不够快的,我们上午讲的那个叫。
02:30
它可以对我们某些值来做过滤,对吗?但是效率肯定不够高啊,那效率太慢的话也是不合适的,所以我们这里要做的话,并不会说直接通过Java代码呢,直接访问h base,我们不会这么做,我们要做的事情就一定是将h base的统计结果呢放到我们的MYQL当中,那好了,那这个简单,为什么呢?因为买circleql咱们是做我们的JDBC直接能够访问的,那而我们的h base你要想办法把它放过来,那么你的h base数据是哪来的?来自于我们的通话日志吧,对不对?那所以说通话日志的数据就非常重要了,可是我的通话日志它仅仅是一个log文件吧,它是个log文件,它怎么能够把数据放到我们的h base当中呢?所以这个时候就需要我们的一些其他的框架作为我们的什么支持了,所以我们的通话日志它怎么办,它要被什么采集啊,被我们的flu,那这是我们一个海量日志的什么采集的框架。
03:30
咱们要用它来采集一下,那么采集以后,但是你要记住我们的辅路啊,咱们为了让它能够什么存储一下,我们这里还要加个什么东西啊,卡夫卡,那好,我们呢,直接操作我们的蛤马哈度是非常方便的,但是我还是希望能够有个存储的一个过程,能均衡它的速率,所以在这种情况下,我们增加一个卡夫卡,正好咱们前面还学过了,学过了以后,那么卡夫卡呢,可以把数据怎么办?直接放到我们的h base当中,诶就这个意思,所以咱们前面学过的一些框架啊,在我们这里可以用得上,那么我们这里还有个什么东西啊,叫Spark流失数据分析,这个你们暂时咱们还用不上这个,在你们后面学的项目当中会用上这个东西啊,会用上Spark,所以你们后面学完再看啊,我们这里不介绍了,所以这块呢,我们是个叉啊,不用它,那好回过头来我们的卡夫卡呢,到我们的S,但你会发现有两个箭头指向了谁啊,指向主K吧,这个我们不会去用,为什么呢?这是。
04:30
框架的一个什么支撑啊,一个高可用的一个什么主keep的一个工具啊,这个呢咱们了解就行了,所以我们这里并不用它,我们的数据的来源还是一个卡夫卡到h base就行了,那么卡夫卡到h base之后,那我现在h base里面有数据了,我的每一条通话记录在我的h base里面都有了,那接下来我怎么能够把它放到买QL当中呢?你直接放也不可能,它应该有一个什么统计分析的过程,所以我们这里大家可以看到有个什么东西啊,叫M2,叫map对吧?那么我们的map当中,我们可以用have的方式,也可以用我们的什么雅的方式,我们这个呢就不什么不用它了,因为have呢跟base呢,它是两种不同的层面的东西,所以我们这里呢,不管它一个是数据库,一个是数数仓啊,这个呢,那就不用它了,所以我们这里呢,就简单一点,直接通过雅安的map呢,将统计的结果给它放到我们的MYS当中就可以了,但是你会发现这里多了一个东西。
05:31
这个叫output什么意思啊,叫输出吧,那么我们这个地方记住通过统计的分析结果放到买QL里面,没有直接的类能够帮我们做到这一点啊,没有直接的类,那我们就得自定义我们的输出,自定义我们的output啊,我们到时演示一下这种操作啊,所以啊,我们在map当中还得有自定义的这个功能存在,我们到时候也演示一下啊。好了,那么接下来我们现在的买circle这边已经有了数据了,那他如果有了数据的话,咱们往下来看,同学们看,那么买的下面是什么了,是不是就针对于我们的web server了,那么web server当中会有你们以前接触过的SS什么M吧,诶就是这样,然后呢,这边呢,还有什么呢?我的前端,然后这边还有我的移动啊,移动,那么我们这边这个咱就不考虑了,这个就不考虑了,什么手机APP之类的不考虑了,那我们这一边呢,就是一个前端了,那么前端当中就可能还有你们接触过的什么阿贾克斯。
06:31
自卑的啊,然后这边还有个东西叫1T,这个一呢,就是刚才给你们看的那个图表这个工具啊,是百度开发的第三方是吧,图表工具在全球在全球共享组件或者第三方共享组件当中排名第二。啊,排名第二,就这个东西啊,我相信你们一定会问第一是吧?啊第一呢,也是个中国人啊,做的叫I。
07:00
啊,这个你们不需要了解是吧,因为你们根你不学这个东西是吧,叫Le UI啊,但是我告诉你们啊,这个东西Le UI它为什么是第一呢?说的简单点,他是中国人发明的,中国人全是中国人在用,而且不光是中国人在用,全球至少至少超过30万到50万家网站全都在用它啊,它里面的功能非常的多,非常的多啊,非常多,很多的网站都有它啊,所以啊,这个呢,还是非常不错的啊,而且里面很多的那个组件全是免费的啊,那所以呢,用的就比较多了,他记住这叫UI啥意思啊,页面设计吧是吧,页面设计就是个网站设计,干这个事情用的,但你这个一叉呢,为什么排名第二呢?是因为不是每个网站都会有什么图表了,那就意味着有些网站就没有吧,但这个每个网站都有设计吧,那这个就会多,那这个就会少,那肯定是这样的,但是恰恰都是中国人开发的,那所以呢,中国人多啊,诶一下就什么排名第一第二的了啊,肯定是这样是吧?啊你这个主件。
08:01
全国在用是吧,一个小国家可能几十万人是吧,冰岛那样的国家是吧,几十万人,中国人呢,一百分之一是吧,在用可能几千万是吧,都不止啊,所以啊,这个没有什么好的办法是吧?嗯,所以呢,我们到时候给大家讲的时候呢,就把这些呢,就作为一个介绍啊,给大家演示出来就行吧,你要非得较真说老师这个怎么出来的是吧?没有时间给你们讲啊,给你们演示就完事是吧?所以呢,我们只会给你们在这一块呢,作为一个详细的一个介绍啊,告诉你们这个呀,这个呀,卡夫卡呀,是怎么一步一步的把数据给它读过来的,这个咱们会介绍,别的呢,就不作为重点了啊好了,这个呢,我们就说到这里啊,给大家简单的把这个数据的流转过程呢,我们来说一下啊,但是呢,光这么说呢,可能啊,光有个图形也不好,所以呢,我们接着往下来,下面呢,是我们电信客服项目的一个基础架构,跟刚才呢它差不多,只不过是用文字的方式把它描述出来啊好,那么现在呢,我们给它来打开。打开以后,首先我们的第一个啊,他说了叫生产数据,说的简单点就是要有那个日志文件出来了啊,然后呢,我们这里呢,看一看,他说了,我这里呢,既然是要有通话信息的那个数据,那么这里说了,我们要做的时候呢,需要生产我们的log数据,那么其中有一个叫随机生成电话号码,主教和被叫,主教被教能明白什么意思吗?什么叫主教,什么叫被教,我给别人打电话,我说不叫主教用户啊,他接电话他叫被调用户,对吗?啊,有这么一个概念啊,然后呢,随机生成通话建立的时间,也就意味着我们要模拟数据,我们要模拟打电话的数据,我们不能真正的去打呀,我们也拿不到这样的数据,那我们只能去模拟生产了,那你模拟生产的话,电话号码有了,接下来是我们的通话的时间,你不能通话时间太长啊,对不对,所以在这种情况下,我们要模拟一下,2002018年1月1号到201822019年的1月1号之间这一年,你随便给我找个时间给我打个电话。
09:59
啊,这就是我的通话时间,那么接下来呢,是我通话时长啊,比方说我打电话打了20分钟,诶打了30分钟,这个呢,也需要给它生成出来啊,那否则呢,我怎么知道你这个通话时长的总时长是多少呢?我可能不知道啊,还有下面呢,是将我们的数据呢,是吧,生成日志写入文件,就意味着我们要把咱们刚才的这些打电话的信息呢,要把它放到文件当中,那么这里写了每秒钟两条啊,你打电话的时间太频了,也不可能啊,所以我们这里呢,就简单点,每秒钟两条往那个文件里面生成,这就完事了,所以这是我们的生成数据这一块啊,接下来你数据有了,那么这个时候呢,就是我们的来采集我们的数据了,那么采集数据的时候,我的目的很简单,我要将你日志的数据给它采集之后放到卡夫卡当中,那么所以这里面就会涉及到这么几个环节,第一个source采集数据用的啊,那么它的采集我们要去监听我们文件对吗?诶,你的文件我要监听一下。
10:59
你监听以后,把我们的动态变化的数据给它采集出来,然后通过那个叫memory channel啊,内存当中的一个channel给它放到我们的think当中,而我的think用的就是卡夫卡think,这个卡夫卡在在咱们之前给大家讲卡夫卡时候,咱们讲过对吗?咱们还用过啊,所以咱们到时候还得去用一下啊,让大家更加熟悉一下啊,把数据采集过来,嗯,然后呢,接下来下面呢,就是我们的卡夫卡拉啊,把那个数据给你放到了卡夫卡的某一个topic当中啊,你放到topic当中,你放过来以后,那我要控制我们的消费者来消费我topic的数据了,也就意味着我可以通过两种方式,第一个控制台啊,我先看看我的数据能不能收到,如果能收到的话,我再编写相应的程序,把我们的接收的topic的数据呢,放到我们的h base当中,所以啊,我首先要分两步来做这个事,第一步先测试有还是没有,第二。
11:59
再把数据放到真正的目的地当中去,那么目的地就是我们的base了,所以接下来我们这边就是我们的base啊,那么它就是用来啊存储我们的数据的,把之前产生的数据给它存上,那么你存数据的时候,这里就说了啊,我们可能要做这么几件事情,第一个叫base u,咱们之前没有用U,没有用工具类,但是大家在写那个controller service和道的时候,你会发现那个道里面的很多代码是不是都是重复的,对吧?那既然是重复的话,我们给它封装一下,那么以后用起来就方便了,否则每一回都写一遍,每回都写一遍就会显得有点麻烦啊,在我们实际的开发当中不是这么做的,它不可能让你每一个都写一遍啊,不方便,这样的话你维护起来也非常的困难啊,所以我们这里到时候会什么呢?诶封装成工具类,而且我们封装的时候啊,还不仅仅像以前一样直接封装就完了,我们还要给大家讲解一些新的内容,比方说预分区,咱今天。
12:59
那我讲预分区了,但是讲的仅仅是一种思路啊,一种概念,那么我们真正的要在这个项目当中把这个预分区给它用起来,告诉你我们该如何来做预分区,该如何来设计那个key,咱们都会告诉你们啊,然后呢,下面呢是我们base door,那么这个door顾名思义就是访问数据库的数啊,我们的这个do啊,对箱我们这里就不不做那个什么controller service了,直接拿个到访问我们的h base就可以了啊,把一些数据库的操作那都封装进去啊,然后呢,我们消费数据到s base的保存,这个就涉及到Java的API了啊,通过Java的API来将我们的数据保存到我们s base当中啊,然后呢,下面呢还有查询数据啊,查询数据咱们到时候也会来用一下,还有一个叫鞋处理器,也就意味着我们在整个项目的学习过程当中,还会给大家引入一些新的知识,不仅仅是把前面的东西呢给他用一遍也不是啊,还要讲解一些新的内容在里面啊,所以我们到时候再讲这样的一些内容。
14:00
那么h base我们这边有了之后,那接下来我们要做的事情呢,就是通过我们的map来做统计分析,来将我的一些业务指标给它生成出来,比方说我们年度的通话记录,年度的通话时长,那这些指标,这些维度的数据,我们要给它都拿到,拿到了以后再放到满折扣去啊,你不能说把这个每一条数据给他拿到,那没有意义啊,一定是我们最终的统计结果啊,所以我们这里说了啊,我们首先从s space中要读取数据,然后呢,会把它分析六个维度的指标,和我们什么维度的一些聚合六个维度指标,然后呢,自定义给它输出到MY当中去,有了这种指标,有了这种参数,有这种条件,我们有了它以后呢,你放到MYSQL里面去就会更加准确啊,更加准确,用户用起来也更加的方便,所以我们到了买CL当中,在我们这边我们就会有我们的结果,有结果之后,那买C都有数据了,那你通过CDBC,通过框架直接读。
15:00
不把它展示在我们web当中就可以了,所以这里说了啊,使用前端框架从MYSQL中读取数据并展示在前端的页面啊,这个我们说了跟你们就关系不大了啊,咱们主要是把给大家演示一下就OK了啊,所以我们又通过文字上的描述呢,把这个项目的一个架构给大家介绍了一下啊。
我来说两句