首页 > 其他分享 >基于k8s实现微服务开发平台的高可用方案设计与实现

基于k8s实现微服务开发平台的高可用方案设计与实现

时间:2024-07-01 17:00:41浏览次数:3  
标签:方案设计 服务 可用 实现 系统 Result import k8s caiwu

一、项目介绍

  
基于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

标签:方案设计,服务,可用,实现,系统,Result,import,k8s,caiwu
From: https://blog.csdn.net/qq_1262330535/article/details/140101820

相关文章

  • vision mamba-yolov8:结合Vmamba的yolov8目标检测改进实现
    1.visionmamba结构与原理        Mamba成功的关键在于S6模型,该模型为NLP任务设计,通过选择性扫描空间状态序列模型,将二次复杂度降低至线性。但由于视觉信号(如图像)的无序性,Mamba的S6模型不能直接应用,设计了2D-selective-scan(SS2D)模块。        如上图所......
  • (记得关注哦)国产商用密码:编程实现分组密码体制中的国密算法SM4。
    一、研究SM4算法(一)SM4算法的分组长度、密钥长度、S盒、轮函数①分组长度和密钥长度:分组长度:SM4算法的分组长度为128位(即16字节),这意味着它每次加密或解密的数据块大小为128位。密钥长度:SM4算法的密钥长度为128位(即16字节),与分组长度相同。......
  • 基于Java实现图像浏览器的设计与实现
    图像浏览器的设计与实现前言一、需求分析选题意义应用意义功能需求关键技术系统用例图设计JPG系统用例图图片查看系统用例图二、概要设计JPG.javaPicture.java三、详细设计类图JPG.javaUML类图picture.javaUML类图界面设计JPG.javapicture.java四、源代码JPG.jav......
  • Qml 实现一个垂直滑动条
    ScrollBar.vertical:ScrollBar{id:scrollBarvisible:trueactive:trueorientation:Qt.VerticaltopPadding:0bottomPadding:0anchors.top:parent.topanchors.left:pa......
  • k8s-07-配置应用程序
    配置应用程序ConfigMap:将配置数据置于Kubernetes的顶级资源对象中,并可与其他资源定义存入同一Git仓库或者基于文件的存储系统中。配置应用程序:向容器传递命令行参数为每个容器设置自定义环境变量通过特殊类型的卷将配置文件挂载到容器中在每个容器中,Kubemete......
  • k8s-09-Deployment
    Deployment微服务化:将一个大规模系统拆分成各个独立运行的组件更新pod:直接删除所有现有的pod,然后创建新的pod。先创建新的pod,并等待它们成功运行之后,再删除旧的pod。按顺序创建新的pod,然后逐渐删除旧的pod。第1种会导致应用程序在一定的时间内不可......
  • k8s-10-StatefulSet
    StatefulSet每个实例有单独存储的多副本手动控制Pod需要手动管理,当有节点故障,需要手动创建一个ReplicaSet对应一个Pod,创建多个RS不方便,不能弹性伸缩每个Pod使用同一数据卷中的不同目录实例间相互合作,正确性很难保证,同时共享存储会成为整个应用的性能瓶颈......
  • k8s-11-Kubernetes原理
    Kubernetes原理控制平面负责控制并使得整个集群正常运行。Etcd分布式持久化存储API服务器调度器控制器管理器工作节点负责容器的运行任务kubeletkube-proxy容器运行时(Docker、rkt等)附加组件DNS服务器仪表盘Ingress控制器Heapster(容器集群监控)容器......
  • 机器翻译及实践 进阶版:基于Transformer实现机器翻译(日译中)
    机器翻译及实践进阶版:基于Transformer实现机器翻译(日译中)前言一、所需要的前置知识——Transformer1.自注意力机制1.1Query&Key&Value版注意力机制1.1.1什么是Query&Key&Value版注意力机制1.1.2为什么引入Query&Key&Value版注意力机制1.1.3如何实现Query&Key&Value......
  • css3动画实现数字动态增加
    要实现数字的动态增加效果,可以使用CSS3的@keyframes规则来创建动画,并使用JavaScript来更新数字。以下是一个简单的实现示例:HTML:<divid="counter"class="counter">0</div>CSS:.counter{/*初始样式*/}@keyframesincreaseNumber{from{opacity:0;transfo......