2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > HRM人力资源管理平台项目分享

HRM人力资源管理平台项目分享

时间:2023-08-17 06:18:04

相关推荐

HRM人力资源管理平台项目分享

HRM人力资源管理平台项目分享

首先该项目我们是采用Git分布式版本控制工具,编写代码,提交代码(git add)(git commit),先执行git add,将变化的内容加入到版本控制,再执行git commit,进行代码的提交,再然后git push,git pull推送和拉取。仓库我们选择用的Gitee代码仓库。作为开发人员,我们其实只关心仓库地址和账号密码,仓库也可以选择GitLab(实际开发中用的较多)。该项目是一个人力资源管理系统,主要为提让找工作的人,能够选择特定机构的课程学习,并参与平台发布的招聘,而且还能参与一些活动。让招聘单位入驻进来发布岗位进行招聘,甚至委托培训机构培训合适的人才。对于培训机构可以发布课程,吸收学员来完成学习并通过收取学费获取商业价值。项目采用前后端分离技术开发实现。前端使用Vue技术栈,后端使用SpringBoot搭建单个服务,SpringCloud治理服务。后端中Eureka注册中心,用于服务的发现与注册,Feign用于服务间的负载均衡调用,Hystrix断路器,保证微服务的健壮,防止雪崩,Zuu网关,微服务的统一入口,Config配置中心,将配置文件统一管理。在项目中我们使用Mybatisplus代码生成器,Mybatisplus对Mybatis做了增强,不做修改,使用更加方便。项目中我们使用了分布式文件系统,为什么要使用?因为集群和分布式环境下必须使用分布式文件系统统一管理项目中的文件,方案选择可以选择别人搭建好的(阿里云),也可以选择自己搭建(hdfs、fastdfs)。hdfs一般用于大数据,fastdfs一般用于中小型项目,数据量不是特别大,我们选择的是fastdfs。其中fastdfs架构中有Tracker,是负责调度和负载均衡的,Storager是存储文件的地方,Storager分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有主从的概念。使用fastdfs实现文件上传的流程:当客户端发送上传请求的时候 请求先连接storager 然后由storager去查询可以调用的storager,然后把storager的信息(ip和端口)返回给客户端,当客户端收到端口后,直接上传文件到ip和端口对应的storager 并且storager 在保存文件之后会生成一个file_id,然后传给客户端,然后客户端把file_id存储到数据库,以后可以通过file_id直接获取文件。 在课程类型管理类型树种,为了获取无线级别的课程类型,我们采用了循环+map,首先查询所有的类型放入List中,再将List中的所有类型放入Map中,Map的key为类型的ID,Map的value为当前类型对象。对List中所有类型进行遍历,如果是一级类型,则放入结果的List集合中,如果不是一级类型,则到Map中根据类型ID找到对应的父类型,将当前类型添加到父类型的children集合中。由于使用课程类型的地方非常多,并发非常高,所以我们对课程类型做了优化,优化方案选择:后台管理采用缓存。用内存查询替换数据库磁盘查询,经常查询,很少修改。前台课程主页采用页面静态化,以不发请求静态页面代替要发请求静态页面或者动态页面.没有对后台数据获取,这样每次访问的是html静态页面,不能访问数据,只要数据发生改变,就要重新生成新的静态页面替换原来的静态页面。页面基本不会变,除了数据。缓存方案的选择是redis中央缓存,流程是:发送请求时,先到redis缓存中查询,如果redis查询不到,再查询数据库,并且缓存到redis中,然后返回数据,下次查询时候直接从缓存中返回数据而不用查询数据库了。在使用redis时遇到一些问题,缓存穿透,就是访问数据库中不存在的数据,如果并发量很高,则直接穿透了redis缓存,大量数据直接访问数据库,会造成数据库宕机。解决方案就是使用布隆过滤器,或者如果数据不存在,就设立一个空值到redis中,并且设置过期时间。还有就是缓存击穿,热点数据失效的同时大量请求访问,就造成了击穿,解决方案是使用同步代码块+双重校验锁的形式进行数据库的查询。还有就是缓存雪崩,就是同一时间,大量缓存失效,解决方案是均匀分配过期时间。项目中我们使用全文检索服务器elasticsearch ,让上线的课程全部保存到es中,前台搜索的上线课程只能从es中搜索,后台用户更改了课程信息后,将信息同步到es中,如果后台用户对课程执行下线操作,就从es中删除该课程。在项目中我们采用RabbitMQ作为消息队列,这个是新项目常用的,为什么的使用呢,主要是为了提高系统的响应速度,提高系统稳定行,服务的解耦,队列保证先进先出,流量的削峰。在项目中我们也遇到这个问题,不管是课程类型还是前台首页展示的商品,都是数据库中的数据,不用的用户登录进来展示的内容是一样的,而且这些内容是不经常变更的,如果全部都访问数据库,在高并发场景下必然会导致数据库宕机,我们是怎么解决的呢?如果使用缓存redis,可以解决问题,但是缓存服务器如果并发量比较高,也会出现问题,我们选择了使用页面静态化,使用不发送请求的页面代替要发送请求的页面,这样减轻了服务器的压力,加快了页面加载的速度,增强了用户的体验。首先我们要增删改课程类型的时候,课程服务会调用页面静态化服务,去静态化一个页面,然后把这个页面上传到fastdfs里面去 并返回一个fileID 给课程服务,然后课程服务将fileID 发送到rabbitmq中,然后我们在前端服务器里部署一个java项目,然后这个java项目去监听rabbitmq中的队列,如果有消息,获取到了fileID ,就会从fastdfs下载文件,再将下载文件保存到同服务器的前端项目中。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。