← 返回首页

Java微服务架构:从单体到分布式

📂 java ⏱ 1 min 187 words

Java微服务架构:从单体到分布式

概述

微服务架构是一种将应用拆分为小型、独立服务的架构模式。每个服务运行在自己的进程中,通过轻量级机制通信。

1. 微服务概念

// 单体架构:所有功能在一个应用中
// 微服务架构:每个模块是独立的服务
// user-service: 用户管理
// order-service: 订单管理
// payment-service: 支付管理
// inventory-service: 库存管理

2. 服务注册与发现

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

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

3. 服务间通信

import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.FeignClient;

@EnableFeignClients
@SpringBootApplication
public class OrderServiceApplication {
}

@FeignClient(name = "user-service")
public interface UserClient {
    @GetMapping("/api/users/{id}")
    User getUserById(@PathVariable Long id);
}

@Service
public class OrderService {
    private final UserClient userClient;
    public OrderService(UserClient userClient) {
        this.userClient = userClient;
    }
    public Order createOrder(Long userId, Order order) {
        User user = userClient.getUserById(userId);
        return order;
    }
}

4. API网关

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;

@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
            .route("user-service", r -> r
                .path("/api/users/**")
                .uri("lb://user-service"))
            .route("order-service", r -> r
                .path("/api/orders/**")
                .uri("lb://order-service"))
            .build();
    }
}

5. 熔断器

import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;

@Service
public class ResilienceService {
    @CircuitBreaker(name = "userService", fallbackMethod = "fallback")
    public User getUserFromRemoteService(Long id) {
        return userClient.getUserById(id);
    }

    public User fallback(Long id, Exception e) {
        return new User(id, "默认用户");
    }
}

最佳实践

  1. 服务拆分合理:按业务领域拆分服务
  2. API设计规范:RESTful风格,版本控制
  3. 使用容器化:Docker + Kubernetes部署
  4. 监控和日志:分布式链路追踪
  5. 数据一致性:最终一致性,避免分布式事务

总结

微服务架构是现代应用开发的主流架构,掌握微服务的核心概念和工具,可以构建出高质量的分布式系统。