飞狗头条项目实战(一)

文章目录

  • 前言
    • 项目术语定义
  • 1. 项目需求
    • 2.1 APP主要功能大纲
    • 2.2 APP用例图(主要功能)
    • 2.3 WeMedia系统功能大纲
    • 2.4 WeMedia用例图(主要功能)
    • 2.5 Admin功能大纲
    • 2.6 Admin用例图(主要功能)
    • 2.7 其他需求
  • 3. 项目技术介绍
    • 3.1 技术栈-基础六层技术
    • 3.2 服务层技术
    • 3.3 技术栈分布
  • 数据库设计
  • 4.1 ER图设计
  • 4.2 分库设计
    • 4.3 核心数据流转图
    • 4.4 冗余设计
  • 5. 后端工程结构
    • 5.1 后端工程说明
    • 5.2 开发环境说明
  • 6 后端开发-通用说明及开发规范
    • 6.1 后端接口开发规范
      • 6.1.1 开发原则
      • 6.1.2 开发步骤
      • 6.1.3 接口版本规范说明
      • 6.1.4 接口通用规范

前言

  飞狗头条项目是对在线地销平台业务进行大数据统计分析的系统。碎片化、切换频繁、社交化和个性化现如今成为人们阅读行为的标签。飞狗头条对海量信息进行搜集,通过系统计算分类,分析用户的兴趣进行推送从而满足用户的需求。

项目术语定义

  • 项目:泛指飞狗头条整个项目或某一项目模块

  • 工程:泛指飞狗头条某一项目的源码工程

  • 用户:泛指飞狗头条APP用户端用户

  • 自媒体人:泛指通过飞狗自媒体系统发送文章的用户

  • 管理员:泛指飞狗头条管理系统的使用用户

  • App:泛指飞狗头条APP

  • WeMedia:泛指飞狗头条自媒体系统

  • Admin:泛指飞狗头条管理系统

1. 项目需求

项目需求功能模块结构
飞狗头条项目实战(一)_第1张图片

2.1 APP主要功能大纲

飞狗头条项目实战(一)_第2张图片

2.2 APP用例图(主要功能)

飞狗头条项目实战(一)_第3张图片

2.3 WeMedia系统功能大纲

飞狗头条项目实战(一)_第4张图片

  • 内容管理:自媒体用户管理文章页面,可以根据条件进行筛选,文章包含草稿、已发布、未通过、已撤回状态。用户可以对文章进行修改,上/下架操作、查看文章状态等操作

  • 评论管理:管理文章评论页面,显示用户已发布的全部文章,可以查看文章总评论数和粉丝评论数,可以对文章进行关闭评论等操作

  • 素材管理:管理自媒体文章发布的图片,便于用户发布带有多张图片的文章

  • 图文数据:自媒体人发布文章的数据:阅读数、评论数、收藏了、转发量,用户可以查看对应文章的阅读数据

  • 粉丝画像:内容包括:粉丝性别分布、粉丝年龄分布、粉丝终端分布、粉丝喜欢分类分布

2.4 WeMedia用例图(主要功能)

飞狗头条项目实战(一)_第5张图片

2.5 Admin功能大纲

飞狗头条项目实战(一)_第6张图片

  • 用户管理:系统后台用来维护用户信息,可以对用户进行增删改查操作,对于违规用户可以进行冻结操
  • 用户审核:管理员审核用户信息页面,用户审核分为身份审核和实名审核,身份审核是对用户的身份信息进行审核,包括但不限于工作信息、资质信息、经历信息等;实名认证是对用户实名身份进行认证
  • 内容管理:管理员查询现有文章,并对文章进行新增、删除、修改、置顶等操作
  • 内容审核:管理员审核自媒体人发布的内容,包括但不限于文章文字、图片、敏感信息等
  • 频道管理:管理频道分类界面,可以新增频道,查看频道,新增或修改频道关联的标签
  • 网站统计:统计内容包括:日活用户、访问量、新增用户、访问量趋势、热门搜索、用户地区分布等数据
  • 内容统计:统计内容包括:文章采集量、发布量、阅读量、阅读时间、评论量、转发量、图片量等数据
  • 权限管理:超级管理员对后台管理员账号进行新增或删除角色操作

2.6 Admin用例图(主要功能)

飞狗头条项目实战(一)_第7张图片

2.7 其他需求

飞狗头条项目实战(一)_第8张图片

3. 项目技术介绍

3.1 技术栈-基础六层技术

  基础六层中包括前端(Weex、Vue、Echarts、WS)、网关(GateWay)、DevOps(单元测试、代码规范)等重难点技术。
飞狗头条项目实战(一)_第9张图片

  • Weex+Vue+WebSocket :使用Weex跨平台开发工具,整合集成VUE框架,完成黑马头条移动端功能开发,并集成WebSocket实现即时消息(文章推荐、私信)的推送

  • Vue+Echarts : 自媒体系统使用Vue开发关键,集成Echarts图表框架,完成相关粉丝画像、数据分析等功能

  • Vue+Echarts+WebSocket : 管理系统也是使用Vue开发,集成Echarts,完成网站统计、内容统计等功能,集成WebSocket,实现系统看板实时数据自动化更新

  • Spring-Cloud-Gateway : 微服务之前架设的网关服务,实现服务注册中的API请求路由,以及控制流速控制和熔断处理都是常用的架构手段,而这些功能Gateway天然支持

  • PMD&P3C : 静态代码扫描工具,在项目中扫描项目代码,检查异常点、优化点、代码规范等,为开发团队提供规范统一,提升项目代码质量

  • Junit : 在持续集成思想中,单元测试偏向自动化过程,项目通过Junit+Maven的集成实现这种过程

3.2 服务层技术

服务四层中包括中间件(Kafka、Mycat)、计算(Spark、Neo4j、Hive)、索引、微服务、大数据存储等重难点技术
飞狗头条项目实战(一)_第10张图片

  • 运用Spring Boot快速开发框架,构建项目工程;并结合Spring Cloud全家桶技术,实现后端个人中心、自媒体、管理中心等微服务。
  • 运用WebMagic爬虫技术,完善系统内容自动化采集
  • 运用Kafka完成内部系统消息通知;与客户端系统消息通知;以及实时数据计算
  • 运用MyCat数据库中间件计算,对系统数据进行分开分表,提升系统数据层性能
  • 运用Redis缓存技术,实现热数据的计算,NoSession等功能,提升系统性能指标
  • 运用Zoookeeper技术,完成大数据节点之后的协调与管理,提升系统存储层高可用
  • 使用Mysql存储用户数据,以保证上层数据查询的高性能
  • 使用Mongo存储用户热数据,以保证用户热数据高扩展和高性能指标
  • 使用FastDFS作为静态资源存储器,在其上实现热静态资源缓存、淘汰等功能
  • 运用Habse技术,存储系统中的冷数据,保证系统数据的可靠性
  • 运用ES搜索技术,对冷数据、文章数据建立索引,以保证冷数据、文章查询性能
  • 运用Sqoop、Kettle等工具,实现大数据的离线入仓;或者数据备份到Hadoop
  • 运用Spark+Hive进行离线数据分析,实现系统中各类统计报表
  • 运用Spark Streaming + Hive+Kafka实现实时数据分析与应用;比如文章推荐
  • 运用Neo4j知识图谱技术,分析数据关系,产出知识结果,并应用到上层业务中,以帮助用户、自媒体、运营效果/能力提升。比如粉丝等级计算
  • 运用AI技术,来完成系统自动化功能,以提升效率及节省成本。比如实名认证自动化

3.3 技术栈分布

飞狗头条项目实战(一)_第11张图片

  • 【分层】 :项目技术按分层分类,涉及前端、后台、数据采集、中间件、业务数据存储、大数据存储、大数据应用、知识图谱、AI等9个层面的技术
  • 【领域】 :项目技术按领域分类,涉及MVVM、图表、跨终端、微服务、消息中间件、数据库中间件、爬虫、大数据存储、大数据流计算、大数据分析、知识图谱等22个领域的主流技术
  • 【技术】 :项目共涉及22个主要技术框架的综合运用

数据库设计

4.1 ER图设计

飞狗头条项目实战(一)_第12张图片

4.2 分库设计

飞狗头条项目采用的分库分表设计,因为业务比较复杂,后期的访问量巨大,为了分摊数据库的压力,整个项目用的不只是一个数据库。其中核心库有5个,每一个数据库解决的是一个业务点。

飞狗头条项目实战(一)_第13张图片

  • AppInfo app信息库,主要存储用户信息,文章信息,用户动态,用户评论,用户认证等信息
  • Behavior 用户行为库,主要存储用户行为,包括用户的转发,点赞,评论行为等
  • WeMedia 多媒体库,主要存储多媒体人图文数据统计,账号信息,粉丝相关信息等。
  • Crawlers 爬虫库,主要存储从网络上爬取的文章信息等。
  • Admin 后台管理库,主要存储后台管理员的信息。

4.3 核心数据流转图

飞狗头条项目实战(一)_第14张图片
项目中的文章采用了多库设计的方式,以减少高并发情况下核心数据库表压力,共计设计为三个库表:

  • ap_article:APP用户读取文章数据和记录次数
  • cl_news:爬虫爬得文章数据
  • wm_news:自媒体用户发布的文章数据

cl_news和wm_news中的数据审核通过之后发布到ap_article中。

4.4 冗余设计

飞狗头条项目全部采用逻辑关联,没有采用主外键约束。也是方便数据源冗余,尽可能少的使用多表关联查询。冗余是为了效率,减少join。单表查询比关联查询速度要快。某个访问频繁的字段可以冗余存放在两张表里,不用关联了。

​ 如查询一个订单表需要查询该条订单的用户名称,就必须join另外用户表,如果业务表很大,那么就会查询的很慢,这个时候我们就可以使用冗余来解决这个问题,在新建订单的同时不仅仅需要把用户ID存储,同时也需要存储用户的名称,这样我们在查询订单表的时候就不需要去join另外用户表,也能查询出该条订单的用户名称。这样的冗余可以直接的提高查询效率,单表更快。
飞狗头条项目实战(一)_第15张图片

5. 后端工程结构

飞狗头条项目实战(一)_第16张图片

5.1 后端工程说明

后端工程基于Spring-boot 2.1.5.RELEASE 版本构建,工程父项目为fluttergo-leadnews,并通过继承方式集成Spring-boot。

【父项目下分4个公共子项目】:

  • fluttergo-leadnews-common : 是整个工程的配置核心,包括所有集成三方框架的配置定义,比如redis、kafka等。除此之外还包括项目每个模块及整个项目的常量定义;

  • fluttergo-leadnews-model :项目中用到的Dto、Pojo、Mapper、Enums定义工程;

  • fluttergo-leadnews-utils : 工程公用工具类项目,包含加密/解密、Date、JSON等工具类;

  • fluttergo-leadnew-apis : 整个项目微服务暴露的接口的定义项目,按每个模块进行子包拆分;

【多个微服务】:

  • fluttergo-leadnews-login:用于实现APP+自媒体端用户的登录与注册功能;
  • fluttergo-leadnews-user:用于实现APP端用户中心的功能,比如我的收藏、我的粉丝等功能;
  • fluttergo-leadnews-article:用于实现APP端文章的获取与搜索等功能;还包括频道、标签等功能;
  • fluttergo-leadnews-behavior:用于实现APP端各类行为数据的上传服务;
  • fluttergo-leadnews-webmagic:用于实现文章数据的自动化爬取功能;
  • fluttergo-leadnews-quartz:用于封装项目中所有的调度计算任务;
  • fluttergo-leadnews-wemedia:用于实现自媒体管理端的功能;
  • fluttergo-leadnews-admin:用于实现后台管理系统的功能;
  • fluttergo-gateway:spring cloud 网关
  • fluttergo-eureka:spring cloud 注册中心

5.2 开发环境说明

项目依赖环境(需提前安装好):

  • JDK1.8

  • Intellij Idea

  • Tomcat 8.5

  • Git

6 后端开发-通用说明及开发规范

6.1 后端接口开发规范

6.1.1 开发原则

  • 自顶向下的设计原则:功能应该从表现层分析再到控制层、服务层、持久层逐层设计

  • 自底向上的开发原则:上层需调用下层,因此开发应从底层向上层逐层开发

    项目中开发的层次次序参考DB->中间件->持久层->服务层->控制层

  • 单一职责的开发原则:类或者方法提供的功能应该单一明确,特别越底层越应单一职责,以便维护

    项目中Mapper方法必须功能单一,参数明确,拒绝两种以上的持久逻辑使用同一个Mapper方法

  • 依赖倒置的开发原则:上层依赖下层,是依赖下层接口,并不是依赖下层的实现

  • 项目中每层都是通过接口调用Controller->Service->Mapper

6.1.2 开发步骤

  • 明确类定义:明确哪些是重用类,哪些是需要新增的类
  • 明确主键规则:确认操作表的ID生成规则,是Mycat主键,还是Zk主键
  • Mapper实现:查、改、删时注意是否使用mycat注解确认DN,插入时是否要插入主键id
  • Service实现:可用通过时序图帮助我们梳理实现逻辑
  • ControllerApi定义
  • Controller实现:简单的Service层调用
  • 单元测试

6.1.3 接口版本规范说明

随着业务的复杂,同一个接口可能出现多个版本,为了方便后期切换和AB测试,需要定义接口的版本号

  • 在某一个微服务下访问controller的时候在包名下加一个版本号,如下

    com.heima.article.controller.v1
    
  • 在访问具体的接口方法的url映射的时候也应该加上版本说明,如下:

    @RequestMapping("/api/v1/article")
    

6.1.4 接口通用规范

ID混淆 请求和响应的连续增长的ID需要经过混淆加密
Date数化 请求和响应的的时间字段,统一转换成13位时间戳
字符编码 请求和响应的内容字符集为UTF-8
支持多格式 响应结果支持JSON和XML,可通过Header Accept设置
URL格式 Url为全小写字符,多个单词用下划线分隔
token 请求头中存放当前用户的请求token(JWT格式)
t 请求头中存放当前请求的时间,用于基本的请求时效判断
md 请求头中存放当前请求的参数验签字符串(查询串排序MD5加密)
响应格式 响应格式只接受ResponseResult,code码需定义在AppHttpCodeEnum

你可能感兴趣的:(飞狗头条项目实战(一))