我在做社交项目中的用过的技术栈

2022-05-13 10:50:14 浏览数 (1)

一:使用Docker实现了将不同的功能集做成了一个个的容器统一管理,Docker完全使用沙箱机制,相互之间不会有任何接口,而且容器性能开销极低.

二:项目中吐槽模块数据的存储使用了MongoDB,主要考虑因素是使用MongoDB(其中MongoDB点赞数 1如果用的是数据库springdata提供的mongodb(dao层继承MongoRepostory接口)那么需要先根据id查到这个实体,然后修改这个值再直接保存整个实体)这样势必需要进行两次io操作资源使用多(实际上我觉得MongoDB一般 1操作都需要直接用原生命令去写)

代码语言:javascript复制
//方式二:使用原生mongo命令来实现自增
//db.spit.update(("id":"1"),{$inc:{thumbup:Number Int(1)}})
        Query query=new Query();
        query.addCriteria(Criteria.where("_id").is(spitId));//criteria 标准
        Update update=new Update();
        update.inc("thumbup",1);
        mongoTemplate.updateFirst(query,update,"spit");
        //用这个方式,java代码与数据只进行一次操作,效率更高

三:项目中用redis实现了记录点赞的文章id和用户id整合,避免重复点赞,也有把文章和个人资料这些常用数据放在redis中

四:4.用ElasticSearch logsatsh ik分词器实现了搜索服务的开发 选用es的原因 ES本身作为一个搜索引擎,用来处理检索的任务再合适不过。你可以在线上项目中直接将内容写入ES以提供检索服务,也可以把以往的数据导入ES以处理特定的需求。

五:用户注册时,用lang3包生成6位验证码保存到redis并写成map已直接模式存入RabbitMQ队列中利用Aliyun短信服务发送到用户端,点击注册时比对缓存验证码和用户的验证码,如果一致则返回成功并删除缓存中该值

我第一次开发注册时候突然想起来忘了删除缓存中验证码,结果一条短信3分钟都有效,注册完了还能循环利用 哈哈哈哈哈,为什么用消息中间件做中间处理呢?主要是考虑到做可以异步处理和解耦,让用户可以不用等待而且跟阿里云这些外部程序的耦合度比较低

六 我们用JWT做了加密和鉴权-简单来说用BCrypt做了密码加密解密,用JWT做了鉴权 具体的: 1注册成功的密码入库时候我们使用BCrypt做了一个加盐加密 2登录时候首先用同样的盐去匹对,匹对成功后,我们生成一个token返回 3我们实现了HandlerInterceptor重写了前置拦截器做了一个解析token的校验,拦截处理除了登录外的所有请求得到token或者用户信息,在具体业务中我们会在service层根据解析情况进行不同的操作,比如添加好友时候需要用户token,删除用户需要admin token 4,前后端做一些约定:比如前端请求微服务时需要添加头信息Authorization ,内容为Bearer 空格 token

七 使用了springcloud统一各个模块 具体的: 1.使用Eureka做了服务器端,并在各个微服务模块添加配置使其注册到Eureka 2.使用Feign实现了各个微服务模块之间的调用(比如friend模块添加好友时候,user模块具体用户粉丝数 1等),并且在集群中可以利用其轮询处理特性实现负载均衡 3.部分功能业务在做Feign调用时候添加了熔断器(继承client并实现和处理)防止服务雪崩 4.添加了Zuul网关做统一的路由转发并加了ZuulFilter做保头措施 5.使用gitee结合Spring Cloud Config做了统一的线上配置管理 6.使用SpringCloud Bus消息总线结合RabbitMQ和actuator做了一个监听码云配置文件实现不重启项目而做到线上刷新配置文件

八结合gogs,Jenkins实现了持续各模块的集成

0 人点赞