Trong thế giới hạ tầng đám mây, những điểm không hiệu quả nhỏ có thể phóng đại thành các cuộc rút cạn tài nguyên khổng lồ. Một cuộc điều tra kỹ thuật gần đây đã tiết lộ cách một vấn đề cấu hình tưởng chừng nhỏ với nhãn namespace trong các daemonset Kubernetes đang tiêu thụ hàng terabyte bộ nhớ trên các triển khai quy mô lớn. Khám phá này đã thúc đẩy các cuộc thảo luận rộng hơn về thực hành tối ưu hóa, trách nhiệm của nhà phát triển và chi phí ẩn của các công cụ hạ tầng hiện đại.
![]() |
|---|
| Ảnh chụp màn hình bài đăng blog có tiêu đề "How We Found 7 TiB of Memory Just Sitting Around," làm nổi bật cuộc điều tra kỹ thuật về các điểm kém hiệu quả trong bộ nhớ của Kubernetes |
Cuộc Điều Tra Bộ Nhớ Đã Phát Hiện Tài Nguyên Lãng Phí
Hành trình tối ưu hóa bộ nhớ bắt đầu khi các kỹ sư nhận thấy daemonset ghi log Vector của họ tiêu thụ bộ nhớ nhiều hơn đáng kể so với dự kiến. Điều bắt đầu như giám sát hiệu suất thông thường đã phát hiện ra thủ phạm đáng ngạc nhiên: các nhãn namespace đang được thu thập nhưng hiếm khi được sử dụng. Cuộc điều tra tiết lộ rằng chỉ cần vô hiệu hóa việc thu thập nhãn namespace không cần thiết đã giảm mức sử dụng bộ nhớ tới 50% trong hạ tầng ghi log của họ.
Một bình luận đã nắm bắt được sự ngạc nhiên của cộng đồng về quy mô lãng phí: Tôi phải tự hỏi, đã có ai từng nghĩ rằng hợp lý khi một cụm rõ ràng chỉ cần 120GB bộ nhớ lại đang tiêu thụ 1.2TB chỉ để ghi log? Tâm trạng này phản ánh việc các điểm không hiệu quả về tài nguyên có thể tích lũy một cách không được chú ý dễ dàng như thế nào trong các hệ thống phân phối phức tạp.
Kết quả tối ưu hóa chính:
- Giảm bộ nhớ: 50% cho mỗi instance daemonset của Vector
- Tổng bộ nhớ thu hồi được: 7 TiB trên toàn bộ hạ tầng
- Nguyên nhân chính: Thu thập label namespace của Kubernetes không cần thiết
- Giải pháp: Thay đổi cấu hình để vô hiệu hóa việc xử lý label không sử dụng
![]() |
|---|
| Kết quả phân tích bộ nhớ làm nổi bật mức sử dụng bộ nhớ bất thường dẫn đến phát hiện ra các điểm kém hiệu quả trong hạ tầng logging |
Vấn Đề Rộng Hơn Của Các Điểm Mù Hạ Tầng
Việc thu hồi 7TiB bộ nhớ làm nổi bật một thách thức phổ biến trong các môi trường DevOps hiện đại. Khi các tổ chức mở rộng quy mô, những điểm không hiệu quả nhỏ trở thành các cuộc rút cạn tài nguyên khổng lồ. Cuộc thảo luận tiết lộ những câu chuyện tương tự trên khắp ngành công nghiệp, từ các triển khai cơ sở dữ liệu quá khổ đến các chính sách tự động mở rộng quy mô bị cấu hình sai. Một kỹ sư chia sẻ về việc phát hiện ra một gói đăng ký đang chạy 7 máy chủ MSSQL cho 12 cơ sở dữ liệu mặc dù tổ chức có các kiểm soát đám mây chặt chẽ.
Cuộc trò chuyện chuyển hướng sang lý do tại sao những điểm không hiệu quá rõ ràng như vậy vẫn tồn tại. Một số cho rằng nguyên nhân là do các nhà phát triển tránh né trách nhiệm vận hành, trong khi những người khác chỉ ra sự tăng trưởng tài nguyên dần dần che giấu các vấn đề cho đến khi chúng trở nên nghiêm trọng. Như tác giả ban đầu lưu ý, Bạn sẽ ngạc nhiên về những gì bạn không nhận thấy với đủ số lượng node và sự tăng trưởng tài nguyên đủ chậm theo thời gian.
Các Mẫu Hình Lãng Phí Hạ Tầng Phổ Biến Được Thảo Luận:
- Các instance cơ sở dữ liệu quá lớn (7 máy chủ MSSQL cho 12 cơ sở dữ liệu)
- Các chính sách tự động mở rộng được cấu hình sai
- Các Kubernetes operators chưa được tối ưu hóa
- Cấu hình mặc định không được điều chỉnh cho quy mô
- Sự tăng trưởng tài nguyên dần dần che giấu các điểm kém hiệu quả
Kỳ Vọng Hiệu Suất Và Văn Hóa Kỹ Thuật
Sự cố này đã khơi ra các cuộc thảo luận sâu hơn về văn hóa hiệu suất trong phát triển phần mềm. Nhiều người lập luận rằng các nhà phát triển hiện đại đã trở nên quá chấp nhận hiệu suất kém, không nhận ra tốc độ mà máy tính có khả năng chạy. Như một bình luận đã nhận xét, Ý tưởng rằng bất kỳ ai chấp nhận một yêu cầu đến một trang web mất hơn 30ms là điên rồ, và không ai thực sự nên chấp nhận nó, nhưng chúng ta thường làm vậy.
Điều này kết nối với một chủ đề rộng hơn về các ưu tiên kỹ thuật và phân tích chi phí-lợi ích. Một số người bình luận lưu ý rằng các nỗ lực tối ưu hóa thường cạnh tranh với phát triển tính năng, và các doanh nghiệp phải cân bằng thời gian kỹ thuật với khoản tiết kiệm tiềm năng. Tuy nhiên, việc thu hồi 7TiB chứng minh rằng một số tối ưu hóa mang lại lợi nhuận khổng lồ với những thay đổi mã tối thiểu.
![]() |
|---|
| Biểu đồ mô tả việc sử dụng bộ nhớ theo thời gian, thể hiện sự giảm đáng kể trong mức tiêu thụ bộ nhớ sau các nỗ lực tối ưu hóa |
Giải Pháp Kỹ Thuật Và Cân Nhắc Kiến Trúc
Cuộc thảo luận đã khám phá các cách tiếp cận kỹ thuật khác nhau để ngăn ngừa các vấn đề tương tự. Một số đề xuất các kiến trúc thay thế, chẳng hạn như chạy các phiên bản Vector cho mỗi namespace thay vì dưới dạng daemonset, mặc dù điều này giới thiệu các thách thức khác như tăng tải mạng. Những người khác đặt câu hỏi liệu API Kubernetes cơ bản có thể được tối ưu hóa để giảm chi phí bộ nhớ của các hoạt động list-watch trên các namespace hay không.
Cuộc trò chuyện làm nổi bật cách mẫu operator Kubernetes tiêu chuẩn—liên tục điều hòa trạng thái cụm với các đặc tả—có thể dẫn đến mức tiêu thụ tài nguyên dây chuyền khi không được điều chỉnh cẩn thận. Điều này đã dẫn đến nhận thức ngày càng tăng rằng các operator cần được tinh chỉnh cho các yêu cầu quy mô cụ thể thay vì sử dụng các cấu hình mặc định.
Câu chuyện tối ưu hóa bộ nhớ phục vụ như một lời nhắc nhở rằng trong các hệ thống phân phối, những lựa chọn cấu hình nhỏ có thể có hậu quả to lớn ở quy mô. Nó nhấn mạnh tầm quan trọng của việc giám sát hiệu suất liên tục, đặt câu hỏi về các giả định mặc định và duy trì điều mà một người bình luận gọi là hiệu quả không hợp lý của việc lập hồ sơ và đào sâu. Khi hạ tầng tiếp tục mở rộng quy mô, những thực hành này ngày càng trở nên quan trọng cho cả kiểm soát chi phí và độ tin cậy của hệ thống.



