Backend

99 Ngày Spring — Ngày 99: Capstone và Tổng kết

SSite Admin
3 tháng 11, 2026 4 phút đọc 5 lượt xem
99 Ngày Spring — Ngày 99: Capstone và Tổng kết

Đây là bài cuối của 99 Ngày Spring. Từ IoC container ở ngày đầu, series đã đi qua REST, JPA, security, testing, microservices, reactive và vận hành production. Bài cuối này gom mọi thứ vào một dự án duy nhất: một hệ thống đặt hàng nhỏ gồm vài service, đủ để bạn chạm vào gần hết những gì đã học.

Capstone và Tổng kết

1. Mười chặng đã đi qua

Mỗi giai đoạn trả lời một câu hỏi khác nhau về việc xây một hệ thống backend. Dùng danh sách này để tìm lại bài cần đọc khi làm capstone.

  • Ngày 1–10, Spring Core và Boot: IoC, bean, cấu hình, profile, auto-configuration.

  • Ngày 11–20, REST API: controller, DTO, validation, xử lý lỗi, phân trang, CORS.

  • Ngày 21–30, Spring Data JPA: entity, repository, quan hệ, N+1, transaction.

  • Ngày 31–40, data nâng cao: specification, projection, Flyway, cache, Redis, tối ưu JPA.

  • Ngày 41–50, Spring Security: xác thực, phân quyền, JWT, OAuth2.

  • Ngày 51–60, testing: unit, slice test, Testcontainers, test bảo mật, Actuator.

  • Ngày 61–70, Spring nâng cao: AOP, event, scheduling, @Async, gọi API ngoài.

  • Ngày 71–80, microservices: config, discovery, gateway, resilience, tracing, messaging, saga.

  • Ngày 81–90, reactive và công nghệ hiện đại: WebFlux, R2DBC, GraphQL, gRPC, virtual thread, native image, Docker.

  • Ngày 91–99, production-ready: cấu hình, logging, monitoring, CI/CD, Kubernetes, hiệu năng, bảo mật.

2. Capstone: hệ thống đặt hàng nhỏ

Phạm vi được giữ nhỏ có chủ đích: ba service và một gateway. Order service nhận đơn và giữ trạng thái đơn. Payment service xử lý thanh toán, có thể chỉ là giả lập. Notification service gửi thông báo khi đơn đổi trạng thái. Giữa order và payment là một saga dùng sự kiện qua Kafka, với outbox để không mất sự kiện và idempotency để chịu được giao lại.

client ──> api-gateway (JWT, rate limit)
              │
              ▼
        order-service ──(outbox)──> Kafka: order.events
         PostgreSQL                    │            │
              ▲                        ▼            ▼
              │               payment-service   notification-service
              └── Kafka: payment.events ◄──┘      (idempotent consumer)

3. Các mốc thực hiện

Làm theo chiều dọc: mỗi mốc cho ra một thứ chạy được và có test, thay vì dựng hết hạ tầng trước rồi mới viết nghiệp vụ. Đừng bỏ qua các mốc về vận hành; chúng là phần khác biệt giữa một bài tập và một service thật.

  • Mốc 1: order service với REST, validation, JPA, Flyway và ProblemDetail; test bằng MockMvc và Testcontainers.

  • Mốc 2: bảo mật bằng JWT resource server; phân quyền theo vai trò; test endpoint có và không có token.

  • Mốc 3: outbox và sự kiện qua Kafka; payment service tiêu thụ idempotent; saga có bước bù khi thanh toán thất bại.

  • Mốc 4: gateway, timeout, circuit breaker và distributed tracing xuyên ba service.

  • Mốc 5: compose.yaml cho môi trường dev; Dockerfile nhiều stage hoặc buildpacks.

  • Mốc 6: log JSON, metric qua Prometheus, một dashboard Grafana và một alert theo tỷ lệ lỗi.

  • Mốc 7: pipeline CI build, test, đóng image theo mã commit; triển khai lên một cluster Kubernetes local với probe và graceful shutdown.

  • Mốc 8: load test với ngưỡng p99; ghi lại một nút thắt đã tìm ra và cách sửa.

4. Lộ trình tiếp theo

Sau capstone, bạn có một dự án để nói trong buổi phỏng vấn và một nền để học sâu hơn. Hướng đi tiếp tùy vào công việc: có người đi sâu vào thiết kế hệ thống, có người vào hạ tầng, có người vào một miền nghiệp vụ cụ thể. Điểm chung là học bằng cách giải một vấn đề thật, rồi viết lại điều mình hiểu.

  • Thiết kế hệ thống: series 50 Ngày System Design trên blog này.

  • Dữ liệu: đọc kế hoạch thực thi truy vấn, index, isolation level và replication của PostgreSQL.

  • Hạ tầng: Kubernetes sâu hơn, GitOps, một nhà cung cấp cloud.

  • Chất lượng: contract test, chaos testing, phân tích sự cố không đổ lỗi.

  • Cộng đồng: đọc mã nguồn Spring, theo dõi release notes, đóng góp một bản sửa tài liệu.

Cảm ơn bạn đã đi hết 99 ngày cùng Mọt Dev. Framework sẽ đổi, nhưng thói quen đo trước khi sửa, viết test cho hành vi và đọc tài liệu gốc thì dùng được mãi. Chúc bạn hoàn thành capstone.

Tài liệu đối chiếu

  • https://spring.io/guides

  • https://mot-dev-95.vercel.app/tag/system-design

S

Site Admin

Engineer and writer. Building things with TypeScript and distributed systems.

Bình luận (0)

Bạn cần đăng nhập bằng Google để bình luận.

Hãy là người bình luận đầu tiên.

Bài viết liên quan

99 Ngày Java — Ngày 99: Tổng kết và Lộ trình Tiếp theo

Nhìn lại mười chặng của 99 Ngày Java, một đề bài capstone không dùng framework và lộ trình bước sang Spring.

3 thg 11, 20264 phút4
99 Ngày Spring — Ngày 98: Best Practices Tổng hợp

Cấu trúc project chuẩn, những lỗi Spring hay gặp nhất và một checklist review dùng được ngay cho pull request.

2 thg 11, 20263 phút6
99 Ngày Java — Ngày 98: HTTP Client

java.net.http với HttpClient, HttpRequest và HttpResponse: gọi đồng bộ, bất đồng bộ, timeout, xử lý lỗi và gọi một REST API thực tế.

2 thg 11, 20263 phút7