8月项目总结

8月项目总结

有幸参与到这个项目中来,感谢师哥和其他同学的指导与帮助,感谢组员们的共同努力,项目于近日迎来完结。这篇总结将回顾我在这个项目学到的知识与一些感悟。

项目介绍

我们做的这个项目是一个项目信息发布与报名的管理系统,整体功能大体与我们平时的认知相符。但是在项目开始前,架构图上各种我没有见过的工具与框架着实是有点劝退我。

我们平时在课上教的内容都是教学性质的,在实际生产中的情况会比教学复杂很多,为了保证系统功能的完整与完善,启用了很多很有用的工具,在项目的学习过程中,我也慢慢学会了一些东西。

新知识

springBoot+MybatisPlus

首先是springBoot+MyBatisPlus,我们的项目基于这一框架开发。我个人在加入项目时并没有学过相关springBoot与MBP的相关内容,算是在项目的推动下开始了学习,并且实实在在的感受到了springBoot+MBP的简约而不简单。

springBoot是对spring框架的整合与补强,解决了spring框架下,依赖管理混乱与复杂的配置这两大痛点。在实际的使用中,也确实发现springBoot是通过在类与方法前使用注解来为相应的类或方法实现对应的功能或属性。

在spring框架中对spring.xml配置文件的频繁修改在springBoot中也得到了了很大改善,配置通过类的方式实现,通过在配置类前加入@Configuration注解使其在运行时作为配置而生效 。

docker

​docker在这个项目中的作用是容器化部署,我们可以将代码、数据库、redis缓存数据库等部署在docker的不同容器中,使各个可以相互协作而不互相干扰。比如我们组负责的mysql主从数据库就是在docker上部署完成的。

RBAC

这是我这次在项目中学到的新知识,并且刷新了我以前对后台管理系统的认知。在我们的教学课程中,后台管理是以自己的理解去写的,比如在一个简单的快递管理系统中,只有用户、快递员两种角色,快递员会兼任管理员,整个系统中没有角色与权限的概念。

尽管这次我们的系统中也只有学员、导师、管理员三种角色,但已经形成了多对多的关系,角色之间需要去限定权限。

RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。

根据RBAC0的模型,我们组经过商讨确定了用户、角色、权限三张基础表,以及用户-角色、角色-权限两张关系表,并根据这五张表划分了后台管理的功能,并设计了相应的接口。

Swagger

在开发过程中,接口文档作为协同开发的交流桥梁,如果不能形成统一的规范,就会导致交流不便,降低开发效率。

发现了痛点就要去找解决方案。解决方案用的人多了,就成了标准的规范,这就是Swagger的由来。通过这套规范,我们只需要按照它的规范去定义接口及接口相关的信息。再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,生成多种语言的客户端和服务端的代码,以及在线接口调试页面等等。

这样,如果按照新的开发模式,在开发新版本或者迭代版本的时候,只需要更新Swagger描述文件,就可以自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。

swagger通过在类与方法前加入相关的注解,可以在项目启动后自动生成具有统一规范的接口文档 ,使用过后的直观个感受就是使用方法简易,文档明朗易读,不是自己编写的接口也可以轻易上手使用。

mysql主从复制

主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后在从数据库上对这些日志进行重新执行,从而使从数据库和主数据库的数据保持一致。

最开始了解到主从复制是在课程中学习到的redis主从复制,基本了解的主从复制的目的和原理,但是了解到用户客户端从数据库访问数据的次序后,明白了其实最优先做主从复制的数据库应该是mysql数据库而非redis,因为数据在缓存进redis之前一定会先访问mysql,所以首先应当对mysql实现主从复制,配置多数据源以减轻mysql数据库的访问压力。

我们组通过使用docker分别创建主从数据库的容器,然后将对主从数据库建立主从关系以实现数据同步。

多数据源

我们创建主从数据库的目的之一就是为了实现数据库的读写分离,即读写操作分别在不同的数据库上操作,这就需要在代码中为业务方法配置多数据源。

在springBoot+MybatisPlus框架中配置多数据源的操作也简化了很多。根据MybatisPlus官网中的文档进行配置。

简言之就是在配置文件中写好主从数据库的各种信息,然后在serviceImpl类中的方法上使用@DS(“库名”)注解规定对应方法使用的数据源。根据主数据库写,从数据库读的规则,在增删改方法中使用主数据库作为数据源,在各种查询方法中使用从数据库作为数据源,即可实现多数据源的功能。

redis缓存

这一功能在springBoot+MybatisPlus框架中也可以通过注解来实现,操作简便也便于理解阅读。

同样是业务类代码前进行使用,可以使返回的结果直接进入缓存。在启动类方法前使用@EnableCaching注解开启注解,根据方法的类型使用对应的缓存注解(查:@Cacheable、增:@CachePut、改、删:@CacheEvict)

其他组的技术

尽管没有直接上手去操作其他组的业务以及相关的技术,但是了解其他组的目标对于我理解整个项目的结构也是非常必要的。

ELK

从实现的功能上来看,这部分内容应该是交给运维人员去做的

(引用)一般来讲,直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

Elasticsearch 搜索项目

这里的es与上面的使用场景不同,上面es是是用在日志系统上的,为的是可以方便快速的管理日志。这里的es则是用于搜索项目。

整个项目的流程

经过一个月的学习,对于一开始令人头大的项目架构图,总算是能理解一些了。

在这里插入图片描述

首先是第一部分

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqTrO3io-1630907285332)(C:\Users\16678\AppData\Roaming\Typora\typora-user-images\image-20210904210109823.png)]

这部分并不涉及我们开发的部分,大体功能是用户在客户端发出的操作首先通过DNS解析和内容分发,发送给服务器。

在这里插入图片描述

SpringCloud Gateway是Spring Cloud官方推出的第二代网关框架。网关作为流量的入口,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。

SpringSecurity与OAuth2.0会对发送过来的信息进行鉴权:

在这里插入图片描述

接下来进入到服务器的消息会在这个阶段进行相应的处理

在这里插入图片描述
对传入数据的处理就进入到了我们负责的区域,我们编辑的各种接口正是在处理这些信息

而同时进行的数据层的操作,缓存层的操作,则是关联到了我们负责的主从复制+多数据源+redis缓存

在这里插入图片描述

而这部分对应着es搜索项目的任务模块

ELK日志管理:

在这里插入图片描述

nacos在这次的项目中也是第一次接触。

(引自官网)Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。

在这里插入图片描述

读书

其实也不能算是去专门读了什么书,因为要准备找工作,笔试要考算法,又因为是非科班出身,对算法一窍不通,所以看了些与算法相关的内容。

在这里插入图片描述

也在LeetCode上进行了一些对于常用但我却不熟悉的技巧(如DFS)的专项训练

在这里插入图片描述

在看过的这20多节数据结构课程中,链表和数组是比较重要的部分。

数组占据随机访问的优势,却有需要连续内存的缺点;链表具有可不连续存储的优势,但访问查找是线性的。散列表和链表、跳表的混合使用,是为了结合数组和链表的优势,规避它们的不足。

个人的一些感想

不夸张的说,这一个月学到的知识要比我上半年学到的东西还要多。尽管上半年琐事缠身占了一定原因,但并不影响这个月所学的内容是好用且有用的。

在报名项目之前,我甚至连SSM都没有学完,进项目之后开的第一个会,让我整个人直接傻掉。坦白的说,一场会开下来,没几句我能听懂的话。

之后我为了能让自己痛定思痛,也能让自己时刻处在面子与项目进度的双重驱动下,我自告奋勇当选了组长。

与我而言,开始的过程并不顺利。尽管一开始只是设计表这样基础的任务,却也无时无刻对我过往的认知进行着降维打击。比如RBAC就是我从来都没听说过的概念。为了在第二天开会前弄明白RBAC的原理以及在实际生产中是怎么使用的,我通宵看完了一整套RBAC后台管理的课程。通宵学习这种事,在之前就算是第二天考试还什么都不会的我都不可能这么干,也是挺不可思议的。(后来发现可能是因为喝了蜜雪冰城的茶让我坚挺了一晚上,不愧是货真价实物美价廉的蜜雪冰城)

之后的一段时间也同样重复着这样的过程,为了能先在基础上赶上其他人,我每天都在赶课。最后在学完springBoot的时候,整个任务对我来说终于不再是开天辟地而只是查漏补缺了。

剩余的时间就是写代码、补知识、开会顺便被教育、改代码之间循环了。代码在不断的修改与打磨中日趋完善,我个人学到的知识也越来越多。项目完结之时,再回头去看,尽管在整个项目结构中仍然存在尚未了解的技术,但对比项目初期时的我,我还是有信心说一句:进步很大。

接下来在项目结束后,开学就研三的我就面临着找工作的压力。双非一本的我在学校出身上并不具备什么优势,技术上,很显然,我也不是什么厉害的人。所以在找工作上需要付出的努力可能不会比这个月我为了完成项目所需要付出的努力小。直接和自己以后生活质量挂钩的事容不得懈怠,我会拼尽全力的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值