爱收藏——网站架构设计架构

1.简介

爱收藏系统,以微服务为主要技术,系统按照业务来划分模块,前后端分离。存储以关系型数据库mariadb为主,redis存储登录相关数据。前端使用vue开发,nginx作为静态文件服务器。使用docker部署,容器按照功能分为基础服务、初始化服务、后端服务、前端服务。使用portainer作为docker管理工具。github作为代码仓库。镜像的构建和运维,使用shell脚本。

2.架构说明

系统分为4大模块:数据层、处理层、展示层、效率工程。整体架构图如下:

架构图

2.1 数据层

数据层,是系统所有数据存储中心,使用Mariadb和Redis。

Mariadb,存储各个业务需要持久化的数据,业务包括包括用户信息、网址信息。提供一个数据库实例,有用户信息、网址信息两个数据库。

Redis,存储用户模块登录用户的信息、其他模块需要缓存的信息,包括用户token、用户角色权限关系,以及各个模块需要暂存的信息。

2.2 处理层

按照业务来划分微服务,每个微服务负责一个业务内容。使用spring Cloud技术实现微服务。

微服务实例包括:

2.3 展示层

使用vue实现,界面元素使用ElmentUI。主要功能是调用后端接口,展示数据。

nginx作为前端静态文件的服务器,同时作为后端接口的转发代理和负载均衡

集成了github登录功能。

集成了github留言功能,使用github的issue功能实现。  

2.4 效率工程

docker

镜像划分为3类:基础服务镜像、初始化镜像、后端服务镜像。

基础服务镜像:为系统提供基本服务的组件,不包含业务数据。组件包括Mariadb、Redis、Nginx。

初始化镜像:系统初始运行需要执行的操作。包括认证中心建库建表sql脚本、网址管理服务建库建表sql脚本、前端静态文件。初始化镜像只需要运行一次。

后端服务镜像:后端各个微服务。

docker默认是没有非常友好的可视化界面,为了方便操作和管理镜像、容器,使用portainer系统。通过portainer,可以在界面上管理镜像、容器,查看系统运行状态,查看各个容器的日志等操作,替代了在docker中使用命令操作的方式。

shell

为了更方便的解决系统开发部署过程中,一系列的手动操作,使用shell脚本来实现自动化操作。shell脚本分为以下几类:

(1)镜像制作

镜像制作分为后端服务镜像的制作、前端镜像的制作、mariadb初始化镜像的制作。

后端服务镜像的制作,shell脚本中先调用mvn的构建方法,将java项目构建生成jar包,再使用Dockerfile将jar包打成镜像。

前端镜像的制作,shell脚本先调用npm的构建方法,将前端项目构成生成静态文件,再使用Dockerfile将静态文件打成镜像。

mariadb初始化镜像的制作,shell脚本拷贝sql语句到一个文件夹中,Dockerfile中再将sql拷贝到镜像中。

再在shell脚本中使用docker save命令将镜像生成tar包。

(2)系统部署

系统部署shell,先加载tar包,再删除之前的容器,再部署镜像。

(3)镜像更新

将本地镜像打成tar包,上传至服务器,在服务器上加载镜像。

(4)系统清除

清除掉系统相关的容器、镜像、挂载文件。

(5)服务器登录

远程登录服务器。

3. 数据流程

整个系统的数据流程图如下:

流程图

  1. 用户通过浏览器访问爱收藏系统
  2. 静态资源由nginx直接,需要请求后端接口由nginx做代理转发
  3. 根据不同url,nginx转发不同请求到不同服务上
  4. 各个服务访问mariadb或者redis请求数据
  5. 各个服务会注册到注册中心,其他服务会先从注册中心找到需要请求的服务,再调用具体服务
ishou 架构