黑马头条简述

黑马头条

技术栈:springcloudgateway微服务之前架构的网关服务,实现微服务注册的api请求路由,控制流速和熔断处理

Springbootalibaba Nacos作为项目中注册中心和配置中心

Mybatis-plus作为持久层提升开发效率

Kafka完成内部系统消息通知,与客服端系统消息通知,以及实时数据计算

Redis实现热数据的计算,提升系统性能指标

Mysql存储用户数据,保证上层数据查询的效率

Mongo存储用户热数据,保证用户热数据高扩展和高性能指标

Minio作为静态资源存储器,在其上实现热静资源缓存等功能

Es搜索技术,对冷数据,文章数据建立索引,保证冷数据,文章查询性能

运用ai技术,完成系统自动化,提升效率和节约成本

黑马头条简述_第1张图片

 

常用的加密方式

可逆加密:

对称加密:密钥相同,算法公开,计算量小,效率高 算法:AES,DES,HS256 一般用于保存用户手机号,身份证等敏感信息

非对称加密:两个密匙,公钥私钥。安全性好,只适合对少量数据加密。一般用户签名和认证   RSA,DSA,RS256

不可逆加密:一旦加密就不能反向解密得到密码原文,一般用于校验文件正确性  MD5,BCrypt

Base64编码:网上常用的编码方式,传输8bit字节的编码方式,用于在http环境下传输较长的标识信息(编码方式,不算加密方法)

Token

基于token的用户认证是一种服务端无状态的认证方式(服务无状态就是token本身包含登录用户所有的相关数据)

Jwt是一个开发的行业标准,定义了协议格式,用于通信双方传递json对象,传递的信息经过数字签名可以被校验和信任

Jwt令牌结构由头部,负载,签名三部分构成,每部分中间使用点(.)分割   头部:令牌类型和使用的哈希算法  负载:是一个json对象存放有效信息  签名:防止jwt内容被篡改。前两部分用base64url将前两部分编码,使用点连接组成字符串

Freemarker 模板引擎,基于模板和要改变的数据,生成输出文本

模板编写为FTL语言,模板中专注如何展现数据,模板外专注展现什么数据  freemarker是springmvc的一种视图模式,默认支持

MINIO  对象存储服务,作为云存储的解决方案保存图片视频文档,使用Golang实现。兼容S3云存储服务接口—bucket Objet keys

特点:数据保护,高性能,可扩容,sdk支持,有操作页面

分布式id 雪花算法实现,与时间有关,mybatis-plus集成了雪花算法,在实体类的id上加入@TableId(value=id,type=IdType.Assign_ID)

Feign的实现1.在feign_api中新增接口,定义文章的接口@FeignClient(value=模块名)

  1. 在用户模块中实现该方法   3.在service中实现

用set保存图片地址去审核,去重图片地址

异步线程池

黑马头条简述_第2张图片

 

@EnableAsync  //开启异步调用

敏感词过滤 DFA算法(确定又穷自动机)

一次性把所有敏感词存储到多个map中

图片文字识别OCR 光学字符识别 Tess4j

延时任务  (定时任务的一种,在未来某一时刻执行,没有重复执行周期)

  1. JDK自带的DelayQueue支持延时获取元素的阻塞队列
  2. 数据库+redis实现

黑马头条简述_第3张图片

 

存储数据库是一种安全的考虑(备份机制)

Redis的key值匹配

  1. keys的模糊查询,慎用,redis是单线程的,会被阻塞
  2. Scan命令是一个基于游标的迭代器,scan命令每次调用都向用户返回一个新游标

分布式锁:控制分布式系统有序的对共享资源进行操作,通过互斥保证数据的一致性

数据库:基于表的唯一索引

Zookeeper:根据zookeeper中的临时有序节点排序

Redis:使用setnx命令(如果 key 不存在则为 key 设置 value,如果 key 已存在则 SETNX 命令不做任何操作

Long类型转换精度丢失  jackson进行序列化和反序列化(在实体类上加@IdEncrypt

Mongodb 开源的,高性能,无模式的文档型数据库

Es搜索引擎 ik分词器ik_max_word细粒度分词器  ik_smart粗粒度分词器

判断是否是热点文章标准:点赞数,评论数,阅读数,收藏数

定时计算

黑马头条简述_第4张图片

 

定时任务框架

  1. spring的传统定时任务@Scheduled  任务失败无法重试和统计,集群的重复执行问题
  2. Xxl-job轻量级的分布式任务调度平台 易于监控运维,高可用

黑马头条简述_第5张图片

 

流式计算  输入是持续的,计算结果是持续输出的。对实时性要求较高,尽量采用增量计算代替全量计算   技术选型Kafka stream

持续集成 (CI) 频繁的将代码集成到主干 Jenkins流行的开源持续集成工具,广泛用于项目开发,具有自动化构建,测试和部署的功能

负载均衡服务器nginx:将请求转发给后端的java微服务端

一个微服务可以部署多份

Nacos注册中心,每个微服务启动之后都可以把自己注册到注册中心中,注册成功就可以拉取注册表(ip和端口)

微服务之间相互调用feign

分布式基础服务:

黑马头条简述_第6张图片

 

Kafka:分布式消息系统,实时处理大量数据

Es:分布式搜索数据分析引擎

Minio;分布式的对象存储系统

Mongodb:分布式文件存储的数据库,C++编写的 为web应用提供可扩展的高性能数据存储方案

所有请求响应数据都是json数据,请求参数用dto或pageRequestDto(分页的)接收

响应用Responseesult或PageResponseResult(分页的)

垂直分库:数据库拆分为多个数据库,按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上,它的核心理念是专库专用

技术架构:ssm+spingCloud+mysql+mongdb(分布式关系型数据库)

 

开发接口:1.需求分析  2.表结构   3.api接口文档   4.三层结构开发:controller,service,mapper

加密算法:bcrypt(不可逆加密)

开发中用的都是伪随机数(代码生成),真随机数(硬件生成)

Jwt生成token。解决分布式环境下session同步的问题,生成jwt令牌,解析jwt令牌

Jwt:主要使用对称的加密算法,hs256

Header:签名的加密算法   payload(载荷)数据   signature:签名

网关统一认证token

网关:统一处理请求,请求转发,过滤。场景:限流,日志,认证,跨域

过滤用过滤器(全局过滤器),转发用路由(动态路由)

动态路由使用了负载均衡,提高了性能

网关如何认证token:1.请求路径放行 2.获取请求头token  3.token非法401  4.token解析失败  5.token合法放行

自定义mapper写动态sql实现:固定条件:状态正常,固定条数limit,排序方式(order by)

动态条件: ?用#{}代替   < 小于 > 大于

文章内容不会经常变,查询效率高且要求响应快用生成静态页面的方式

freeMarker 静态模板引擎(后缀ftl的模板)

两种方式:数据+模板 动态渲染+静态渲染

Minio:bucket桶  keys  object

有上传需求的加minio的依赖,谁用谁加

如何判断用户是否登录:1.getewayFilter+interceptor+ThreadLocal业务代码里通过ThreadLocalUtil.getUserId()

  1. getewayFilter+interceptor拦截器发现请求头userId无值,统一响应未登录错误

创建唯一文件名  UUID+后缀

分页生效添加分页拦截器。分页查询逻辑:设置分页参数,动态拼接查询条件,page执行分页查询,封装PageResponseResult

多对多的关系一般用中间表

业务严谨性代码,一般在业务处理入口。参数是否为空,参数值是否合法,数据是否存在,数据状态是否正确

审核:高效审核

审核内容全面:文本,图片,图片中的文本(用tess4j识别)

三轮审核:dfa审核(自定义的敏感词) 阿里云文本审核 阿里云图片审核

Dfa使用步骤;1.初始化词库 2.检测文本  3.得到map响应结果

阿里云审核得到suggestion的处理结果,block审核失败,review不确定人工审核

线程池异步审核:1.待审核数据(全部文本,全部图片地址) 2.三轮审核  3.决定如何发布文章

Feign的使用 规范:1.在feign-api模块中定义feign接口类  2.在提供方模块中定义controller实现feign接口类   3.在调用方启动类开启feign扫描并注入feign接口类

Kafka理论:单机有序,集群无序

kafka体系:

黑马头条简述_第7张图片

 

Partition分区的好处:实现三高高吞吐,高性能,高可用

Offset偏移量

秒分时日月周

MongoDB高性能开源的无模式的文档型数据库,是非关系型数据库

ACID原子性一致性隔离性持久性

使用场景:海量数据存储,读写性能要求高,事务要求不严格,数据结构不定

你可能感兴趣的:(java,java,开发语言)