该项目是一个新闻资讯类的项目,类似于今日头条 ,可以给用户推荐一些技术类型的热点文章信息,也可以通过收集用户的一些行为操作,比如用户的点赞、评论、转发、收藏等操作,从而对这些行为进行计算并推送用户喜欢的文章,如果用户没有登录,则会默认推荐些热点文章给用户。

    该项目分为用户APP端,平台管理端;自媒体端;用户APP端面向的用户为需要获取资讯信息的普通用户;平台管理端面向的用户为管理平台的管理员,比如说统计文章的信息、报表之类的,后台管理的基本操作啊,用户管理,文章的人工审核以及审核从网络上爬取过来的文章等等;自媒体端面向的用户为发布文章的自媒体人;

    该项目的功能架构有,用户APP端:搜索文章、查看文章详情,广告栏、打赏、点赞、评论、收藏、关注、文章列表展示、实名认证以及个人首页等等;自媒体端:文章发布、管理文章、素材库、粉丝管理、处理留言、资产模块、个人资料模块、评论管理模块等等;平台管理端:自媒体资质审核、实名认证管理、资讯审核、商业广告管理、网站数据、频道、敏感词管理等。另外还有爬虫功能系统等

    该项目的技术架构为:spring cloud微服务架构,Mybatis plus 为数据层访问技术,有用到微服务网关,nacos注册配置中心,xxljob分布式定时任务,seata分布式事务管理、Kafka及KafkaStream消息队列跟及时流计算、全文搜索技术ES、缓存技术Redis,MySQL、MongoDB等;用户app端有web端、安卓端、ios端,CDN,将一些静态的资源放在CDN,加快客户端的访问速度,Nginx+LVS,做到负载均衡和实现拦截比如设置些黑名单和白名单之类的。前端他们用到的核心框架是weex+vue;

    文章保存-审核-自动发布的基本流程:在自媒体端,自媒体人保存文章并发布,同时会发消息给kafka到平台管理端,异步的进入自动审核流程,幂等校验是否已经审核,是否需要再审核,如果不需要则直接进入发布文章流程,如果需要审核,则通过dfa算法进行敏感词匹配,再通过调用阿里云云盾服务进行图片检测及文本检测,通过则进入发布流程,如果没达到发布时间,则结合xxl-job做定时发布,发布之后通过发消息到 Kafka,一方面,增量索引文章到es,一方面,将文章数据从自媒体端同步过来,另一方面,将文章详情数据跟文章详情HTML模板执行页面静态化,程序生成完整的文章详情HTML文件保存到文件服务器,大致就是这样

    除此之外,还做了些其他的后台模块,如平台管理端的 频道管理,敏感词管理、用户管理等等业务不是特别复杂的CRUD操作,大量的搬砖工作,较简单,自己可以独立分析需求独立定义接口实现具体的业务开发。

    我们在项目中,有时候某个业务功能,涉及到操作多个微服务下的数据库数据表,可能出现事务问题,在项目中我们用的是alibaba seata解决分布式事务的问题,@GlobalTransactional注解,配置seata使用相关配置文件及Java配置类,由于seata的AT模式全局事务一阶段数据库本地事务已经提交,使用SeaTa还需考虑全局事务是否引起其他业务访问数据的脏读脏写问题,需要使用seata全局锁,解决脏读脏写的问题,具体使用是通过在具体业务上使用@GlobalLock+@Transactional事务注解,解决脏读;在业务上使用@GlobalTransactional注解解决脏写;