Spring Boot 优雅实现多活架构(Active-Active Architecture)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【6月更文挑战第20天】实现多活架构(Active-Active Architecture)意味着在多个地理位置或多个数据中心同时运行应用系统,使其具备高可用性、灾难恢复和负载均衡能力。以下从理论到实践详细介绍如何使用 Spring Boot 构建多活系统。

实现多活架构(Active-Active Architecture)意味着在多个地理位置或多个数据中心同时运行应用系统,使其具备高可用性、灾难恢复和负载均衡能力。以下从理论到实践详细介绍如何使用 Spring Boot 构建多活系统。

理论基础

  1. 多活架构:多活架构指在多个数据中心同时运行相同的应用系统和数据,确保应用在任何一个数据中心出现故障时,另一个数据中心能够无缝接管业务,持续提供服务。
  2. 负载均衡:在多活架构中,负载均衡器负责将用户请求分发到不同的数据中心,保证流量分布均匀和服务高效响应。
  3. 数据同步:数据在多个数据中心之间必须保持一致,这涉及到数据库复制、分布式缓存和一致性协议等技术。
  4. 服务发现:服务发现机制用于动态感知服务实例的变化,保证请求能够路由到可用的服务实例。

实践步骤

准备工作

  1. 环境
  • JDK 11+
  • Spring Boot 2.5+
  • Redis 或其他分布式缓存
  • MySQL 或其他支持主从复制的数据库
  • Eureka 或 Consul 作为服务发现工具
  • Nginx 或其他负载均衡器
  1. 项目结构
  • gateway-service:网关服务
  • user-service:业务服务
  • config-service:配置中心
  • discovery-service:服务发现组件

示例代码

  1. 配置中心(Config Service)
    使用 Spring Cloud Config 作为配置中心,集中管理配置文件。
  2. java复制代码
@SpringBootApplication
@EnableConfigServer
public class ConfigServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServiceApplication.class, args);
    }
}
  1. 配置 application.yml
  2. yaml复制代码
server:
  port: 8888

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/your-repo/config-repo
  1. 服务发现(Discovery Service)
    使用 Eureka 作为服务注册和发现组件。
  2. java复制代码
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(DiscoveryServiceApplication.class, args);
    }
}
  1. 配置 application.yml
  2. yaml复制代码
server:
  port: 8761

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
  1. 网关服务(Gateway Service)
    使用 Spring Cloud Gateway 实现 API 网关。
  2. java复制代码
@SpringBootApplication
@EnableEurekaClient
public class GatewayServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayServiceApplication.class, args);
    }
}
  1. 配置 application.yml
  2. yaml复制代码
server:
  port: 8080

spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://USER-SERVICE
          predicates:
            - Path=/users/**

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  1. 业务服务(User Service)
  2. java复制代码
@SpringBootApplication
@EnableEurekaClient
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}
  1. 配置 application.yml
  2. yaml复制代码
server:
  port: 8081

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/userdb
    username: root
    password: password

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  1. 服务的控制器示例:
  2. java复制代码
@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        // 业务逻辑
        return new User(id, "John Doe");
    }
}
  1. 数据同步与缓存
  • 使用 MySQL 主从复制实现数据同步: 配置 MySQL 主从复制保证数据一致性。
  • 使用 Redis 实现分布式缓存: 配置 Redis 作为缓存层,减轻数据库负担,提高性能。
  1. 负载均衡
  • 使用 Nginx 配置负载均衡: 配置 Nginx 将请求分发到多个实例。
  • nginx复制代码
upstream user_service {
    server user_service1:8081;
    server user_service2:8081;
}

server {
    listen 80;
    
    location /users {
        proxy_pass http://user_service;
    }
}

测试与验证

  1. 启动各个服务:配置中心、服务发现、网关服务和业务服务。
  2. 配置 Nginx 进行负载均衡。
  3. 通过网关访问业务服务,例如:http://localhost:8080/users/1
  4. 验证多活架构的故障切换和负载均衡效果。

总结

通过配置中心、服务发现、网关服务、数据库复制和负载均衡,可以使用 Spring Boot 来实现多活架构。这种架构不仅提高了系统的可用性和容灾能力,还能改进系统的负载均衡和整体性能。实现多活架构(Active-Active Architecture)意味着在多个地理位置或多个数据中心同时运行应用系统,使其具备高可用性、灾难恢复和负载均衡能力。以下从理论到实践详细介绍如何使用 Spring Boot 构建多活系统。


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
106 5
|
1月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
192 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
4天前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
43 16
|
20天前
|
决策智能 数据库 开发者
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
本项目旨在解决智能体的“超级入口”问题,通过开发基于意图识别的多智能体框架,实现用户通过单一交互入口使用所有智能体。项目依托阿里开源的Qwen2.5大模型,利用其强大的FunctionCall能力,精准识别用户意图并调用相应智能体。 核心功能包括: - 意图识别:基于Qwen2.5的大模型方法调用能力,准确识别用户意图。 - 业务调用中心:解耦框架与业务逻辑,集中处理业务方法调用,提升系统灵活性。 - 会话管理:支持连续对话,保存用户会话历史,确保上下文连贯性。 - 流式返回:支持打字机效果的流式返回,增强用户体验。 感谢Qwen2.5系列大模型的支持,使项目得以顺利实施。
250 8
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
|
6天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
155 5
|
3月前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
207 5
|
3月前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
3月前
|
JSON 前端开发 Java
Spring Boot框架中的响应与分层解耦架构
在Spring Boot框架中,响应与分层解耦架构是两个核心概念,它们共同促进了应用程序的高效性、可维护性和可扩展性。
80 3
|
Java 开发工具 开发者
基于springboot架构 钉钉扫码登录第三方应用
• 获取appId及appSecret • 项目应用 • 1.配置文件增加如下配置 • 2.下载sdk • 3.将sdk引入项目 • 3.修改登录跳转方法/login • 4.登录页修改 • 5.扫码重定向实现登录的方法如下 • 6.重写UsernamePasswordToken
基于springboot架构 钉钉扫码登录第三方应用