Bối cảnh và vấn đề nghiên cứu
Trong kỹ nghệ phần mềm hiện đại, ngôn ngữ lập trình Java đóng vai trò quan trọng nhờ tính độc lập nền tảng, môi trường thực thi an toàn và hệ sinh thái thư viện phong phú. Cùng với sự phát triển của các dịch vụ trực tuyến quy mô lớn, kiến trúc nguyên khối (Monolithic) bộc lộ nhiều giới hạn vật lý về phần cứng khi mở rộng theo chiều dọc (Vertical Scaling), dẫn đến chi phí đắt đỏ và nguy cơ sập toàn bộ hệ thống khi xuất hiện điểm hỏng đơn lẻ (Single Point of Failure - SPOF). Để đáp ứng các yêu cầu về tính sẵn sàng liên tục (24/7), khả năng mở rộng linh hoạt và tính chịu lỗi, kiến trúc Microservices đã trở thành mô hình kiến trúc phân tán tiêu chuẩn.
Đề tài "Thiết Kế Hệ Thống Microservice Với Java" được thực hiện trong khuôn khổ học phần Đồ án 1 (mã học phần: SE121.PMCL) tại Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin – Đại học Quốc gia Thành phố Hồ Chí Minh, dưới sự hướng dẫn của ThS. Nguyễn Công Hoan và do nhóm sinh viên Đinh Quang Dương (MSSV: 21250751), Ngô Quang Khải (MSSV: 21520953) thực hiện vào tháng 12/2023.
Nhiệm vụ và mục tiêu nghiên cứu của đồ án bao gồm:
- Nghiên cứu có hệ thống các nguyên lý thiết kế hệ thống phân tán cốt lõi, bao gồm khả năng mở rộng (Scalability), tính khả dụng (Availability), độ tin cậy (Reliability), khả năng bảo trì (Maintainability), tính nhất quán dữ liệu (Consistency) theo định lý CAP, và khả năng chịu lỗi (Fault Tolerance).
- Phân tích chi tiết các khối xây dựng nền tảng (16 Building Blocks) và các mẫu kiến trúc chuyên sâu trong hệ thống phân tán: cân bằng tải (Load Balancer), bộ đệm (Caching), định tuyến và phát hiện dịch vụ (Service Discovery & API Gateway), giao dịch phân tán (Distributed Transactions với 2PC/3PC và Saga), thuật toán đồng thuận (Consensus Raft), truy vấn dữ liệu phân tán (API Composition và CQRS).
- Tìm hiểu các phương thức đóng gói, điều phối và triển khai ứng dụng phân tán sử dụng công nghệ Container, Docker Swarm, Kubernetes, Helm cùng hệ thống tập trung nhật ký (ELK Stack).
- Thiết kế và hiện thực hóa mô hình hệ thống Microservices hoàn chỉnh dựa trên hệ sinh thái Java Spring Boot kết hợp các công cụ hỗ trợ liên quan.
Đối tượng nghiên cứu là các nguyên lý thiết kế hệ thống phân tán, các mẫu hình kiến trúc vi dịch vụ và khung ứng dụng Java Spring Boot. Phạm vi nghiên cứu tập trung vào mô hình hóa lý thuyết kiến trúc, phân tích thuật toán và áp dụng các thành phần công nghệ trong khuôn khổ đồ án môn học kỹ thuật phần mềm.
Cơ sở lý thuyết và phương pháp
Đồ án xây dựng nền tảng lý thuyết dựa trên các khái niệm chuyên sâu của mạng máy tính (Computer Networking), tính toán song song (Parallel Computing) và lý thuyết hệ thống phân tán (Distributed Systems).
Khung lý thuyết và mô hình kỹ thuật
- Định lý CAP: Khẳng định một hệ thống phân tán trong điều kiện phân vùng mạng (Partition Tolerance) chỉ có thể lựa chọn đảm bảo tính nhất quán (Consistency) hoặc tính sẵn sàng (Availability).
- Mô hình tính toán độ tin cậy và khả dụng: Sử dụng các chỉ số thời gian trung bình giữa các sự cố (Mean Time Between Failures - MTBF), thời gian trung bình để sửa chữa (Mean Time To Repair - MTTR), mục tiêu thời gian phục hồi (Recovery Time Objective - RTO), và mục tiêu điểm phục hồi dữ liệu (Recovery Point Objective - RPO).
- Mô hình dự phòng hệ thống: Phân tích các cấp độ dự phòng linh kiện và máy chủ $N+1$, $N+2$, $2N$, và $2N+1$.
- Lý thuyết lỗi phân tán: Phân loại lỗi máy chủ (Crash-stop, Crash-recovery), lỗi đường truyền mạng (Network fault) và bài toán các vị tướng Byzantine (Byzantine Fault) chỉ giải quyết được khi số nút lỗi nhỏ hơn $1/3$ tổng số nút trong cụm.
Phương pháp nghiên cứu
- Phương pháp phân tích - tổng hợp lý thuyết: Hệ thống hóa 16 khối xây dựng (Building Blocks) cơ bản trong thiết kế hệ thống phân tán, so sánh định tính và định lượng giữa các giải pháp kiến trúc phần cứng, phần mềm, giao thức và giải thuật.
- Phương pháp mô hình hóa ca điển hình (Case Study): Phân tích thiết kế hệ thống thực tế cho nền tảng video quy mô lớn (YouTube) thông qua phân rã yêu cầu chức năng, yêu cầu phi chức năng và ánh xạ tới các khối xây dựng tương ứng.
- Phương pháp thiết kế và triển khai thực nghiệm: Áp dụng hệ sinh thái Spring Framework và các mẫu thiết kế vi dịch vụ để cài đặt mã nguồn, cấu hình các dịch vụ độc lập và kiểm chứng luồng tương tác hệ thống.
Thiết kế và triển khai kiến trúc hệ thống
Hệ thống được thiết kế theo kiến trúc Microservices phân tán trên nền tảng ngôn ngữ Java, trong đó từng dịch vụ nghiệp vụ được phân tách độc lập, sở hữu cơ sở dữ liệu riêng biệt và giao tiếp thông qua giao thức HTTP/REST (đồng bộ) hoặc hàng đợi thông điệp (bất đồng bộ).
Danh mục công nghệ và thư viện triển khai
| Phân tầng / Chức năng |
Công nghệ & Thư viện sử dụng |
Vai trò trong hệ thống |
| Framework lõi |
Spring Boot Starter |
Cung cấp cấu hình khởi tạo nhanh và môi trường chạy dịch vụ |
| Tương tác dữ liệu |
Spring Data JPA |
Quản trị và thao tác với cơ sở dữ liệu quan hệ |
| Tìm kiếm phân tán |
Spring Data Elasticsearch |
Hỗ trợ lập chỉ mục (indexing) và truy vấn dữ liệu tìm kiếm |
| Xử lý sự kiện bất đồng bộ |
Spring Cloud Stream |
Kết nối và điều phối luồng thông điệp qua Message Broker |
| Giao tiếp liên dịch vụ |
Spring Cloud OpenFeign |
Tạo declarative REST client phục vụ gọi API đồng bộ giữa các dịch vụ |
| Chống chịu lỗi hệ thống |
Spring Cloud Resilience4j |
Cung cấp cơ chế Circuit Breaker, Rate Limiter, Retry và Bulkhead |
| Khám phá và cấu hình dịch vụ |
Spring Cloud Consul |
Quản lý Service Registry, Discovery và lưu trữ cấu hình động |
| Quản lý bảo mật & bí mật |
Spring Cloud Vault |
Lưu trữ và kiểm soát truy cập an toàn cho khóa mật, mật khẩu cơ sở dữ liệu |
| Quản lý trạng thái nghiệp vụ |
Spring State Machine |
Mô hình hóa máy trạng thái hữu hạn cho các quy trình nghiệp vụ phức tạp |
| Kiểm tra hợp lệ dữ liệu |
Spring Boot JSR303 |
Thực hiện xác thực dữ liệu đầu vào (Validation) |
| Đóng gói & Phân phối |
Docker, Docker Swarm, Kubernetes, Helm |
Đóng gói ứng dụng vào Container, tự động hóa điều phối và triển khai |
| Giám sát & Quản trị nhật ký |
Bộ công cụ ELK (Elasticsearch, Logstash, Kibana) |
Thu thập, phân tích và trực quan hóa dữ liệu log tập trung |
Luồng tương tác và cơ chế hoạt động
Hệ thống tiếp nhận yêu cầu từ người dùng qua tầng định tuyến API Gateway. API Gateway tương tác với máy chủ Consul để giải quyết địa chỉ máy chủ dịch vụ (Service Discovery). Các yêu cầu đọc tổng hợp dữ liệu từ nhiều nguồn áp dụng kết hợp cơ chế API Composition và mô hình CQRS (Command Query Responsibility Segregation) nhằm phân tách luồng ghi và luồng đọc. Các giao dịch trải rộng qua nhiều vi dịch vụ được phối hợp thông qua mô hình Saga nhằm đảm bảo tính nhất quán cuối cùng mà không làm nghẽn tài nguyên hệ thống.
Nội dung chính theo từng chương
Chương 1: Tổng quan về thiết kế hệ thống
Chương 1 định nghĩa thiết kế hệ thống là quá trình xác định các thành phần, giao diện lập trình (APIs) và mô hình dữ liệu nhằm thỏa mãn các yêu cầu chức năng và phi chức năng. Tác giả phân tích sự khác biệt giữa hệ thống nhỏ (sử dụng kiến trúc Client-Server, Layered, Monolithic) và hệ thống lớn phân tán. Hệ thống nhỏ gặp hạn chế về giới hạn vật lý phần cứng máy chủ, chi phí nâng cấp đắt đỏ và không đảm bảo tính sẵn sàng cao khi lưu lượng tăng vọt.
Tác giả hệ thống hóa chi tiết 16 khối xây dựng (Building Blocks) cơ bản trong thiết kế hệ thống:
- Hệ thống tên miền (DNS)
- Bộ cân bằng tải (Load Balancers)
- Cơ sở dữ liệu (Databases)
- Bộ lưu trữ Khóa-Giá trị (Key-Value store)
- Mạng phân phối nội dung (CDN)
- Bộ tạo số thứ tự (Sequencer)
- Bảng giám sát dịch vụ (Service Monitoring)
- Bộ đệm phân tán (Distributed Caching)
- Hàng đợi tin nhắn phân tán (Distributed Messaging Queue)
- Hệ thống xuất bản-đăng ký (Publish-Subscribe System)
- Bộ giới hạn tốc độ (Rate Limiter)
- Bộ lưu trữ đối tượng (Blob Store)
- Bộ tìm kiếm phân tán (Distributed Search gồm Crawl, Index, Search)
- Bộ ghi log phân tán (Distributed Logging)
- Bộ lập lịch công việc phân tán (Distributed Task Scheduling)
- Bộ đếm phân tán (Sharded Counters)
Đồng thời, chương phân tích ca điển hình YouTube với các yêu cầu chức năng (stream video, upload, search, like/dislike, comment, thumbnail) và phi chức năng (sẵn sàng $\ge 99%$, khả năng mở rộng, hiệu suất, độ tin cậy). Chương làm rõ các thách thức phân tán: bất đồng bộ mạng (Network asynchrony), sự cố từng phần (Partial failures), xử lý đồng thời (Concurrency); cùng các nguyên lý: Scalability (Size, Administrative, Geographical; Scale up vs Scale out), Availability (tính theo số lượng "9", kỹ thuật loại bỏ SPOF qua $N+1, N+2, 2N, 2N+1$, RTO, RPO, Failover Active-Passive và Active-Active), Reliability (MTBF, MTTR), Maintainability (Operability, Lucidity, Modifiability), Consistency (CAP, Strong vs Eventual Consistency), và Fault Tolerance (Replication, Checkpointing đồng bộ/bất đồng bộ, Byzantine Fault).
Chương 2: Load balancer
Chương 2 trình bày vai trò của bộ cân bằng tải trong việc phân bổ lưu lượng, giảm tải cho máy chủ và loại bỏ SPOF. Nội dung phân loại:
- Phần cứng (HLB) và phần mềm (SLB): So sánh HLB (chi phí cao, khó mở rộng linh hoạt, không tương thích môi trường đám mây) với SLB như Nginx, HAProxy, Apache HTTP Server (mở rộng linh hoạt theo thời gian thực, tối ưu chi phí).
- Tầng xử lý: Cân bằng tải tầng vận chuyển L4 (Transport Load Balancer - dựa trên IP/Port, thực hiện NAT) và tầng ứng dụng L7 (Application Load Balancer - ALB, kiểm tra nội dung HTTP/SMTP, can thiệp định tuyến thông minh).
- Thuật toán cân bằng tải: Phân tích 5 thuật toán: Round Robin, Weighted Round Robin, Least Connection, Fastest Response Time, và IP Hash.
- Mô hình cân bằng tải: So sánh Server-side load balancing và Client-side load balancing.
- Khắc phục SPOF cơ sở dữ liệu: Áp dụng kết hợp kỹ thuật phân mảnh dữ liệu (Sharding) và sao chép dữ liệu (Replication).
Chương 3: Caching
Chương 3 tập trung vào tối ưu hóa hiệu năng và tiết kiệm tài nguyên hệ thống thông qua lưu trữ đệm ngắn hạn tốc độ cao:
- Thuật ngữ: Định nghĩa trạng thái Cache hit và Cache miss.
- Mô hình bộ đệm: Phân tích Local cache (Local browser caching, Local backend caching) và Distributed cache (phân tán trên cụm máy chủ hoặc trung tâm dữ liệu như Redis, Memcached, Apache Kafka), Reverse proxy cache (Nginx, Varnish), Sidecar cache, và Reverse proxy sidecar cache.
- Chính sách thu hồi bộ đệm (Cache Eviction Policies): Trình bày 9 giải thuật: FIFO, LIFO, TLRU, MRU, RR, LFU, LIRS, ARC và SLRU.
- Chiến lược truy cập bộ đệm: Phân tích cơ chế hoạt động, ưu điểm, nhược điểm của 5 mô hình: Cache-aside, Read-through, Write-through, Write-back (Write-behind), và Write-around.
| Chiến lược Caching |
Cơ chế ghi dữ liệu |
Cơ chế đọc dữ liệu |
Ưu điểm |
Nhược điểm |
| Cache-aside |
Ghi trực tiếp vào DB, cập nhật/xóa cache qua mã nguồn |
Kiểm tra cache; nếu miss thì đọc DB rồi ghi vào cache |
Phục hồi dữ liệu dễ dàng khi lỗi cache |
Cần xử lý logic ứng dụng cho việc đồng bộ |
| Read-through |
Không trực tiếp xử lý ghi qua luồng này |
Ứng dụng chỉ đọc từ Cache; Cache tự tải dữ liệu từ DB |
Ứng dụng không cần quản lý cache miss |
Cache trở thành điểm trọng yếu; nguy cơ dữ liệu cũ |
| Write-through |
Ghi vào Cache, Cache ghi đồng bộ ngay lập tức vào DB |
Kết hợp cùng Read-through |
Dữ liệu luôn đồng nhất tuyệt đối giữa Cache và DB |
Độ trễ ghi cao do chờ cả Cache và DB; tốn tài nguyên |
| Write-back |
Ghi vào Cache, Cache đồng bộ bất đồng bộ xuống DB |
Đọc từ Cache |
Tối ưu hóa cao cho các tác vụ ghi nặng (Write-heavy) |
Nguy cơ mất dữ liệu nếu máy chủ Cache gặp sự cố |
| Write-around |
Ghi trực tiếp vào DB, bỏ qua hoàn toàn bộ nhớ Cache |
Đọc qua Cache-aside hoặc Read-through |
Tránh làm tràn ngập bộ nhớ Cache bởi dữ liệu chỉ ghi một lần |
Hiệu suất đọc ban đầu thấp do bắt buộc chịu cache miss |
Chương 4: Microservices
Chương 4 phân tích sự chuyển dịch từ kiến trúc Monolithic sang kiến trúc Microservices. Đồ án làm rõ hai phương thức giao tiếp cơ bản giữa các dịch vụ độc lập:
- Giao tiếp đồng bộ dựa trên mẫu Remote Procedure Invocation (sử dụng giao thức HTTP/REST).
- Giao tiếp bất đồng bộ sử dụng mẫu Messaging (trao đổi thông điệp qua hàng đợi tin nhắn).
Chương cũng chỉ ra các khuyết điểm cố hữu của Microservices: tính phức tạp trong vận hành, độ trễ mạng, khó khăn trong duy trì tính nhất quán dữ liệu và quản lý giao dịch.
Chương 5: Service discovery & API Gateway
Chương 5 nghiên cứu bài toán định tuyến trong vi dịch vụ (Microservice Routing Pattern) và cơ chế khám phá dịch vụ:
- Phân loại Service Discovery: Mô hình khám phá cấp ứng dụng (Application-level Service Discovery Pattern) và mô hình do nền tảng cung cấp (Platform-provided Service Discovery Pattern).
- Hình thức đăng ký dịch vụ (Service Registration): Tự đăng ký (Self-Registration Pattern) và đăng ký thông qua bên thứ ba (Third-Party Registration Pattern).
Chương 6: Distributed transactions
Chương 6 giải quyết vấn đề toàn vẹn dữ liệu trong môi trường cơ sở dữ liệu phân tán:
- Khái quát về giao dịch ACID truyền thống và các giới hạn khi áp dụng vào vi dịch vụ.
- Phân tích các giao thức khóa đồng thuận phân tán: Two-Phase Commit (2PC) và Three-Phase Commit (3PC).
- Trình bày mẫu kiến trúc Saga và bộ điều phối thực thi Saga (Saga Execution Coordinator - SEC), sử dụng các giao dịch bù trừ (Compensating Transactions) để quản lý luồng nghiệp vụ dài.
- So sánh chi tiết sự đánh đổi giữa mô hình khóa đồng bộ (2PC/3PC) và mô hình phối hợp bất đồng bộ (Saga).
Chương 7: Consensus
Chương 7 đi sâu vào bài toán đồng thuận (Consensus Problem) trong các hệ thống phân tán chịu lỗi. Nội dung tập trung phân tích thuật toán Raft:
- Khái quát các trạng thái nút trong Raft (Leader, Follower, Candidate).
- Cơ chế giao tiếp giữa các nút (bầu chọn Leader qua RequestVote, sao chép nhật ký qua AppendEntries).
- Quy trình triển khai thuật toán Raft, phân tích ưu điểm về tính trực quan, dễ hiểu so với Paxos và các nhược điểm trong mở rộng mạng lưới.
Chương 8: Querying in microservice
Chương 8 giải quyết thách thức truy vấn dữ liệu từ nhiều dịch vụ phân tán thông qua hai mẫu thiết kế:
- Mẫu API Composition: Triển khai qua ví dụ thao tác truy vấn đơn hàng (
findOrder()), phân tích kiến trúc bộ ghép nối API (API Composer), các vấn đề thiết kế phát sinh, ưu điểm và nhược điểm về hiệu năng khi ghép nối dữ liệu qua mạng.
- Mẫu CQRS (Command Query Responsibility Segregation): Động lực ứng dụng CQRS, cấu trúc phân tách luồng lệnh (Command) và luồng truy vấn (Query), thiết kế các khung nhìn (CQRS Views), lựa chọn kho dữ liệu khung nhìn (View Datastore), thiết kế mô-đun truy cập dữ liệu và cơ chế cập nhật, tái đồng bộ khung nhìn.
Chương 9: Deployment
Chương 9 trình bày các mô hình và công cụ triển khai hạ tầng:
- Phân tích sự khác biệt giữa Máy ảo (Virtual Machine) và Container.
- So sánh chiến lược phân bổ phiên bản: Nhiều phiên bản trên một máy chủ vật lý (Multiple instances per host) và Một phiên bản trên một máy chủ (One instance per host).
- Các công nghệ đóng gói và điều phối: Docker, Docker Swarm, Kubernetes (K8s) và Helm Chart.
- Cơ chế giám sát và quản lý nhật ký tập trung sử dụng bộ công cụ ELK (Elasticsearch + Logstash + Kibana).
Chương 10: Xây dựng hệ thống với Spring Boot
Chương 10 đóng vai trò cầu nối hiện thực hóa toàn bộ các mẫu lý thuyết vào mã nguồn Java:
- Ứng dụng
Spring Boot Starter và Spring Data JPA cho các tác vụ CRUD dữ liệu cơ bản.
- Tích hợp
Spring Cloud Stream cho kiến trúc hướng sự kiện và Spring Data Elasticsearch cho tra cứu dữ liệu nâng cao.
- Đóng gói ứng dụng
Spring Boot với Docker và thực thi kiểm tra hợp lệ dữ liệu bằng Spring Boot JSR303.
- Cấu hình gọi dịch vụ declarative bằng
Spring Cloud OpenFeign, quản lý chịu lỗi ngắt mạch qua Spring Cloud Resilience4j.
- Thiết lập trung tâm cấu hình và phát hiện dịch vụ với
Spring Cloud Consul, bảo mật khóa lưu trữ bằng Spring Cloud Vault, và điều khiển quy trình qua Spring State Machine.
Chương 11: Demo và tổng kết
Chương 11 trình bày kịch bản thực nghiệm, vận hành các dịch vụ vi mô đã xây dựng, đánh giá khả năng hoạt động đồng bộ và bất đồng bộ giữa các thành phần, tổng kết các kết quả đạt được trong học kỳ và định hướng hoàn thiện hệ thống.
Kết quả và đóng góp
- Hệ thống hóa lý thuyết thiết kế: Đồ án tổng hợp toàn diện các khối xây dựng cốt lõi, giải thuật cân bằng tải, các chiến lược quản lý bộ nhớ đệm, các mẫu giao tiếp vi dịch vụ, giải pháp quản trị giao dịch phân tán và thuật toán đồng thuận Raft.
- Ánh xạ lý thuyết vào kiến trúc thực tế: Xây dựng khung kiến trúc phân tán sử dụng hệ sinh thái Java Spring Boot, tích hợp đầy đủ các mẫu thiết kế: Service Discovery (Consul), API Gateway, Declarative REST Client (OpenFeign), Circuit Breaker (Resilience4j), Quản lý bí mật (Vault), Máy trạng thái (Spring State Machine) và Triển khai đóng gói (Docker/Kubernetes).
- Đóng góp kỹ thuật: Cung cấp tài liệu phân tích đối sánh chi tiết giữa các giải pháp kỹ thuật (HLB vs SLB, L4 vs L7, 2PC vs Saga, API Composition vs CQRS, 5 chiến lược caching) làm cơ sở thiết kế cho các đồ án phát triển phần mềm phân tán quy mô lớn.
Hạn chế và hướng nghiên cứu tiếp
- Hạn chế: Báo cáo tập trung chủ yếu vào nghiên cứu lý thuyết thiết kế, khảo sát các mẫu kiến trúc và thiết lập môi trường mẫu với Spring Boot trong phạm vi học phần Đồ án 1; chưa cung cấp các bài đo benchmark tải trọng lớn hoặc kiểm thử hiệu năng chịu lỗi chuyên sâu trong môi trường sản xuất đa vùng địa lý.
- Hướng mở rộng: Mở rộng triển khai hoàn chỉnh toàn bộ các kịch bản giao dịch bù trừ tự động bằng Saga Coordinator, hiện thực hóa bộ điều phối Kubernetes trên cụm máy chủ vật lý phân tán, và áp dụng thuật toán Raft tùy biến vào bài toán đồng thuận trạng thái thực tế.
Giá trị tham khảo
Đồ án là tài liệu tham khảo hữu ích cho sinh viên ngành Công nghệ phần mềm, Khoa học máy tính và Hệ thống thông tin đang thực hiện đồ án môn học hoặc khóa luận tốt nghiệp về kiến trúc phân tán. Các nội dung có giá trị tham khảo nổi bật bao gồm:
- Hướng dẫn phân loại và tiêu chí lựa chọn các chiến lược Caching (Chương 3) và mô hình giao dịch phân tán Saga/2PC (Chương 6).
- Cấu trúc thiết kế mẫu truy vấn CQRS và API Composition trong vi dịch vụ (Chương 8).
- Danh mục và cách phối hợp các thư viện trong hệ sinh thái Java Spring Cloud (Chương 10) để giải quyết các vấn đề Service Discovery, Circuit Breaker và Quản lý cấu hình tập trung.
Câu hỏi thường gặp
1. Định lý CAP quy định sự đánh đổi nào trong các hệ thống phân tán?
Theo định lý CAP, một hệ thống phân tán không thể đồng thời thỏa mãn cả ba yếu tố: Tính nhất quán (Consistency), Tính sẵn sàng (Availability) và Khả năng chịu đựng phân vùng (Partition Tolerance). Khi xảy ra phân vùng mạng (network partition), hệ thống bắt buộc phải chọn giữa việc duy trì tính nhất quán dữ liệu (hy sinh tính sẵn sàng) hoặc duy trì tính sẵn sàng (chấp nhận tính nhất quán yếu/nhất quán cuối cùng).
2. Điểm khác biệt cốt lõi giữa hai chiến lược ghi bộ đệm Write-through và Write-back là gì?
Trong chiến lược Write-through, dữ liệu được ghi vào bộ đệm cache và đồng bộ ngay lập tức vào cơ sở dữ liệu trước khi hoàn tất yêu cầu. Ngược lại, trong chiến lược Write-back (Write-behind), dữ liệu chỉ được lưu vào cache và sau đó được ghi bất đồng bộ theo lô hoặc theo định kỳ xuống cơ sở dữ liệu, giúp tối ưu tốc độ ghi nhưng có nguy cơ mất dữ liệu nếu máy chủ cache gặp sự cố trước khi kịp đồng bộ.
3. Bài toán các vị tướng Byzantine (Byzantine Fault) có thể được giải quyết trong điều kiện nào?
Lỗi Byzantine mô tả trạng thái một nút máy chủ gặp sự cố và hoạt động sai lệch, gửi dữ liệu ngẫu nhiên hoặc mâu thuẫn cho các nút khác. Vấn đề này chỉ có thể giải quyết được khi số lượng nút bị lỗi trong cụm phân tán nhỏ hơn $1/3$ tổng số nút của toàn hệ thống.
4. Hai giải pháp xử lý truy vấn dữ liệu phân tán được đồ án phân tích là gì?
Đồ án phân tích hai mẫu thiết kế truy vấn trong vi dịch vụ gồm: Mẫu ghép nối API (API Composition Pattern) - sử dụng một dịch vụ trung gian gọi tuần tự hoặc song song các vi dịch vụ liên quan để gộp kết quả trả về; và Mẫu phân tách trách nhiệm lệnh và truy vấn (CQRS Pattern) - tách biệt hoàn toàn cơ sở dữ liệu ghi và cơ sở dữ liệu đọc nhằm xây dựng các khung nhìn dữ liệu chuyên biệt phục vụ truy vấn tốc độ cao.
Kết luận
Báo cáo đồ án "Thiết Kế Hệ Thống Microservice Với Java" của sinh viên Đinh Quang Dương và Ngô Quang Khải đã hoàn thành việc hệ thống hóa toàn diện các nguyên lý thiết kế hệ thống phân tán và các mẫu hình kiến trúc vi dịch vụ cốt lõi. Công trình làm rõ các bài toán cân bằng tải, bộ đệm, khám phá dịch vụ, giao dịch phân tán, giải thuật đồng thuận Raft và truy vấn CQRS. Đồng thời, đồ án đã định hình khung giải pháp công nghệ hoàn chỉnh dựa trên hệ sinh thái Java Spring Boot và công nghệ đóng gói Container, cung cấp nền tảng lý thuyết và kỹ thuật phục vụ xây dựng các phần mềm phân tán hiện đại.