Tugport tối ưu hóa hiệu suất API bằng cách lưu trữ trạng thái Docker trong bộ nhớ
Tugport v0.1.28 giới thiệu cơ chế cache trong bộ nhớ cho trạng thái dịch vụ và mức sử dụng ổ đĩa, loại bỏ các truy vấn Docker chậm chạp và giảm độ trễ API để tương đương với các endpoint nhẹ.
Bài được dịch tự động từ bản gốc tiếng Anh.
Tugport, một bảng điều khiển quản lý Docker mã nguồn mở tự host (self-hosted), đã cải thiện đáng kể thời gian phản hồi của API bằng cách chuyển từ việc truy vấn Docker theo thời gian thực sang lưu trữ cache trong bộ nhớ. Bắt đầu từ phiên bản 0.1.28 phát hành vào ngày 26 tháng 10 năm 2026, ứng dụng cung cấp trạng thái dịch vụ, số liệu về mức sử dụng ổ đĩa và kiểm tra cập nhật từ các giá trị được cache, những giá trị này được làm mới ngầm ở nền tảng thay vì chặn yêu cầu của người dùng.
Chuyện gì đã xảy ra
Trước bản cập nhật này, bảng điều khiển Tugport gặp phải độ trễ rõ rệt khi tải danh sách dự án hoặc thống kê máy chủ. Mỗi yêu cầu về trạng thái dịch vụ đòi hỏi API phải liệt kê các container trên mọi máy chủ được kết nối, một quy trình có thể mất khoảng 100 mili giây cho mỗi lần liệt kê trên hệ thống bận rộn. Tương tự, việc tính toán mức sử dụng ổ đĩa của Docker liên quan đến việc đo kích thước của từng volume, một tác vụ có thể mất vài giây, trong khi việc kiểm tra các bản cập nhật phần mềm mỗi khi truy cập trang cài đặt có nguy cơ chạm tới giới hạn tốc độ (rate limit) của GitHub đối với các cuộc gọi không xác thực.
Giải pháp, được triển khai trong commit b460853 thông qua pull request #39, bao gồm mười tệp và 107 dòng mã bổ sung. Nhà phát triển nhận thấy rằng thành phần proxy của bảng điều khiển đã duy trì sẵn một bảng định tuyến cập nhật nhất cho việc quản lý lưu lượng. Bằng cách phơi bày trạng thái nội bộ này cho API, bảng điều khiển có thể trả lời các câu hỏi về trạng thái container mà không cần truy vấn trực tiếp daemon Docker. Đối với dữ liệu chậm hơn và ít quan trọng hơn như mức sử dụng ổ đĩa và khả năng cập nhật, hệ thống hiện sử dụng chiến lược stale-while-revalidate (phục vụ dữ liệu cũ trong khi làm mới lại), phục vụ dữ liệu cache ngay lập tức trong khi làm mới nó ở nền tảng.
Các bài kiểm tra được tiến hành vào ngày 14 tháng 11 năm 2026, đối chiếu với bảng điều khiển đang chạy phiên bản 0.1.35, đã xác nhận hiệu quả của những thay đổi này. Thời gian cần thiết để liệt kê tất cả các dịch vụ trở nên không thể phân biệt về mặt thống kê so với endpoint API nhanh nhất, vốn chỉ đơn thuần trả về phiên bản ứng dụng. Sự khác biệt về thời gian phản hồi nhỏ hơn nhiễu mạng, cho thấy công việc nặng nhọc của việc kiểm tra nội bộ Docker đã được loại bỏ thành công khỏi đường dẫn quan trọng (critical path) của các yêu cầu từ người dùng.
Chi tiết chính
- Phát hành phiên bản: Các cải tiến về cache được giới thiệu trong Tugport v0.1.28 vào ngày 26 tháng 10 năm 2026.
- Cache trạng thái dịch vụ: API hiện đọc từ một snapshot chung về trạng thái container do proxy duy trì, snapshot này xây dựng lại bảng định tuyến dựa trên các sự kiện Docker và cứ sau 30 giây.
- Xử lý sự kiện: Để đảm bảo hiển thị ngay lập tức các dịch vụ mới hoặc bị xóa, proxy hiện lắng nghe các sự kiện Docker
createvàdestroyngoài các sự kiện start, stop và thay đổi sức khỏe (health). - Độ tươi mới của mức sử dụng ổ đĩa: Dữ liệu mức sử dụng ổ đĩa của Docker được cache trong năm phút, với các lần làm mới ở nền tảng đảm bảo rằng yêu cầu đầu tiên sau khi khởi động lại cũng nhanh chóng.
- Khoảng thời gian kiểm tra cập nhật: Các kiểm tra tìm bản phát hành mới trên GitHub được cache trong mười phút để tránh giới hạn tốc độ và giảm các vòng gọi đi bên ngoài.
- Kết quả hiệu suất: Trên v0.1.35, thời gian phản hồi trung vị của endpoint
/api/serviceslà 90 ms, tương đương với mức trung vị 87 ms của endpoint nhẹ/api/me.
Bối cảnh
Để hiểu rõ sự tối ưu hóa này, cần xem xét cách các công cụ quản lý Docker thường tương tác với daemon Docker. Hầu hết các bảng điều khiển truy vấn API Docker trực tiếp mỗi khi người dùng tải dashboard. Điều này liên quan đến giao tiếp giữa các quy trình (inter-process communication) và, trong các cấu hình phân tán, là các cuộc gọi mạng tới các máy chủ từ xa. Các thao tác như liệt kê tất cả các container hoặc tính toán kích thước của các volume tốn kém về mặt tính toán vì Docker phải kiểm tra metadata cho từng đối tượng.
Khái niệm được sử dụng ở đây thường được gọi là "stale-while-revalidate". Thay vì bắt người dùng chờ đợi dữ liệu mới, hệ thống phục vụ giá trị tốt nhất đã biết gần nhất ngay lập tức. Đồng thời, nó kích hoạt một quy trình nền để lấy dữ liệu mới nhất. Nếu việc lấy dữ liệu nền thất bại, hệ thống giữ lại giá trị cũ và chờ đến chu kỳ tiếp theo trước khi thử lại. Mô hình này phổ biến trong trình duyệt web để cache tài nguyên nhưng ít được áp dụng cho việc quản lý trạng thái backend trong các công cụ hạ tầng, nơi độ chính xác thường được ưu tiên hơn tốc độ.
Tại sao điều này quan trọng
Đối với các đội ngũ vận hành hạ tầng riêng, độ phản hồi của dashboard là một yếu tố then chốt trong hiệu quả vận hành. Một bảng điều khiển chậm chạp sẽ ngăn cản việc kiểm tra thường xuyên, có thể dẫn đến việc phát hiện muộn các vấn đề. Bằng cách giảm độ trễ của danh sách dịch vụ xuống mức tương đương với các cuộc gọi metadata đơn giản, Tugport đảm bảo rằng giao diện cảm giác nhanh nhạy ngay cả khi số lượng container được quản lý tăng lên. Điều này đặc biệt quan trọng đối với những người tự host (self-hosters) có thể chạy hàng chục dịch vụ trên phần cứng hạn chế, nơi mỗi mili giây thời gian CPU tiết kiệm được từ chi phí giám sát có thể được dành cho khối lượng công việc thực tế.
Hơn nữa, phương pháp này giảm tải cho chính daemon Docker. Việc liên tục liệt kê các container và tính toán mức sử dụng ổ đĩa có thể tiêu tốn đáng kể tài nguyên I/O và CPU, đặc biệt là trên các máy chủ có nhiều volume hoặc các build đang hoạt động. Bằng cách cache các kết quả này, Tugport tối thiểu hóa dấu chân (footprint) của nó trên hệ thống host, để lại nhiều tài nguyên hơn cho các ứng dụng mà nó được thiết kế để quản lý. Điều này phù hợp với mục tiêu rộng lớn hơn của việc tự host: tối đa hóa tiện ích trong khi tối thiểu hóa ma sát quản trị.
Bạn có thể làm gì
- Nâng cấp Tugport: Nếu bạn đang sử dụng Tugport, hãy đảm bảo bạn đang chạy phiên bản 0.1.28 trở lên để hưởng lợi từ các cải tiến hiệu suất.
- Xem xét các chiến lược cache: Kiểm tra các công cụ nội bộ của bạn để tìm các mô hình tương tự nơi độ chính xác thời gian thực không hoàn toàn cần thiết, và cân nhắc triển khai logic stale-while-revalidate cho các truy vấn nặng.
- Giám sát sự kiện proxy: Nếu bạn duy trì các công cụ tương tự, hãy xác minh rằng các listener sự kiện của bạn bao phủ tất cả các giai đoạn vòng đời, bao gồm tạo và hủy, để tránh các trạng thái UI cũ kỹ.
- Kiểm tra giới hạn tốc độ: Audit bất kỳ cuộc gọi API bên ngoài nào trong các công cụ tự host của bạn, chẳng hạn như kiểm tra cập nhật GitHub, và triển khai cache để tránh chạm tới giới hạn tốc độ trong giờ cao điểm.
- Benchmark API của bạn: Sử dụng các công cụ để đo độ trễ endpoint dưới tải, so sánh các endpoint dữ liệu nặng với các endpoint nhẹ để xác định các nút thắt cổ chai tiềm năng.
- Cân nhắc các worker nền tảng: Chuyển các phép tính đắt đỏ sang các tác vụ nền tảng cập nhật một kho lưu trữ trạng thái chung, cho phép các luồng API chính của bạn vẫn phản hồi nhanh.



