Web层技术架构设计
一、技术选型
编号
名称
官网地址
备注
1
2
3
4
5
6
7
8
Spring Boot
Spring Cloud
Redis
Elasticsearch
Apache NiFi
Shiro
Spring Boot 官网地址
Spring Cloud 官网地址
Redis 官网地址
Elastcsearch官网地址
Apache NiFi官网地址
Shiro 官网地址
MyBatis-Plus
MyBatis-plus 官网地址
MySQL
MySQL 官网地址
二、技术架构图
三、技术架构说明
系统采用四层架构设计
1、展示层
1)、Web前端
基于HTML/HTML5/Vue/CSS3开发web前端页面,兼容主流浏览器。展现层和数据层完全分离,通过
跨域实现前后端数据通信。
2)、APP
android,ios 基于原生或HTML5开发。在app端实现http/https链路请求后端接口,实现数据交换。
3)、微信公众号/微信小程序
微信公众号与微信小程序通过后端接口实现与后端数据通信。
4)、Restful接口
基于特定业务,采用Restful标准接口,对外提供数据服务,Web前端、App和微信公众号/微信小程
序所有的数据通信就是基于此接口来实现。
2、通讯层
基于TCP/HTTP/HTTPS 三种通信方式,实现前后端数据通信。其中,TCP基于Netty实现。
3、服务层
核心业务基于Spring cloud架构实现微服务化。
Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配
置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和
集群状态管理等操作提供了一种简单的开发方式。
微服务是可以独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,Spring
Cloud就是这些微服务的大管家,采用了微服务这种架构之后,项目的数量会非常多,Spring
Cloud做为大管家需要管理好这些微服务。
相关组件如下
1)、Netflix Eureka:
服务中心,微服务的注册与发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现
和故障转移。
2)、Netflix Hystrix:
熔断器,容错管理工具,旨在通过熔断机制控制服务降级和第三方库的节点,从而对延迟和故障提供更强
大的容错能力。
3)、Netflix Zuul:
Zuul是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用,Zuul可以通过加载动态
过滤机制,从而实现以下各项功能:
验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求。
审查与监控: 在边缘位置追踪有意义数据及统计结果,从而为我们带来准确的生产状态结论。
动态路由: 以动态方式根据需要将请求路由至不同后端集群处。
压力测试: 逐渐增加指向集群的负载流量,从而计算性能水平。
负载分配: 为每一种负载类型分配对应容量,并弃用超出限定值的请求。
静态响应处理: 在边缘位置直接建立部分响应,从而避免其流入内部集群。
多区域弹性: 跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可
能接近。
4)、Netflix Archaius:
配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机
制等功能。可以实现动态获取配置,原理是每隔60s(默认,可配置)从配置源读取一次内容,这样修
改了配置文件后不需要重启服务就可以使修改后的内容生效,前提使用archaius的API来读取。
5)、Spring Cloud Config:
配置中心,配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存
储、Git以及Subversion。
6)、Spring Cloud Bus:
事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合
实现热部署。
7)、Spring Cloud Sleuth:
日志收集工具包,封装了Dapper和log-based追踪以及Zipkin和HTrace操作,为SpringCloud应用实现
了一种分布式追踪解决方案
8)、Spring Cloud Task:
主要解决微服务的任务管理,任务调度的工作,比如某些定时任务晚上就跑一次,或者某项数据分析临
时就跑几次。
9)、Apache NiFi:
将MySQL数据库里指定的表中的数据根据更新时间试试推送到Elasticsearch中,方便用户的全文检索和
生成数据报表。
10)、Spring Cloud Ribbon
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。
11)、Spring Cloud Feign
Feign 是一个声明式 WebService 客户端。使用 Feign 能让编写的 WebService 客户端更加简洁,它的
使用方法式定义一个接口,然后在上面添加注解。
Spring Cloud 对 Feign 进行了封装,使其支持了 Spring MVC 标准注解和 HttpMessageConverters。
Feign 可以与 Eureka 和 Ribbon 组合使用以支持负载均衡。
4、数据层
mysql:存储事务性数据,以及关联性将强的数据。
Redis:系统缓存。是一个高性能的key-value数据库。
Elasticsearch:全文检索。开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:
分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负
载等。
四、其他
1、用户登录(Shiro)
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理
用户输入用户名和密码成功登录后,系统自动生成access Token作为用户的身份凭证,用于当
accessToken失效时重新生成。以下是各种登录场景的时序图:
1)、登录:
2)、token认证访问(accessToken有效):
3)、token认证访问(accessToken失效,refreshToken有效):
4)、accessToken和refreshToken 都失效:
2、日志系统
日志集中化管理,采用ELK解决方案。
E-->Elasticsearch
L-->Logstash
K-->Kibana
Elasticsearch:检索日志;
Logstash :主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方
式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修
改等操作在一并发往elasticsearch上去;
Kibana :也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好
的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
3、会话治理
此处的会话是指Netty 会话管理。实现Channel自定义会话管理,如会话监控、会话超时、会话重建
等。