当前位置: 首页 > article >正文

SpringCloud微服务架构高可用设计方案

SpringCloud微服务架构高可用设计方案

1. 整体架构设计

1.1 多层架构设计

  1. 接入层

    • Nginx负载均衡
    • CDN加速
    • DDoS防护
    • WAF防火墙
  2. 网关层

    • Gateway集群部署
    • 请求路由
    • 统一鉴权
    • 限流熔断
    • 协议转换
  3. 服务层

    • 服务注册发现
    • 负载均衡
    • 服务熔断
    • 服务降级
    • 服务监控
  4. 数据层

    • 数据库集群
    • 缓存集群
    • 消息队列集群
    • 分布式存储

1.2 核心组件高可用配置

1.2.1 注册中心(Nacos)配置
1.2.2 配置中心高可用
1.2.3 网关高可用配置

2. 服务高可用设计

2.1 服务容错机制

2.1.1 Hystrix熔断配置
@Service
public class UserService {
    @HystrixCommand(
        fallbackMethod = "getUserFallback",
        commandProperties = {
            // 熔断器开关
            @HystrixProperty(name = "circuitBreaker.enabled", value = "true"),
            // 请求量阈值
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "20"),
            // 错误比例阈值
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"),
            // 熔断时间窗口
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "5000"),
            // 执行超时时间
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
        },
        threadPoolProperties = {
            // 核心线程数
            @HystrixProperty(name = "coreSize", value = "30"),
            // 最大队列大小
            @HystrixProperty(name = "maxQueueSize", value = "100"),
            // 队列拒绝阈值
            @HystrixProperty(name = "queueSizeRejectionThreshold", value = "100")
        }
    )

    public User getUser(Long id) {
        return userMapper.selectById(id);
    }

    public User getUserFallback(Long id) {
        // 返回默认用户或缓存数据
        return new User();
    }
}

2.2 限流保护

@Configuration
public class SentinelConfig {
    @PostConstruct
    public void init() {
        // 流控规则
        List<FlowRule> rules = new ArrayList<>();
        // QPS限流
        FlowRule qpsRule = new FlowRule();
        qpsRule.setResource("getUserById");
        qpsRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        qpsRule.setCount(100);
        // 预热模式
        qpsRule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_WARM_UP);
        qpsRule.setWarmUpPeriodSec(10);
        // 并发线程数限流
        FlowRule threadRule = new FlowRule();
        threadRule.setResource("getUserById");
        threadRule.setGrade(RuleConstant.FLOW_GRADE_THREAD);
        threadRule.setCount(50);
        rules.add(qpsRule);
        rules.add(threadRule);
        FlowRuleManager.loadRules(rules);
        // 熔断降级规则
        List<DegradeRule> degradeRules = new ArrayList<>();
        DegradeRule degradeRule = new DegradeRule();
        degradeRule.setResource("getUserById");
        degradeRule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
        degradeRule.setCount(100);
        degradeRule.setTimeWindow(10);
        degradeRules.add(degradeRule);
        DegradeRuleManager.loadRules(degradeRules);
    }
}

2.3 线程池隔离

3. 数据层高可用设计

3.1 数据库高可用

3.2 缓存高可用

3.3 消息队列高可用

4. 监控与运维

4.1 监控系统

4.2 链路追踪

4.3 日志收集

5. 容灾与备份

5.1 多活部署

5.2 自动扩缩容


http://www.kler.cn/a/488707.html

相关文章:

  • mysql message from server: “Too many connections“
  • JavaSE——网络编程
  • 提升 PHP 编码效率的 10 个实用函数
  • linux 设置mysql 外网访问
  • 如何在 Ubuntu 22.04 上安装 Caddy Web 服务器教程
  • 如何在 Linux系统用中挂载和管理磁盘分区
  • 自动驾驶领域的基础模型综述
  • 学习HLS.js
  • 高级java每日一道面试题-2025年01月08日-微服务篇-负载平衡的意义什么 ?
  • 2025-1-10-sklearn学习(36、37) 数据集转换-无监督降维+随机投影 沙上并禽池上暝。云破月来花弄影。
  • 二手母婴商品交易系统|Java|SSM|VUE| 前后端分离
  • JSON.stringify 实现深度克隆的缺陷
  • 《庐山派K230 从入熟悉到...》按键拍照保存
  • 牛客周赛74
  • Wireshark TCP 分析标志位说明汇总
  • 【Golang 面试题】每日 3 题(二十六)
  • MiniMind - 从0训练语言模型
  • 蓝桥杯python省赛备战day2--连续求和公式应用--829连续整数求和-枚举算法刷题学习笔记2--leetcode
  • ue5 动画通知
  • JavaScript 数组拓展:方法与实例全解析
  • 安科瑞 Acrel-1000DP 分布式光伏监控系统在工业厂房分布式光伏发电项目中的应用
  • 微信小程序评分小程序ssm+论文源码调试讲解
  • linux下MySQL的数据存放
  • ISP架构方案
  • ASP.NET Core 中使用 Cookie 身份验证
  • 爬取b站评论