Nguồn: PlanetScale Blog
Tóm tắt
Graceful degradation là khả năng hệ thống tiếp tục hoạt động ở mức giảm sút khi một phần của nó gặp sự cố hoặc bị quá tải. Trong ngữ cảnh Postgres, điều này có nghĩa là ứng dụng vẫn có thể phục vụ người dùng ngay cả khi database đang bị stress hoặc không hoàn toàn sẵn sàng.
Caching là hình thức phổ biến nhất của graceful degradation. Bằng cách lưu trữ bản sao dữ liệu thường xuyên truy cập trong Redis hoặc Memcached, ứng dụng có thể phục vụ requests ngay cả khi Postgres đang gặp vấn đề. Hai pattern quan trọng là read-through caching (cache lấy dữ liệu từ DB khi cache miss) và stale-while-revalidate (phục vụ dữ liệu cũ trong khi refresh background). Feature flags cho phép tắt các tính năng không quan trọng khi database bị stress — mọi ứng dụng nên có emergency kill switches được lưu trong key-value store nhanh, không phải trong Postgres.
Write queuing là kỹ thuật thay vì ghi trực tiếp vào database, các writes được đưa vào queue (Kafka, SQS, Redis) và xử lý sau. Điều này đặc biệt hữu ích cho các hoạt động không cần phản hồi ngay lập tức như ghi audit log hay update analytics. Load shedding — từ chối các requests có độ ưu tiên thấp khi hệ thống bị quá tải — bảo vệ database bằng cách đặt requests theo tier ưu tiên và reject những tier thấp khi queue đầy.
Kết hợp các kỹ thuật này với circuit breakers và timeout hợp lý tạo ra một hệ thống database có khả năng chịu lỗi cao. Điều quan trọng là phải thiết kế graceful degradation từ đầu thay vì thêm vào sau khi gặp sự cố, vì mỗi kỹ thuật đều có những trade-off cần được xem xét kỹ lưỡng trong context của ứng dụng cụ thể.