独立完成系统开发四:后端介绍

独立完成系统开发四:后端介绍

​ 上一篇博文,主要介绍了前端项目中的权限改造,因为vue-element-admin在默认情况下路由以及路由的权限无法实现动态配置而且他并没有提供按钮级别的权限控制,所以这个是必须要进行改造的,改造方法简单的概述就是将路由以及权限交给后端管理,通过后端来动态的获取用户所拥有的的路由以及权限,具体改造方法参考上一篇文章。前端最主要改造点就是路由以及权限的改造,其他的都是挺简单的。具体可以参考官网以及作者写的手摸手系列。

​ 前端改造完成,接下来就说一下后端的实现。后端最初我是想通过SpringCloud做成微服务模式的。但是由于系统还没有一个雏形所以要把系统分成那些服务模块,以及具体要实现哪些功能哪些可以独立出来,这些都不是很清晰。所以就打算先用springboot做一个后台出来,后面在弄一个微服务的分支。

​ 而且实际情况中如果系统没有遇到什么瓶颈也没必要弄成微服务的,并且盲目的使用微服务可能还会让系统性能变差。这里简单的说一下微服务以及为什么要用微服务,说说我的理解:

​ 首先一个请求的流程我们都知道,前端发送请求到后端服务器,然后服务器在访问数据库,获取数据然后对数据进行处理在返回给前端的结果。但是随着用户的增加请求量以及数据量自然会跟着增加,那么后端要处理的请求也会相应增加,最初系统的性能瓶颈可能会出现在数据库访问中因为io是最慢的,对于数据库的性能,最简单的处理就是加索引,如果加索引顶不住那么我们考虑将一些常用的数据放在缓存中例如redis。如果还是顶不住我们就需要对数据库做主从实现读写分离以及分库分表了反正就是性能不够就加机器将数据分散开,当然来对于一些需要全文检索的数据我们肯定不能丢数据库啦,我们可以使用全文搜索引擎对数据进行检索例如Elasticsearch或solr。上面说的是数据库出现瓶颈时的处理方案。随着请求量的增加出现性能瓶颈的位置除了数据库还有我们的后端处理服务器因为请求太多内存和cpu就会处理不过来,而解决方法也是类似的那就是性能不够机器来凑。如果一台机器顶不住我们可以将后端系统部署在多台服务器上,然后对请求进行负载均衡让这些请求分散在不同的机器中,当然这也会出现一些问题,例如session的共享问题。对于session共享解决方法主流的就两个,使用共享存储或将数据放在客户端真正让请求变为无状态的。
上面说的这些和微服务有什么关系呢?上面说的我们可以把后端系统部署在不同机器中,每台机器部署一个系统(一个系统其实就是一个服务)。那么会出现这么一种情况,那就是一个系统中可能只有某个模块的访问会很频繁对性能要求很高,如果由于某个模块导致的性能问题我们需要把整个系统都部署一遍在弄一台机器,是不是很浪费呢,而且某个模块改了所有的机器都要重新发布,这样显然不合理所以这个时候我们就需要对系统进行拆分,将系统拆分成一个个的服务,每个服务只处理某个功能,并且每个服务可以单独部署运行。拆分后需要哪个功能我们就调用那个服务。如果某个服务压力很大那么我们只需要给这个服务添加新的节点就可以了,完全不会影响其他的服务。这样对系统进行拆分后就变成了我们所说的微服务了。使用微服务可以实现模块之间的解耦,提高系统的扩展性,提高资源的利用。当然引入的新的问题,例如分布式事务,由于服务之间是通过网络通信的所以会产生额外的网络io。

​ 所以是否需要使用分布式、微服务完全取决于你是否有必要使用他,而不是为了使用他而去使用他。如果系统简单没有什么瓶颈那么我们直接将所有功能放在一个系统里面他不香吗。一切脱离实际情况的使用技术都是耍流氓。感觉有点扯远了哈。下面来介绍一下MyAdmin后端项目。

技术栈

前端项目是基于vue-element-admin来实现的。而后端项目我打算从0开始搭建,先说说用到的技术框架吧

项目使用的jdk版本为1.8,基于springboot、持久层采用mybatis-plus,连接池为druid、权限控制采用shiro以及jwt、接口文档的生成采用swagger2,数据库使用mysql,服务器使用tomcat。主要框架就是这么几个。下面说一下为什么选择他们的原因

  • springboot
    • 目前行业里面如果是新建的项目90%都会采用springboot吧,相比于spring使用sprinboot最直观的优势就是可以省去大量的配置,因为他为我们提供了开发绝大多数场景的starter pom,这些starter可以帮我们进行大量的自动配置,要什么那么只需要导入对应的starter pom依赖就可以了,并且使用sprinboot之后对项目进行配置不用再编写xml,在配置的时候我们可以直接修改配置文件或者在代码里面提供相应bean就可以了
  • mybatis-plus
    • mybatis-plus他是mybatis的一个增强,通过他可以实现不用写sql就可以操作数据库,当然这个只适用于增删改以及一些简单的查询,复杂的查询还是建议自己写sql。而且他还提供了分页组件、代码生成器等等。具体可以参考官网,这个也是国人开发的哦,所以文档中文支持特别好
  • druid
    • 提供了sql的监控等工具,这点就比其他的好,而且性能也很好
  • shiro和jwt
    • 由于spring security上手难度有点高,而且挺麻烦的。所以我就选择了比较熟悉而且使用简单的shiro,至于jwt是因为我们这个是前后端分离的项目所以需要对shiro进行改造,而jwt则作为token来使用。这个后面会具体出一篇文章来说明
  • swagger2
    • 因为我们是前后端分离的项目,那么怎么分离呢?这就需要在后端使用swagger2以及在前端使用mock.js来实现了,在前端可以通过mock来模拟后端的数据这样就不需要在依赖于后端了,而在后端通过swagger可以生成接口文档,而且还可以直接对接口进行测试这样就不需要在依赖于前端了而且还可以直接生成接口文档。
  • 缓存
    • 因为考虑到项目可能不会使用分布式,通常部署一个后端就可以了,那么就没有必要使用reids,但是如果部署多个后端就需要实现缓存的共享所以就需要使用redis,所以就使用了spring的缓存抽象来实现缓存的管理。
  • mysql
    • 目前常用的数据就两个oracle和mysql,在平常的使用中你说使用起来那个更方便,我认为oracle使用起来会方便很多,因为在oralce中提供了很多强大的功能例如像数据库的闪回,递归函数等等。这些在mysql中是没有的。哪为了我会选择mysql呢,主要有有这么几点:首先mysql是免费的,而oralce是收费的(可以破解哈,不过还是建议支持正版),mysql没有oracle那么重量级,还有最重要的是我更熟悉使用mysql来搭建主从,集群以及实现数据的分库分表。而且在平常中工作中大部分都是使用oralce,所以我想借这个机会在深入的了解一下mysql。

好啦,后端项目的介绍就先说到这里了,至于如何将上面提到的技术整合到项目中以及具体的运用,会在后面的文章中介绍

下一篇,独立完成系统开发五:mybatis-plus及代码生成器使用

你可能感兴趣的:(独立完成系统开发,后端,java,spring)