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

微服务、分布式概念-以及集群部署 vs 分布式部署

微服务 是把各种服务拆分最小化, 分布式是把项目部署到多台服务器

微服务(Microservices)

微服务是一种架构风格,它的核心思想是将一个大型应用程序拆分成多个小型、独立的服务。

主要特点:

  1. 服务拆分最小化

    • 按业务功能将系统拆分成多个小服务
    • 每个服务专注于特定的业务领域
    • 服务之间通过轻量级通信机制(如HTTP API)交互
  2. 独立性

    • 每个服务可以独立开发、测试、部署和扩展
    • 技术栈可以不同
    • 故障隔离,一个服务的问题不会影响其他服务
  3. 去中心化

    • 每个服务管理自己的数据存储
    • 避免共享数据库

项目中的体现:

在您的项目中,可以看到微服务架构的影子:

project-common            // 公共模块
project-member-server     // 会员服务
project-order-server      // 订单服务
...

每个服务专注于特定领域,通过Feign客户端进行服务间通信。

分布式系统(Distributed Systems)

分布式系统是指将不同的业务模块部署在不同的服务器上,通过网络进行通信和协调的系统。

主要特点:

  1. 物理分布

    • 不同的服务可以部署在不同的服务器上
    • 可以根据需求进行水平扩展
  2. 逻辑统一

    • 虽然物理上分离,但逻辑上是一个整体系统
    • 通过网络通信协调工作
  3. 高可用性

    • 单点故障不会导致整个系统崩溃
    • 可以通过负载均衡提高性能

两者关系

微服务和分布式系统不是互斥的概念,而是相互关联的:

微服务通常是分布式的

  • 微服务架构天然适合分布式部署
  • 每个微服务可以部署在不同的服务器上

分布式不一定是微服务

  • 传统的单体应用也可以分布式部署(如集群部署)
  • 但微服务架构更符合分布式系统的设计理念

项目中的实际应用

从您的项目结构可以看出:

微服务架构体现:

  1. 服务拆分

    • 会员服务(member-server)
    • 订单服务(order-server)
    • 公共模块(common)
  2. 独立部署

    // 服务间调用通过Feign客户端
    @Component
    public class MarketingFeign {@Autowiredprivate DiscountClient marketingClient;  // 调用营销服务
    }
    

分布式部署体现:

  1. Redis分布式缓存

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {// Redis集群配置支持分布式部署
    }
    
  2. RabbitMQ分布式消息

    // 通过消息队列实现服务间异步通信
    rabbitTemplate.convertAndSend("order.order.refund", JSON.toJSONString(refundOrder));
    
  3. 异步处理

    @Async
    @Override
    public void asyncMemberAndTeamExport(MemberAndTeamExportParams params) {// 异步处理提高系统响应性
    }
    

总结

您的理解是正确的:

  • 微服务关注的是逻辑架构的拆分,将系统按业务功能拆分成最小可独立部署的服务
  • 分布式关注的是物理部署的分布,将服务部署到多台服务器上

在现代企业级应用中,这两种架构风格经常结合使用,微服务架构天然适合分布式部署,而分布式部署又能充分发挥微服务的优势,提高系统的可扩展性、可靠性和性能。

集群部署(Cluster Deployment)

集群部署是将相同的应用程序部署到多台服务器上,形成一个集群,对外提供统一的服务。

主要特点:

  1. 相同的应用实例

    • 每台服务器上运行的是完全相同的应用程序
    • 代码、配置、功能都是一样的
  2. 负载分担

    • 通过负载均衡器将请求分发到不同的服务器
    • 提高系统的处理能力和可用性
  3. 高可用性

    • 当某台服务器出现故障时,其他服务器可以继续提供服务
    • 避免单点故障

集群部署 vs 分布式部署

集群部署:

用户请求 → 负载均衡器 → [服务器1: 会员服务]→ [服务器2: 会员服务]→ [服务器3: 会员服务]

分布式部署:

用户请求 → API网关 → [服务器1: 会员服务]→ [服务器2: 订单服务]→ [服务器3: 支付服务]

集群部署的优势

1. 高可用性

// 在项目中,Redis集群配置体现了高可用思想
@Bean
public RedisConnectionFactory redisConnectionFactory() {// 配置连接池,提高Redis的可用性GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();poolConfig.setMaxIdle(100);poolConfig.setMinIdle(10);poolConfig.setMaxTotal(500);// ...
}

2. 负载均衡

// 通过配置多个服务实例实现负载均衡
@EnableDiscoveryClient  // 启用服务发现,支持多个实例注册
@SpringBootApplication
public class MiniDolphinMemberServerApplication {public static void main(String[] args) {SpringApplication.run(MiniDolphinMemberServerApplication.class, args);}
}

3. 水平扩展

当系统负载增加时,可以简单地增加服务器实例来分担负载。

项目中的集群部署体现

1. 服务多实例部署

在微服务架构中,同一个服务可以部署多个实例:

会员服务实例1 (端口: 8081)
会员服务实例2 (端口: 8082)
会员服务实例3 (端口: 8083)

2. 数据库集群

// Redis连接池配置支持高并发访问
@Bean
public RedisConnectionFactory redisConnectionFactory() {GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();poolConfig.setMaxIdle(100);      // 最大空闲连接poolConfig.setMinIdle(10);       // 最小空闲连接poolConfig.setMaxTotal(500);     // 最大连接数// ...
}

3. 消息队列集群

// RabbitMQ支持集群部署,提高消息处理能力
@Autowired
private RabbitTemplate rabbitTemplate;// 异步处理提高系统吞吐量
@Async
@Override
public void asyncMemberAndTeamExport(MemberAndTeamExportParams params) {// ...
}

集群部署的实际场景

开发环境:

通常只部署一个实例,方便调试和开发

生产环境:

[负载均衡器 Nginx]↓
[会员服务实例1]  [会员服务实例2]  [会员服务实例3]↓              ↓              ↓
[共享数据库] ←----------------------------------

与微服务、分布式的关系

部署方式特点目的
集群部署相同应用多实例高可用、负载均衡
分布式部署不同服务独立部署业务解耦、技术分离
微服务按业务功能拆分服务独立开发、部署、扩展

总结

集群部署不是简单地把完整项目部署到多台服务器,而是:

  1. 相同的应用程序在多台服务器上运行
  2. 通过负载均衡器统一调度
  3. 目的是提高可用性性能
  4. 是实现高并发、高可用的重要手段

在您的项目中,集群部署主要体现在:

  • 同一个微服务可以部署多个实例
  • Redis连接池提高并发处理能力
  • 异步处理提高系统吞吐量
  • 通过服务发现实现负载均衡

这种架构结合了微服务的业务拆分优势和集群部署的高可用优势,构建了一个健壮、可扩展的系统。

http://www.lryc.cn/news/620948.html

相关文章:

  • C# LINQ 全面教程:从入门到精通
  • 【19-模型训练细节 】
  • Linux 编译过程中遇到 TMPDIR 空间不足的问题
  • 算法应用上新!自适应更新策略差分进化算法求解球形多飞行器路径规划问题,附完整MATLAB代码
  • 智慧城市SaaS平台/专项管理系统
  • PyCharm 2025.2:面向工程师的 AI 工具
  • Nginx学习笔记(九)—— Nginx Rewrite深度解析
  • 学习嵌入式第二十八天
  • python爬虫学习(2)
  • 大模型微调方法讲解
  • linux 软硬链接详解
  • 服务器数据恢复—误删服务器卷数据的数据恢复案例
  • ESXI 6.7服务器时间错乱问题
  • QT+Yolov8 推理部署,ONNX模型 ,实例分割+目标检测
  • 【会员专享数据】2000-2024年我国乡镇的逐日PM₁₀数据(Shp/Excel格式)
  • 6、C 语言指针初阶知识点总结
  • AI搜索优化专家孟庆涛:以技术温度重构“人机信息对话”新范式
  • 前端Vite介绍(现代化前端构建工具,由尤雨溪开发,旨在显著提升开发体验和构建效率)ES模块(ESM)、与传统Webpack对比、Rollup打包
  • 飞算JavaAI合并项目实战:7天完成3年遗留系统重构
  • 92、23种设计模式-单例模式
  • LeetCode 面试经典 150_数组/字符串_最后一个单词的长度(19_58_C++_简单)(反向遍历)
  • vector 认识及使用
  • MTK平台Wi-Fi学习--如何修改wifi 的TX Power
  • 计算机毕设大数据选题推荐 基于spark+Hadoop+python的贵州茅台股票数据分析系统【源码+文档+调试】
  • STL——容器——容器适配器
  • Mac chrome浏览器下载DevEco Studio 6.0.0 Beta2失败
  • MacOS 系统计算机专业好用工具安装
  • Spring Boot 深度解析:从原理到实践
  • 亚马逊手工制品分类体系革新:从流量重构到运营升级的深度解析
  • [已解决]当启动 Spring Boot 应用时出现 Using generated security password xxx提示