今日学习了项目技术架构的选型,为方便统一对项目进行管理,首先了解为何要进行选型:
①降低开发成本 ②提升开发相率
一、项目分层介绍
单体项目:
所有的模块打包到一起部署运行; 例如打包一个War包放到一个Tomcat下运行,这种架构 也叫巨石型应用架构,在开发小型项目上有独特优势: 易于调试、部署,运维方便。
缺点:
1、不可靠。任何模块的一个bug,可能拖垮整个应用
2、单维扩展。只能通过运行更多的服务器水平扩展, 而不同的应用服务对资源的需求不同
3、不可持续发展。引入新的框架或语言需要重构所有 业务模块,往往需要在初期就选定技术栈
SOA(Service Oriented Architecture),面向服务架构
它是 一种设计方法,设计上通常是自上而下的,服务间松散耦合。ESB 集成不同协议的服务,做消息的转化、解释、路由从而联通各个服 务,解决企业通信问题,服务松耦合、可扩展
缺点
1、ESB的存在并没有根本解决单体巨石应用的一些问题
2、SOA更多的面向企业服务,服务拆分粒度很大,更多的是为了复用
微服务架构:
是去中心化的SOA拓展,它强调服务彻底的组件化,一个组件就是一个产品,服务切分力度更小,设计上更多的是自下而上的。服务间通过轻量化的协议进行通信,并根据服务本身需要独立化部署
比较:
SOA: 因为单体巨石应用无法灵活扩展,且部署困难。 自上而下,从运维侧视角出发,更多聚焦可维护性, 兼顾可扩展性,从前后端分离切入。
微服务: 因SOA服务粒度太粗,难以有效扩展,微服务应运而生。 自下而上,从产品视角出发,更多聚焦可扩展性, 兼顾可维护性。
微服务分层架构图
二 选型
Spring 家族
Spring Cloud 家族
数据访问层选型
一般选用Mybatis (我的SQL我做主)或者MyBatis PLUS(你的SQL你做主,我为你服务)
Mybatis框架执行流程解析
数据库连接池选型
定义:JDBC连接池,解决需要自己手动建立连接(TCP连接)、关闭连接、连接复用的问题。JDBC连 接池有一个标准的接口javax.sql.DataSource,常用的JDBC连接池如下
消息中间件选型
RocketMQ
远程通信框架选型
核心技术点
调用分析
常用开源远程通信框架综合对比
网关层技术选型
网关的分类:流量网关与业务网关
网关部署形式:单节点网关与多点网关
业务网关技术选型
Spring Cloud 体系自身的GateWay原理解析
Spring Cloud GateWay流程分析
最终技术选型如下
后端:
数据库:mysql 8.0.26
数据库驱动:mysql-connector-java 8.0.26
数据库连接池:druid 1.2.8
非关系型数据库:redis
注册中心/配置中心:nacos 1.4.1
spring家族:
Spring Cloud Alibaba 2.2.5.RELEASE
Spring Cloud Hoxton.SR8
Spring Boot 2.3.2.RELEASE
安全认证框架:Spring Security OAuth 2 2.2.4.RELEASE
远程通信调用:openFeign
API网关:gateway
反向代理:nginx 1.20.1
消息中间件:rockMq
ORM框架:Mybatis Plus 3.3.2
前端:
●Vue 2.5.1
●Vuex 3.0.1
●IView 3.2.2