Bí Quyết Vượt Khó: OpenAI Tối Ưu Postgres Thế Nào Để Xử Lý Hàng Triệu Truy Vấn ChatGPT Mỗi Giây?
Lê Lân
0
Cách OpenAI Tối Ưu Hóa Postgres Để Hỗ Trợ Hàng Triệu Truy Vấn Mỗi Giây
Mở Đầu
OpenAI là một trong những công ty tiên phong trong cuộc cách mạng trí tuệ nhân tạo (AI), với ChatGPT là một trong những ứng dụng mô hình ngôn ngữ lớn (LLM) phổ biến nhất hiện nay.
Với hàng triệu lượt truy vấn mỗi giây, OpenAI phải đảm bảo hệ thống cơ sở dữ liệu của mình hoạt động ổn định và hiệu quả. Postgres, một trong những hệ quản trị cơ sở dữ liệu quan hệ phổ biến nhất, được OpenAI sử dụng cho các workload quan trọng. Điều thú vị là thay vì áp dụng những thủ thuật tối ưu hóa phức tạp, họ chủ yếu dựa vào các phương pháp hay nhất đã được kiểm chứng trong thực tế để cải thiện hiệu suất. Bài viết này sẽ phân tích chi tiết cách OpenAI tối ưu hóa Postgres để đáp ứng được nhu cầu khổng lồ của mình.
Bối Cảnh
OpenAI vận hành một cơ sở dữ liệu chính (primary) và nhiều bản đọc (read replicas). Ban đầu, cơ sở dữ liệu chính không chỉ xử lý các truy vấn ghi mà còn phục vụ các truy vấn đọc, trong khi các read replica chịu trách nhiệm một phần các truy vấn đọc nhất định. Tuy nhiên, khi lưu lượng truy cập tăng cao, họ đã gặp nhiều sự cố và phải dành thời gian củng cố và tối ưu hệ thống cơ sở dữ liệu.
Mục tiêu chính trong những lần tối ưu là giảm tải cho cơ sở dữ liệu chính càng nhiều càng tốt để đảm bảo hệ thống hoạt động ổn định dưới tải lớn.
Các Kỹ Thuật Tối Ưu Hóa Postgres Tại OpenAI
1. Đánh Giá Ứng Dụng Để Loại Bỏ Các Truy Vấn Không Cần Thiết
Bằng cách phân tích và đánh giá kỹ các luồng xử lý của ứng dụng, nhóm kỹ thuật của OpenAI phát hiện ra nhiều truy vấn đọc được thực hiện không cần thiết. Việc loại bỏ những truy vấn dư thừa này đã giúp giảm đáng kể số lượng truy vấn đổ về cơ sở dữ liệu chính.
2. Kiểm Toán Các Truy Vấn ORM Và Sử Dụng SQL Thô Khi Cần Thiết
ORM (Object-Relational Mapping) cung cấp tiện ích giúp lập trình viên tương tác với cơ sở dữ liệu mà không cần viết SQL thuần. Tuy nhiên, ORM đôi khi sinh ra các truy vấn phức tạp không tối ưu.
OpenAI đã:
Phân tích các truy vấn SQL được sinh tự động bởi ORM
Thay thế những truy vấn phức tạp bằng các câu truy vấn SQL thuần tối ưu hơn khi phù hợp
Việc sử dụng SQL thô giúp giảm độ phức tạp và tăng hiệu suất thực thi của các truy vấn.
3. Di Chuyển Các Truy Vấn Đọc Sang Read Replicas
Để giảm áp lực cho cơ sở dữ liệu chính, OpenAI chuyển tối đa các truy vấn đọc sang các bản sao read replicas.
Nhược điểm: có thể xảy ra độ trễ đồng bộ giữa các bản sao và cơ sở dữ liệu chính, ảnh hưởng đến tính nhất quán dữ liệu.
Ưu điểm: Giảm tải trên cơ sở dữ liệu chính một bậc lớn, từ đó cải thiện khả năng chịu tải tổng thể của hệ thống.
4. Áp Dụng Thời Gian Hết Hạn (Timeout) Cho Các Truy Vấn
Các truy vấn chạy lâu có thể chiếm giữ kết nối và gây nghẽn giao dịch.
OpenAI sử dụng:
Cấu hình thời gian timeout cho từng câu lệnh và giao dịch
Có thể áp dụng ở mức ứng dụng hoặc cấu hình trực tiếp trong Postgres
Điều này giúp ngăn chặn hiện tượng nghẽn do các truy vấn chạy quá lâu và đảm bảo các truy vấn khác vẫn được xử lý kịp thời.
5. Sử Dụng Connection Pool Để Tối Ưu Hóa Việc Quản Lý Kết Nối
OpenAI triển khai PgBouncer – một connection pooler cho Postgres để tối ưu việc sử dụng kết nối.
Phương pháp
Mô tả
Connection Pooling ở ứng dụng
Quản lý kết nối ở phía client bằng thư viện của DB
PgBouncer
Làm việc ở phía server DB, dùng proxy để tái sử dụng kết nối hiệu quả hơn
Điều này giúp giảm tải kết nối mới đến DB, cải thiện khả năng xử lý đồng thời và tăng hiệu năng tổng thể.
Kết Luận
Tối ưu hiệu suất cơ sở dữ liệu không cần phải phức tạp hay dựa trên các kỹ thuật cầu kỳ. OpenAI chứng minh rằng với các best practice kinh điển như theo dõi bottleneck, giảm truy vấn không cần thiết, phân phối tải hợp lý và dùng connection pool, bạn hoàn toàn có thể vận hành hệ thống Postgres với khối lượng truy vấn khổng lồ.
Hãy cùng xem thêm video talk chuyên sâu về cách OpenAI scale Postgres: