Từ yêu cầu và sơ đồ đến kiến trúc phần mềm có khả năng mở rộng và tin cậy.
Học thiết kế hệ thống như một chuỗi quyết định, dùng nền tảng học tập nhỏ làm ví dụ xuyên suốt.
Functional requirement mô tả hành vi user cần; non-functional requirement nêu chất lượng và ràng buộc như latency, accessibility, security, capacity và recovery.
High-level design giải thích boundary, data flow, dependency và tradeoff lớn; low-level design mô tả component, interface, data model, algorithm và cách xử lý failure.
Capacity estimate chuyển giả định sản phẩm thành request/giây, concurrency, dung lượng lưu trữ và network throughput. Khoảng giá trị cùng peak factor thực tế hơn con số chính xác giả tạo.
Monolith deploy như một unit, modular monolith giữ boundary nội bộ trong unit đó, còn microservice deploy bounded capability độc lập. Nhu cầu team và operation nên dẫn quyết định.
Stateless service xử lý request tiếp theo ở bất kỳ instance tương đương nào nhờ state bên ngoài; stateful service sở hữu durable/session state ảnh hưởng placement, scaling và recovery.
Trong event-driven system, producer publish sự kiện đã xảy ra và consumer phản ứng độc lập. Pub/sub giảm coupling trực tiếp nhưng thêm bài toán retry, ordering, duplicate và observability.
Serverless chạy function hoặc managed service theo nhu cầu trong khi provider xử lý nhiều phần infrastructure. Bạn vẫn chịu trách nhiệm code, data, permission, cost behavior, observability và recovery.
Vertical scaling tăng resource cho một máy; horizontal scaling thêm máy. Cách thứ hai cần distribution, coordination và state design nên không tự động tốt hơn.
Availability đo dịch vụ có dùng được không, reliability đo hành vi đúng theo thời gian và fault tolerance là khả năng thiết kế tiếp tục hoạt động khi một thành phần hỏng.
CAP nói rằng khi network partition xảy ra, distributed system phải chọn giữa luôn phản hồi và bảo đảm mọi phản hồi thấy write thành công mới nhất. Nó không có nghĩa là vĩnh viễn chỉ chọn hai thuộc tính.
Load balancer phân phối request tới target khỏe; consistent hashing giữ phần lớn ánh xạ key-node ổn định khi node thay đổi, hữu ích cho partitioned cache và stateful routing.
Replication sao chép dữ liệu; partitioning chia dữ liệu; sharding thường là horizontal partition thấy được ở application trên nhiều database node. Hiểu rõ cơ chế quan trọng hơn nhãn.
Latency là thời gian cho mỗi operation, throughput là lượng việc hoàn thành theo thời gian và bottleneck là resource đang giới hạn hệ thống. Cải thiện một metric có thể làm metric khác xấu đi.
Cache đổi freshness và độ đơn giản để lấy latency và tải thấp hơn. Thiết kế an toàn cần nêu cache key, owner, lifetime, sự kiện invalidation và hành vi khi miss hoặc stale.
CDN phục vụ nội dung cacheable gần user, edge chạy logic giới hạn ở biên mạng, reverse proxy route và bảo vệ origin, còn API gateway áp policy riêng cho API.
Queue hấp thụ burst, rate limit bảo vệ capacity hữu hạn và backpressure báo producer chậm lại. Kết hợp chúng giúp giới hạn công việc thay vì che overload đến lúc hỏng.
SOLID hướng tới responsibility/dependency dễ đổi; DRY giảm duplication có hại; KISS ưu tiên dễ hiểu; YAGNI trì hoãn capability suy đoán. Đây là lens chứ không phải luật tuyệt đối.
UML là visual vocabulary chung. Dùng diagram nhỏ nhất trả lời câu hỏi: class cho structure, sequence cho interaction theo thời gian, state cho lifecycle và component cho boundary.
Design pattern đặt tên cho tradeoff và cách sắp trách nhiệm lặp lại; nó hữu ích khi context phù hợp chứ không phải đồ trang trí cho code đơn giản.
Authentication xác minh danh tính, authorization giới hạn hành động, TLS bảo vệ dữ liệu khi truyền và disaster recovery khôi phục dịch vụ cùng dữ liệu sau sự cố lớn. Mỗi lớp xử lý một rủi ro khác nhau và cần được kiểm thử cùng nhau.
Test distributed system phải bao phủ boundary và thời gian: retry, duplicate, delay, reorder, partial failure, giả định clock và recovery—not chỉ happy path.