当前位置: 首页 > 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.dtcms.com/a/331211.html

相关文章:

  • 容器运行时支持GPU,并使用1panel安装ollama
  • 将 pdf 转为高清 jpg
  • 数巅中标中建科技AI知识库项目,开启建筑业数智化新篇章
  • CSS aspect-ratio 属性
  • Multimodal RAG Enhanced Visual Description
  • Linux 对 RPM 包的管理
  • 19 ABP Framework 本地化系统
  • hashmap和concurrentHashmap是否允许null值和null健
  • PiscCode使用光流法计算漂浮物位移速度
  • 把 AI 推理塞进「 8 位 MCU 」——0.5 KB RAM 跑通关键词唤醒的魔幻之旅
  • 监控插件SkyWalking(一)原理
  • 嵌入式学习的第四十九天-时钟+EPIT+GPT定时器
  • 无人机探测器技术解析
  • 阿里巴巴 Qwen-Image:免费开源,还要挑战 GPT-4.1 和 Midjourney?
  • 恢复GPT-4o,增加付费配额:OpenAI的“补救措施”如何重塑用户金字塔
  • OpenCV ------图像基础处理(一)
  • 【OpenCV】Mat详解
  • 论,物联网日志系统架构如何设计?
  • AI增强SEO关键词表现
  • Postman 平替 技术解析:架构优势与实战指南
  • 审批流程系统设计与实现:状态驱动、灵活扩展的企业级解决方案
  • Java研学-RabbitMQ(八)
  • Rabbitmq+STS+discovery_k8s +localpv部署排坑详解
  • 队列的使用以及泛型思考[二叉树的层序遍历]
  • 【P27 4-8】OpenCV Python——Mat类、深拷贝(clone、copyTo、copy)、浅拷贝,原理讲解与示例代码
  • Horse3D游戏引擎研发笔记(五):在QtOpenGL环境下,仿three.js的BufferGeometry管理VAO和EBO绘制四边形
  • 算法训练营day51 图论② 岛屿数量深搜、广搜、最大面积
  • 图论(5)最小生成树算法
  • Claude Code 国内直接使用,原生支持 Windows 免WSL安装教程
  • Day56--图论--108. 冗余的边(卡码网),109. 冗余的边II(卡码网)