0%

谷粒项目学习(一) 架构

对项目架构做个梳理,对各层技术功能做个归纳,陆续补充

技术结构

网络层

Nginx:反向代理负载均衡。工作在网络第七层的反向代理软件,将请求分发至不同的Tomcat服务器上。

LVS/F5:工作在网络第四层的负载均衡解决方案,其中LVS是软件,运行在操作系统内核态,可对TCP请求或更高层级的网络协议进行转发,因此支持的协议更丰富,并且性能也远高于Nginx,可假设单机的LVS可支持几十万个并发的请求转发;F5是一种负载均衡硬件,与LVS提供的能力类似,性能比LVS更高,但价格昂贵。由于LVS是单机版的软件,若LVS所在服务器宕机则会导致整个后端系统都无法访问,因此需要有备用节点。可使用keepalived软件模拟出虚拟IP,然后把虚拟IP绑定到多台LVS服务器上,浏览器访问虚拟IP时,会被路由器重定向到真实的LVS服务器,当主LVS服务器宕机时,keepalived软件会自动更新路由器中的路由表,把虚拟IP重定向到另外一台正常的LVS服务器,从而达到LVS服务器高可用的效果。

CDN:构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

多机房/多中心

前端

表现层

HTML5/CSS3/JavaScript::前端开发基础。

AJAX:接口访问。

ECharts:图表可视化。

Cookie:身份识别。

NodeJS Server

Node.js:可让前端接口测试脱离后端,运行在前端的服务器。

NPM:包管理工具。

Webpack:静态模块打包工具。

ES6:更高级的前端开发语法。

Babel:将ES6等更高级的开发语法降级以适应部分浏览器访问。

Nuxt.js:一般情况下,前端请求到后端数据后再进行渲染,将内容在网页上展示。这种情况下不利于百度等网页的爬虫程序爬取,一般会将其视为垃圾页面。而Nuxt.js 搭载在后端之前,能使前端接收到的返回数据是一个渲染完成的页面。

Vue.js:使用其进行更便捷、更易扩展与修改(模块化)、更整洁的开发。

Vuex:基于Vue的一个数据集中管理中心,实现组件间多次调用的共享数据的便捷访问。

axios: 网络模块,较之AJAX更完善,使用起来更方便,功能更多。

ElementUI:前端页面组件库,与Vue配套,可直接利用现成的组件进行二次开发,减少工作量。

vue-element-admin:使用Vue全家桶搭建的一个现成的管理平台,可在其框架上进行二次开发。

Easy Mock:拦截前端请求至虚拟后端,实现前后端开发的分离,方便前端测试。

后端

接口层

​ 阿里云VOD:阿里云服务,实现视频的上传,前端集成播放组件进行播放。视频加解密,解码等,具有很多完备的功能。

​ 阿里云OSS:对象存储服务,通过调用接口实现文件的上传和下载、显示。

​ 阿里云短信、微信支付、微信登陆:云服务,暂未使用。

业务层

​ SSO:单点登录。

​ JWT:身份验证。

OAuth 2.0: 鉴权。

Spring Security:一个强大的和高度可定制的身份验证和访问控制框架。

EasyExcel:实现excel 读写的JAVA工具包。

服务层

​ 微服务基础设施:注册中心、配置中心(Nacos),服务网关,服务熔断(sentinel),服务发现

开发层

​ 核心框架:Spring Boot(项目框架,用来简化 Spring 应用初始搭建以及开发过程)、Spring Cloud(基于Spring Boot的一整套实现微服务的框架)、MyBatis plus(便捷的与数据库进行交互)、Swagger(后端接口参数自称文档,可在页面中进行调试)

​ 服务器:Tomcat(Spring Boot 内嵌)、Nginx

存储层

​ MYSQL、Redis(数据缓存)、Logback(日志)

DevOps

Linux、Docker(容器)、Maven(包引入、版本控制)、Git(分布式管理工具)、Jenkins(开源的、提供友好操作界面的持续集成工具,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行)

工程结构

  • guli_parent:根目录(父工程),管理四个子模块:
    • canal_client:canal数据库表同步模块(统计同步数据)
    • common:公共模块父节点
      • common_util:工具类模块,所有模块都可以依赖于它
      • spring_security:认证与授权模块,需要认证授权的service服务依赖于它
      • service_base:service服务的base包,包含service服务的公共配置类,所有service模块依赖于它
    • infrastructure:基础服务模块父节点
      • api_gateway:api网关服务
    • service:api接口服务父节点
      • service_edu:教学相关api接口服务
      • service_oss:阿里云oss api接口服务
      • service_acl:用户权限管理api接口服务(用户管理、角色管理和权限管理等)
      • service_cms:cms api接口服务
      • service_sms:短信api接口服务
      • service_trade:订单和支付相关api接口服务
      • service_statistics:统计报表api接口服务
      • service_ucenter:会员api接口服务
      • service_vod:视频点播api接口服务