<p>- Heap đang vận hành Postgres đa petabyte để phục vụ phân tích<br />
- Khi tăng trưởng nhanh, mức sử dụng node vượt 80% và gây ra vấn đề hiệu năng trong pipeline thu thập dữ liệu <br />
- Nguyên nhân của vấn đề là SSD có xu hướng suy giảm hiệu năng khi mức sử dụng tiến gần 100%<br />
- Vấn đề trở nên tệ hơn do sử dụng ZFS, một hệ thống tệp CoW (Copy-on-Write) <br />
→ Mỗi khi một block được cập nhật, một bản sao mới sẽ được ghi ra <br />
- Tất nhiên, CoW cũng có nhiều ưu điểm<br />
→ Nén ở cấp hệ thống tệp dễ thực hiện hơn so với các hệ thống tệp khác, giúp tiết kiệm không gian với tỷ lệ nén 4-5x <br />
→ Độ bền cao hơn nên có thể vô hiệu hóa `full_page_writes` của Postgres, từ đó cải thiện hiệu năng và giảm tổng IO <br />
→ Snapshot point-in-time đảm bảo tính nhất quán - do các trang thực tế không thể bị thay đổi nên vẫn giữ được trang cũ ngay cả trong lúc snapshot<br />
- Tuy nhiên, các hệ thống tệp CoW như ZFS sẽ giảm hiệu năng khi dung lượng đầy dần<br />
→ Mỗi lần cập nhật trang, block allocator phải tìm block trống, nên khi mức sử dụng cao thì suy giảm hiệu năng sẽ rất nghiêm trọng <br />
→ Cần xóa các block đã được unlink trước đó và trộn chúng với các block hiện có <br />
→ Tình hình còn tệ hơn vì để đạt tỷ lệ nén cao hơn, kích thước block đã được đặt lớn tới 64kb <br />
→ Vì những lý do này, tốt nhất là không để mức sử dụng của ZFS vượt quá 80% <br />
<br />
- Nhóm đã thử nâng cấp lên ZFS 2.x và chuyển từ nén lz4 sang nén Zstandard <br />
→ lz4 cực kỳ nhanh và cho tỷ lệ nén khoảng 4.4x <br />
→ Zstandard cho tỷ lệ nén tới khoảng 5.5x, tương đương cải thiện 20% <br />
→ Tuy nhiên, nhiều benchmark cho thấy Zstandard chậm hơn lz4<br />
→ Vì vậy, nhóm quyết định kiểm thử nghiêm ngặt trong điều kiện thực tế <br />
→ Kết quả kiểm thử cho thấy hiệu năng truy vấn không đổi, mức sử dụng lưu trữ giảm khoảng 20%, và thời gian truy vấn ghi giảm một nửa <br />
<br />
- Cụm DB của Heap được chia thành 5 node, mỗi node thuộc một ASG riêng <br />
→ Việc thay node khá đơn giản: chỉ cần tách node khỏi ASG, ASG sẽ tạo node mới, khôi phục từ bản backup cuối cùng và chuyển sang chế độ warm standby <br />
→ Tạo một AMI với cấu hình mới rồi triển khai lần lượt từng node <br />
→ Tổng mức sử dụng giảm khoảng 21%, thời gian ghi giảm 50%, còn hiệu năng truy vấn gần như không thay đổi </p>
1 bình luận