Microservices và Domain Driven Design

Microservices và Domain Driven Design - Tóm tắt
Tóm tắt ngắn:
- Buổi chia sẻ giới thiệu về kiến trúc Microservices và cách áp dụng Domain Driven Design (DDD) trong phát triển phần mềm.
- Các điểm chính được thảo luận bao gồm: lợi ích của Microservices, cách thức gọi dịch vụ (Service Discovery), các mô hình tương tác (đồng bộ và bất đồng bộ), giải pháp đảm bảo tính toàn vẹn dữ liệu (Saga), quản lý lỗi và theo dõi hệ thống (Monitoring), và cách thức tách domain thành các microservices.
- Kiến trúc Microservices được ứng dụng trong hệ sinh thái sản phẩm của Sapo, giúp giải quyết bài toán quản lý bán hàng đa kênh và nâng cao hiệu quả vận hành.
- Buổi chia sẻ cũng đề cập đến các công cụ và phương pháp cụ thể như: Eureka, Consul, RESTful API, Kafka, Saga, monitoring tập trung, DDD, và các công cụ hỗ trợ CI/CD.
Tóm tắt chi tiết:
Phần 1: Giới thiệu về Sapo và kiến trúc Monolithic
- Sapo là công ty thành lập năm 2008, cung cấp giải pháp quản lý bán hàng đa kênh cho hơn 100.000 khách hàng.
- Kiến trúc Monolithic là kiến trúc truyền thống, tập trung tất cả chức năng vào một ứng dụng duy nhất.
- Kiến trúc này phù hợp với các dự án nhỏ, phát triển nhanh, nhưng gặp khó khăn khi mở rộng và bảo trì.
Phần 2: Giới thiệu về kiến trúc Microservices
- Microservices là kiến trúc chia nhỏ hệ thống thành các dịch vụ độc lập, có thể tự vận hành và tương tác với nhau.
- Lợi ích của Microservices:
- Dễ mở rộng và bảo trì.
- Phân chia đội ngũ phát triển hiệu quả.
- Linh hoạt trong việc lựa chọn công nghệ.
- Giảm thiểu ảnh hưởng khi triển khai.
- Hỗ trợ việc chia sẻ và tái sử dụng code.
Phần 3: Service Discovery
- Service Discovery là cách thức giúp các microservices tìm kiếm và kết nối với nhau.
- Hai phương thức chính:
- Application-level service discovery: Các dịch vụ tự đăng ký địa chỉ lên server trung tâm.
- Infrastructure-level service discovery: Nền tảng triển khai tự động quản lý địa chỉ của các dịch vụ.
Phần 4: Microservices Communication
- Hai mô hình tương tác chính:
- Đồng bộ: Các dịch vụ phải chờ nhau để hoàn thành thao tác.
- Bất đồng bộ: Các dịch vụ độc lập, tương tác thông qua các sự kiện (events) hoặc hàng đợi (queue).
Phần 5: Bảo đảm tính toàn vẹn dữ liệu
- Saga pattern là giải pháp giúp đảm bảo tính toàn vẹn dữ liệu trong hệ thống Microservices, đặc biệt trong các trường hợp thao tác phức tạp cần nhiều dịch vụ tham gia.
Phần 6: Monitoring và quản lý lỗi
- Monitoring tập trung giúp theo dõi hiệu năng và lỗi của các microservices.
- Sử dụng các công cụ như Prometheus, Grafana để thu thập và phân tích dữ liệu.
- Các giải pháp xử lý lỗi:
- Cảnh báo sớm khi hệ thống gặp vấn đề.
- Tự động khởi động lại dịch vụ khi lỗi xảy ra.
- Sử dụng Saga pattern để xử lý lỗi trong các thao tác phức tạp.
Phần 7: Domain Driven Design
- DDD là phương pháp luận giúp phân tích và thiết kế hệ thống dựa trên domain (lĩnh vực) của ứng dụng.
- Các khái niệm chính:
- Domain: Lĩnh vực hoạt động của ứng dụng.
- Bounded Context: Ranh giới của một domain nhỏ hơn.
- Aggregate: Tập hợp các thực thể có mối liên hệ chặt chẽ.
Phần 8: Áp dụng Microservices tại Sapo
- Sapo áp dụng kiến trúc Microservices để phát triển hệ sinh thái sản phẩm của mình.
- Các công nghệ được sử dụng: Java, Spring Boot, Docker, Kubernetes, SQL Server, AWS S3, Prometheus, Grafana, Kafka, và các công cụ CI/CD.
Phần 9: Hỏi đáp
- Các câu hỏi được đặt ra liên quan đến:
- Cách thức triển khai Service Discovery.
- Kiến trúc cơ sở dữ liệu.
- Quản lý quyền truy cập.
- Bảo mật và chống tấn công.
- Quản lý lỗi và monitoring.
- Cách thức tách domain thành các microservices.
- Kinh nghiệm triển khai và vận hành hệ thống Microservices.
Kết luận:
Buổi chia sẻ cung cấp cái nhìn tổng quan về kiến trúc Microservices và cách áp dụng DDD trong phát triển phần mềm. Các điểm chính được trình bày một cách rõ ràng và dễ hiểu, cùng với các ví dụ cụ thể và kinh nghiệm thực tế từ Sapo. Buổi chia sẻ cũng khẳng định xu hướng ứng dụng Microservices ngày càng phổ biến trong các dự án phần mềm quy mô lớn, giúp nâng cao hiệu quả và khả năng mở rộng của hệ thống.