2026KubernetesOSServerless
CNCF
- ****Kubernetes
- API
Istio / Linkerd | | | Kubernetes | Docker Swarm | Rancher | | DDD
// - @DomainServicepublic class OrderDomainService { public Order createOrder(OrderCreateCommand command) { // 1. boolean available = productService.checkStock( command.getProductId(), command.getQuantity() ); if (!available) { throw new OutOfStockException(); } // 2. Money totalPrice = pricingService.calculate( command.getProductId(), command.getQuantity() ); // 3. Order order = Order.create( command.getUserId(), command.getProductId(), command.getQuantity(), totalPrice ); // 4. return orderRepository.save(order); }}checklist
****
-
10-5050-200/5-15Docker
# # Stage 1: FROM maven:3.9-eclipse-temurin-21 AS builderWORKDIR /appCOPY pom.xml .RUN mvn dependency:go-offlineCOPY src ./srcRUN mvn package -DskipTests# Stage 2: FROM eclipse-temurin:21-jre-jammyWORKDIR /app# jarCOPY --from=builder /app/target/*.jar app.jar# RUN addgroup -S appgroup && adduser -S appuser -G appgroupUSER appuser# HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:8080/actuator/health || exit 1ENTRYPOINT ["java", "-XX:+UseContainerSupport", "-jar", "app.jar"]Kubernetes
# deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: order-service labels: app: order-servicespec: replicas: 3 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: containers: - name: order-service image: registry.example.com/order-service:v1.2.3 ports: - containerPort: 8080 resources: requests: memory: "512Mi" cpu: "250m" limits: memory: "1Gi" cpu: "1000m" env: - name: SPRING_PROFILES_ACTIVE value: "prod" - name: JAVA_OPTS value: "-XX:+UseG1GC -XX:MaxGCPauseMillis=200" livenessProbe: httpGet: path: /actuator/health/liveness port: 8080 initialDelaySeconds: 60 periodSeconds: 10 readinessProbe: httpGet: path: /actuator/health/readiness port: 8080 initialDelaySeconds: 30 periodSeconds: 5# Nacosspring: cloud: nacos: discovery: server-addr: nacos-server:8848 namespace: ${NACOS_NAMESPACE} group: ${SERVICE_GROUP} metadata: version: ${APP_VERSION} weight: ${INSTANCE_WEIGHT}// OpenFeignHTTP@FeignClient(name = "product-service", fallback = ProductServiceFallback.class)public interface ProductServiceClient { @GetMapping("/api/products/{id}") ProductDTO getProduct(@PathVariable("id") Long id); @PostMapping("/api/products/{id}/stock") Boolean reserveStock(@PathVariable("id") Long id, @RequestParam Integer quantity);}// @Componentpublic class ProductServiceFallback implements ProductServiceClient { private static final Logger log = LoggerFactory.getLogger(ProductServiceFallback.class); @Override public ProductDTO getProduct(Long id) { log.warn("Product service fallback, productId: {}", id); return ProductDTO.builder() .id(id) .name("") .build(); } @Override public Boolean reserveStock(Long id, Integer quantity) { log.warn("Stock reservation fallback, productId: {}, quantity: {}", id, quantity); return false; }}// Sentinel@SentinelResource(value = "createOrder", blockHandler = "createOrderBlockHandler", fallback = "createOrderFallback")public Order createOrder(OrderDTO orderDTO) { return orderService.create(orderDTO);}// public Order createOrderBlockHandler(OrderDTO orderDTO, BlockException ex) { throw new BusinessException("");}// public Order createOrderFallback(OrderDTO orderDTO, Throwable throwable) { log.error("Order creation failed", throwable); throw new BusinessException("");}gRPC
// order.proto - Protocol Bufferssyntax = "proto3";package order;option java_multiple_files = true;option java_package = "com.example.order.grpc";option java_outer_classname = "OrderProto";service OrderService { rpc CreateOrder(CreateOrderRequest) returns (CreateOrderResponse); rpc GetOrder(GetOrderRequest) returns (Order); rpc ListOrders(ListOrdersRequest) returns (stream Order);}message CreateOrderRequest { int64 user_id = 1; repeated OrderItem items = 2;}message Order { string order_id = 1; int64 user_id = 2; repeated OrderItem items = 3; OrderStatus status = 4; int64 created_at = 5;}// @Servicepublic class ProductCacheService { // L1: Caffeine private final Cache<Long, Product> localCache = Caffeine.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.SECONDS) .build(); // L2: Redis @Autowired private RedisTemplate<String, Product> redisTemplate; private static final String CACHE_KEY_PREFIX = "product:"; public Product getProduct(Long productId) { // L1 Product product = localCache.getIfPresent(productId); if (product != null) { return product; } // L2 String cacheKey = CACHE_KEY_PREFIX + productId; product = redisTemplate.opsForValue().get(cacheKey); if (product != null) { localCache.put(productId, product); return product; } // product = productRepository.findById(productId) .orElseThrow(() -> new ProductNotFoundException(productId)); // redisTemplate.opsForValue().set(cacheKey, product, 1, TimeUnit.HOURS); localCache.put(productId, product); return product; }}2026
| 2024-2025 | 2026 | |
|---|---|---|
| K8s | K8sOS | |
| Istio | ||
| Serverless | ||
| WASM |
""
2026****
- →
- →
- →
Phase 1: 3-6Phase 2: Phase 3: