18 điểm bởi xguru 2021-04-20 | 1 bình luận | Chia sẻ qua WhatsApp

Dịch vụ thông báo đẩy OneSignal đã vận hành 75TB dữ liệu trên 40 máy chủ DB và rút ra những bài học sau

  • Tổng quan dữ liệu: các bảng subscribers, notifications là lớn nhất

  • Bloat: hiện tượng chiếm nhiều dung lượng hơn, chậm hơn và cần nhiều sức mạnh tính toán hơn

 → Table bloat: VACUUM

 → Index bloat: tối ưu hóa Heap Only Tuple(HOT)

 → bật autovacuum

 → tự động hóa partitioning bảng bằng extension pg_partman

 → pg_repackpgcompacttable

  • Nâng cấp cơ sở dữ liệu

 → pg_upgrdae yêu cầu đưa cơ sở dữ liệu offline nên không thể chọn

 → thiết lập riêng máy chủ PostgreSQL phiên bản mới và dùng logical replication với extension pglogical

  • XID Wraparound

 → Tính năng MVCC(Multi Version Concurrency Control) của PostgreSQL sử dụng transaction ID 32-bit nên nếu có nhiều transaction thì có thể nhanh chóng vượt ngưỡng

 → việc giám sát lượng XID còn lại là rất quan trọng

 → autovacuum_freeze_max_age

  • Replica Promotion

 → để promote Replica nhanh, đặt phía sau haproxy

  • Partitioning

 → các phiên bản PostgreSQL gần đây đã tích hợp sẵn tính năng table partitioning

 → khi cần partitioning, nếu có thể thì nên chia thành nhiều partition

   OneSignal dự định partition từ 16 lên 256, rồi tiếp tục lên 4096

  • Sharding

 → không có hỗ trợ tích hợp sẵn

 → ban đầu sharding theo Tenant ID, được phân chia theo phạm vi của UUID v4

 → hiện đang xây dựng data proxy có nhận biết partition và shard

1 bình luận

 
xguru 2021-04-20