互联网项目的图片服务器的特点

  • 海量数据
  • 高并发

    1. 分布式文件系统

    image.png

    1.分布式文件系统的特点

    1.减轻单个服务节点的压力 (搭建集群,数据不同)
    存储数据的压力
    并发的压力
    2.高扩展 (搭建集群)
    3.高可用 (搭建主从关系,数据同步,一样的)

    2. 分布式文件系统选择七牛的原因(面试)

    本项目中将采用七牛云服务来处理项目中的图片,选择七牛云的原因如下:(面试)
    1.成本低
    七牛云在商业图片服务器中,其成本低,无需前期投入。七牛云对象存储按需使用、按需付费的便捷性,能够有效避免存储及带宽资源的闲置浪费。
    2.存储加速
    边缘存储可充分利用可用链路带宽,数据在边缘节点上传和下载可平均提速 60% 以上, 此特点为 CDN 的特点。
    3. 易扩展
    利用七牛云对象存储,您的存储空间无上限的同时也无需担心扩容问题。您能够实现存储需求的弹性伸缩,从而提高业务灵活性。
    七牛云上传文件的逻辑:
    如果key不存在,直接上传
    key一样,文件一样,hash值一样,不操作;
    key一样,文件不一样,hash值不一样,报错

    2. 课程图片上传的流程

    1. 课程上传时序图

    image.png
  1. 都有哪些服务
  2. 每个服务都做什么
  3. 整体流程

有前端、内容管理微服务、文件系统微服务、文件云平台参与图片上传。

  • 先由前端发起请求访问内容管理服务,再由内容管理服务调用文件上传服务来获得上传凭证返回前端。
  • 前端获得上传凭证后携带凭证将文件上传云平台,保存成功后云平台返回文件key。
  • 前端解析文件key内容并生成文件访问路径。

这里的文件系统服务为何要单独体现?
因为项目使用的是微服务框架,所以一个微服务要体现单一性,可复用性
看时序图的过程:从左到右,从上到下
实现的过程:从右到左,从上到下,因为 先定义路径接口地址,才能知道调用什么传递什么参数

2. 上传文件的安全性

  • 生成上传的凭证
  • 设置凭证的失效期
  • 对凭证进行加密

课程审核业务分析

  • 教学机构提交课程
  • 运营平台查询所有课程
  • 运营平台审核课程

    3.课程审核

    1.课程审核流程

    教育机构课程信息录入并且提交课程信息,由运营平台审核课程内容。
    内容审核通过后,才可以课程发布。
    内容未审核,教学结构继续修改课程信息,并提交课程信息,运营平台再来审核。
    image.png

2. 课程审核业务需求

需求:

  • 教育机构提交课程信息,只有未提交和审核未通过状态的课程允许提交
  • 平台可以查询所有机构的课程信息
  • 平台只能对已提交状态的课程信息进行审核,并且只能选择审核通过或者不通过

    4. 课程提交、查询与审核的业务分析

    1.课程提交功能-教学机构

    需求:

  • 教育机构提交课程信息,只有未提交和审核未通过状态的课程允许提交

接口:
image.png
业务分析:

  1. 是否开启事务
    • 修改-开启
  2. 判断关键数据
    • courseBaseId 课程id
    • companyId 机构id
  3. 判断业务数据
    • 课程基础信息
    • 判断是否存在
    • 判断是否删除
    • 判断是否是同一家机构
  4. 判断审核状态—必须是未提交和审核未通过的
  5. 修改课程审核状态为—已提交

    2. 课程信息查询-运营

    需求:
  • 平台可以查询所有机构的课程信息

接口:
image.png
业务分析:

  1. 判断是否开启事务
    • 查询-不开启
  2. 判断关键信息
    • 分页数据
    • 查询条件
  3. 构建mp分页对象
  4. 构建查询条件对象(机构id设置为平台标记固定值)
  5. 查询信息封装PageVo类返回前端

    3.课程信息审核-运营

    需求:
  • 平台只能对已提交状态的课程信息进行审核,并且只能选择审核通过或者不通过

接口:
image.png
业务分析:

  1. 是否开启事务
    • 修改-开启
  2. 判断关键数据
    • 课程id courseBaseId 审核状态 auditStatus 审核意见 auditMind
  3. 判断业务数据
    • 课程基础信息
      • 判断是否存在
      • 判断是否删除
      • 判断审核状态,必须是已提交
  4. 审核状态
    • 运营平台只能给课程审核状态赋值:审核通过、审核未通过
  5. 修改审核状态信息
    • 审核状态 auditStatus 审核意见 auditMind 审核次数 auditNums
    • (审核次数为原次数+1,例:nums=nums+1)