一、项目介绍
基于k8s实现微服务高可用平台的高可用平台的系统通过对Web应用服务器运行情况的分析统计系统的建设以实现服务器运行数据监控与分析功能。微服务高可用平台是web应用高可用的核心,为了确保这些网站的稳定运行,势必需要做好对网站服务器的监控。做好对服务器运行的各类异常、服务的运行状态进行及时的监控预警工作,可以帮助网站管理员及时修复一些服务器潜在异常状态,及时处理和修复服务器问题。通过对服务器监控与分析系统的充分研究,结合自身技术储备情况,设计并开发了一套基于SpringBoot后台框架、Mybaits数据库映射框架、以MySQL为底层数据库,利用Bootstrap作为前端布局的微服务高可用平台监控和分析系统。完成了对微服务高可用的需求分析、功能模块实现的划分、SpringBoot的框架搭建、数据库关系分析与设计以及编码的实现。
微服务高可用开发平台主要功能有快速开发工具功能、系统管理、服务器监控功能、流程管理、分析看板功能等等。本文运用反向代理Nginx、网关、运用Redis作为分布式缓存,使用MQ实现消息高可用,通过结合微服务高可用方案可以将各个相关的软件硬件数据持久化到Mysql数据库,通过分析监控各个服务器或者主机的运行情况,最终实现了开发平台的高可用。
关键词:微服务;SpringBoot;高可用;K8S;
二、开发环境
开发语言:Java
框架:springboot
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql
数据库工具:Navicat11
开发软件:eclipse/myeclipse/idea
Maven包:Maven
————————————————
三、功能介绍
高可用是指系统在面对各种故障和异常情况时,仍能够提供稳定、可靠的服务。对于企业和用户而言,高可用性是确保业务连续运行和用户体验的关键因素。 高可用系统能够降低因故障而导致的损失,提高用户满意度。微服务天生具有分布式特性,有利于构建高可用系统。 通过微服务的自治性,可以实现部分服务的故障隔离,提高整体系统的可用性。
日志记录:日志记录是一种常见的可观测性设计模式,通过记录系统的运行日志,可以帮助我们了解系统的运行状态和异常情况。合理的日志记录可以帮助我们快速定位问题,并进行故障排查和分析。
监控指标:监控指标是通过收集和分析系统的关键指标来了解系统的运行情况。通过设置合适的监控指标,可以实时监测系统的性能、负载、资源使用情况等,及时发现潜在的问题并采取相应的措施。
健康检查:健康检查是通过定期检查系统的各个组件和服务的状态来判断系统是否正常运行。通过设置健康检查机制,可以及时发现故障或异常,并采取相应的措施,例如自动重启服务或切换到备用节点。
分布式追踪:分布式追踪是一种跟踪和分析分布式系统中请求的路径和性能的技术。通过在系统中添加唯一标识符,并记录请求的传递路径和时间,可以帮助我们了解系统中各个组件的性能瓶颈和调用关系,从而优化系统的性能和可用性。
告警系统:告警系统是通过设置合适的阈值和规则,实时监测系统的状态,并在出现异常或超过阈值时发送告警通知。通过及时的告警,可以帮助我们快速响应问题,并采取相应的措施,以避免系统的故障和中断。
可视化仪表盘:可视化仪表盘是通过将系统的关键指标和状态以图表或图形的形式展示出来,帮助我们直观地了解系统的运行情况和趋势。通过可视化仪表盘,可以快速发现系统的异常和趋势,并进行相应的调整和优化。
根据微服务高可用的总体需求分析,得出的主要关系如下。
1.用户可以管理微服务高可用平台数据的主机分类、分类下的指标。首页有异常监测播放,用户可以通过点击进入微服务高可用平台链接浏览某个主机微服务高可用平台的具体信息。用户可以根据关键字搜索微服务高可用平台数据。
2.用户可在线录入自己所在的主机的微服务高可用平台数据,在微服务高可用平台详情界面可以监测等等。
3.用户通过录入主机微服务高可用平台数据,对主机进行在线预警。
4.服务器运行员根据不同情况对指标分析,对异常微服务高可用平台进行报警通知。
5.用户对自己预警的微服务高可用平台微服务高可用平台数据进行邮件处理,然后进行上报。
总之,系统的微服务高可用平台分析平台模块主要有微服务高可用平台上报,微服务高可用平台日数据编辑以及日数据删除功能,主机分类管理,微服务高可用平台指标数据管理如指标数据删除,异常指标处理等等,微服务高可用平台上报管理,用户管理,异常监测管理,微服务高可用平台报警管理等等。
四、核心代码
部分代码:
package com.example.controller;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.Caiwu;
import com.example.exception.CustomException;
import com.example.service.CaiwuService;
import com.example.utils.MapWrapperUtils;
import com.example.utils.jwt.JwtUtil;
import com.example.vo.CaiwuVo;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(value = "/caiwu")
public class CaiwuController {
@Resource
private CaiwuService caiwuService;
@PostMapping
public Result<Caiwu> add(@RequestBody CaiwuVo caiwu) {
caiwuService.add(caiwu);
return Result.success(caiwu);
}
@PostMapping("/deleteList")
public Result<Caiwu> deleteList(@RequestBody CaiwuVo caiwu) {
caiwuService.deleteList(caiwu.getList());
return Result.success();
}
@DeleteMapping("/{id}")
public Result delete(@PathVariable Long id) {
caiwuService.delete(id);
return Result.success();
}
@PutMapping
public Result update(@RequestBody CaiwuVo caiwu) {
caiwuService.update(caiwu);
return Result.success();
}
@GetMapping("/{id}")
public Result<Caiwu> detail(@PathVariable Integer id) {
Caiwu caiwu = caiwuService.findById(id);
return Result.success(caiwu);
}
@GetMapping
public Result<List<Caiwu>> all() {
return Result.success(caiwuService.list());
}
@PostMapping("/page")
public Result<CaiwuVo> page(@RequestBody CaiwuVo caiwuVo) {
return Result.success(caiwuService.findPage(caiwuVo));
}
@PostMapping("/login")
public Result login(@RequestBody Caiwu caiwu, HttpServletRequest request) {
if (StrUtil.isBlank(caiwu.getZhanghao()) || StrUtil.isBlank(caiwu.getMima())) {
throw new CustomException(ResultCode.PARAM_LOST_ERROR);
}
Caiwu login = caiwuService.login(caiwu);
// if(!login.getStatus()){
// return Result.error("1001","状态限制,无法登录系统");
// }
if(login != null) {
HashMap hashMap = new HashMap();
hashMap.put("user", login);
Map<String, Object> map = MapWrapperUtils.builder(MapWrapperUtils.KEY_USER_ID,caiwu.getId());
String token = JwtUtil.creatToken(map);
hashMap.put("token", token);
return Result.success(hashMap);
}else {
return Result.error();
}
}
@PutMapping("/updatePassword")
public Result updatePassword(@RequestBody Caiwu info, HttpServletRequest request) {
Caiwu caiwu = caiwuService.findById(info.getId());
String oldPassword = SecureUtil.md5(info.getMima());
if (!oldPassword.equals(caiwu.getMima())) {
return Result.error(ResultCode.PARAM_PASSWORD_ERROR.code, ResultCode.PARAM_PASSWORD_ERROR.msg);
}
info.setMima(SecureUtil.md5(info.getNewPassword()));
Caiwu caiwu1 = new Caiwu();
BeanUtils.copyProperties(info, caiwu1);
caiwuService.update(caiwu1);
return Result.success();
}
}
五、效果图
六、文章目录
目录
1 绪 论 2
1.1 课题研究背景 2
1.2 国内外研究现状 4
1.2.1 国外研究现状 4
1.2.2 国内研究现状 4
1.3 研究内容 4
1.4 研究方法 5
1.4.1 搜索文献法 5
1.4.2 系统对比研究法 5
1.5 论文的章节安排 6
2 系统分析 8
2.1 可行性分析 8
2.1.1 技术可行性分析 8
2.1.2 经济可行性 8
2.1.3 操作可行性 8
2.2 系统需求分析 8
2.2.1 功能需求 9
2.2.2 系统性能需求 11
2.3 关键模块功能分析 11
2.3.1 系统用户登录模块 11
2.3.2 微服务高可用方案 13
2.3.3 微服务高可用平台模块 14
2.3.4 微服务高可用平台数据分析模块 15
2.4 高可用方案分析 15
2.3.1 高可用设计 16
2.3.2 高性能设计 17
2.3.2 结合容器化和云原生技术 18
3 系统设计 20
3.1 需求分析设计 20
3.2 高可用设计原则 20
3.3 数据库设计 21
3.4 微服务高可用设计 26
4 系统功能的实现 28
4.1 系统功能的实现 28
4.1.1 管理员登录 28
4.1.2 用户登录 28
4.1.3 系统主页 29
4.1.4 Web主机监控 30
4.1.5 微服务高可用平台主机详情 30
4.1.6 主机CPU监测 31
4.1.7 开发工具代码生成 31
4.1.8 数据源管理 32
4.1.10 实时日志监测 33
4.1.11 监测看板 34
4.1.12 云服务集群 34
5 系统测试 35
5.1 测试原则及方法 35
5.2 测试项目测试用例 35
5.3 软件测试结果 40
6 总 结 41
参考文献 41
致 谢 43