10 điểm bởi xguru 2021-11-15 | 1 bình luận | Chia sẻ qua WhatsApp
  • Heap đang vận hành Postgres đa petabyte để phục vụ phân tích

  • 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

  • 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%

  • Vấn đề trở nên tệ hơn do sử dụng ZFS, một hệ thống tệp CoW (Copy-on-Write)

→ Mỗi khi một block được cập nhật, một bản sao mới sẽ được ghi ra

  • Tất nhiên, CoW cũng có nhiều ưu điểm

→ 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

→ Độ 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

→ 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

  • 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

→ 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

→ Cần xóa các block đã được unlink trước đó và trộn chúng với các block hiện có

→ 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

→ 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%

  • Nhóm đã thử nâng cấp lên ZFS 2.x và chuyển từ nén lz4 sang nén Zstandard

→ lz4 cực kỳ nhanh và cho tỷ lệ nén khoảng 4.4x

→ Zstandard cho tỷ lệ nén tới khoảng 5.5x, tương đương cải thiện 20%

→ Tuy nhiên, nhiều benchmark cho thấy Zstandard chậm hơn lz4

→ Vì vậy, nhóm quyết định kiểm thử nghiêm ngặt trong điều kiện thực tế

→ 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

  • Cụm DB của Heap được chia thành 5 node, mỗi node thuộc một ASG riêng

→ 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

→ 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

→ 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

1 bình luận

 
xguru 2021-11-15

Bài viết không nhắc đến mức sử dụng CPU, nhưng khi xem bình luận của tác giả gốc trên HN thì thấy nói rằng nó đã tăng từ khoảng ~40% lên ~50%. (Ý là Zstd dùng CPU nhiều hơn)