← 返回首页
🏗️

软件架构模式:微服务与单体

📂 java ⏱ 2 min 269 words

软件架构模式:微服务与单体

概述

软件架构模式是组织系统结构的常用方式。本教程介绍微服务、单体和事件驱动架构。

1. 微服务架构

// 微服务架构特点
// 1. 服务拆分:按业务能力拆分服务
// 2. 独立部署:每个服务独立部署
// 3. 去中心化治理:每个服务独立治理
// 4. 容错设计:服务故障不影响整体

// 服务间通信
// 1. 同步通信:REST、gRPC
// 2. 异步通信:消息队列、事件

@Service
public class OrderService {
    @Autowired
    private UserServiceClient userClient;
    
    @Autowired
    private InventoryServiceClient inventoryClient;
    
    public Order createOrder(CreateOrderRequest request) {
        // 调用用户服务
        User user = userClient.getUser(request.getUserId());
        
        // 调用库存服务
        inventoryClient.deductStock(request.getItems());
        
        // 创建订单
        Order order = new Order(user, request.getItems());
        return orderRepository.save(order);
    }
}

2. 单体架构

// 单体架构特点
// 1. 单一代码库:所有代码在一个项目中
// 2. 单一部署单元:所有功能一起部署
// 3. 简单开发:开发和调试简单
// 4. 性能优化:进程内调用性能高

@SpringBootApplication
public class MonolithicApplication {
    public static void main(String[] args) {
        SpringApplication.run(MonolithicApplication.class, args);
    }
}

// 模块化单体
@Module
public class UserModule {
    @Service
    public UserService userService() {
        return new UserService();
    }
}

@Module
public class OrderModule {
    @Service
    public OrderService orderService() {
        return new OrderService();
    }
}

3. 事件驱动架构

// 事件驱动架构特点
// 1. 松耦合:服务通过事件通信
// 2. 异步处理:事件异步处理
// 3. 可扩展:事件处理可水平扩展
// 4. 最终一致性:事件保证最终一致性

@Component
public class OrderEventPublisher {
    @Autowired
    private KafkaTemplate<String, Object> kafkaTemplate;
    
    public void publishOrderCreated(Order order) {
        OrderCreatedEvent event = new OrderCreatedEvent(order);
        kafkaTemplate.send("order-events", order.getId(), event);
    }
}

@Component
public class OrderEventHandler {
    @KafkaListener(topics = "order-events", groupId = "order-handler")
    public void handleOrderCreated(OrderCreatedEvent event) {
        // 处理订单创建事件
        inventoryService.deductStock(event.getOrder().getItems());
        accountService.deduct(event.getOrder().getUserId(), event.getOrder().getTotalAmount());
    }
}

4. 实际应用示例

架构选择

// 架构选择考虑因素
// 1. 团队规模:小团队适合单体,大团队适合微服务
// 2. 业务复杂度:简单业务适合单体,复杂业务适合微服务
// 3. 性能要求:高性能要求适合单体
// 4. 可扩展性:需要高扩展性适合微服务

public class ArchitectureDecision {
    public Architecture selectArchitecture(Requirements requirements) {
        if (requirements.getTeamSize() < 10 && requirements.getComplexity() < 5) {
            return Architecture.MONOLITHIC;
        } else if (requirements.getTeamSize() >= 10 && requirements.getComplexity() >= 5) {
            return Architecture.MICROSERVICES;
        } else {
            return Architecture.MODULAR_MONOLITH;
        }
    }
}

5. 最佳实践

  1. 渐进式演进:从单体逐步演进到微服务
  2. 服务拆分:按业务能力拆分服务
  3. 事件驱动:使用事件实现服务间解耦
  4. 容错设计:实现熔断、降级等容错机制
  5. 监控告警:监控系统状态,及时发现问题

总结

软件架构模式是组织系统结构的常用方式。掌握微服务、单体和事件驱动架构,可以根据需求选择合适的架构模式。