11 điểm bởi kunggom 2020-03-27 | 3 bình luận | Chia sẻ qua WhatsApp

Cloudflare đã đăng trên blog về việc thay đổi chiến lược cache, qua đó giảm tải ghi lên SSD tới 25%. (tiếng Anh) Trái với quan niệm thông thường, Cloudflare đạt được mục tiêu này bằng cách cố ý cache cả những mục không được truy cập thường xuyên trong bộ nhớ.

SSD là một loại phương tiện lưu trữ yếu ở tác vụ ghi. Các ô nhớ flash dùng để lưu dữ liệu trên SSD có số lần ghi lại bị giới hạn; việc xóa nội dung đã ghi rồi ghi lại không chỉ mất tương đối nhiều thời gian mà còn làm cả tác vụ đọc chậm theo. Vì vậy, trên SSD, việc đặc biệt giảm các tác vụ ghi là một tối ưu hóa quan trọng.

Cloudflare là công ty sử dụng nhiều SSD NVMe hiệu năng cao trong máy chủ, nên đương nhiên đã suy nghĩ kỹ về vấn đề này. Cloudflare là một nhà cung cấp CDN, mà CDN về bản chất có thể xem như một bộ nhớ đệm mạng khổng lồ. Nội dung được lưu trên SSD của máy chủ Cloudflare rốt cuộc cũng là các mục đã được cache; và qua quan sát, có rất nhiều nội dung sau khi được cache một lần thì không bao giờ được truy cập lại nữa (thường được gọi là “one-hit wonder”). Vì thế, tốt hơn là không nên ghi những mục như vậy lên SSD. Kết quả thử nghiệm phương án không ghi các mục chỉ được truy cập đúng 1 lần lên SSD cho thấy độ trễ của SSD giảm gần 5%, một kết quả rất đáng khích lệ.

Vấn đề là làm thế nào áp dụng ý tưởng này ở quy mô dịch vụ thực tế. Không cache ở lần truy cập đầu tiên mà chỉ bắt đầu cache từ lần thứ hai có nghĩa là lượng truy cập đến nguồn dữ liệu gốc sẽ tăng gấp đôi. Đương nhiên điều đó kéo theo nhiều loại chi phí, và sẽ thành phản tác dụng. Vì vậy Cloudflare đã phân tầng việc ghi cache thành 2 cấp. Ban đầu, mọi mục đều được cache vào bộ nhớ như một “cache ngắn hạn”, sau đó chỉ những mục có số lần truy cập nhiều lần mới được “thăng cấp” để ghi vào SSD như một “cache lâu dài”. Khi đó, các mục có tần suất truy cập thấp sẽ tự nhiên bị đẩy ra khỏi cache. Với tác vụ đọc thì không cần phải lo riêng. Bởi vì việc đọc từ SSD đã được hệ điều hành cache rất tốt sẵn rồi.

Tất nhiên, việc áp dụng ý tưởng này vào dịch vụ thực tế đang được tiến hành một cách thận trọng và bảo thủ. Về cơ bản, cách làm này sẽ tiêu tốn khá nhiều bộ nhớ; nó có thể cạnh tranh với cache hiện có của hệ điều hành, hoặc trong lúc cập nhật tiến trình máy chủ theo kiểu triển khai không gián đoạn, bộ nhớ có thể tạm thời thiếu hụt và kết quả là chất lượng dịch vụ xấu đi. Vì vậy, ý tưởng trên đang được đưa vào dần dần theo cách chỉ áp dụng trên những máy chủ mới được bổ sung, nơi có đủ bộ nhớ.

Kết quả triển khai là tích cực. Sau khi tinh chỉnh dung lượng cache trong quá trình áp dụng, lượng ghi lên SSD đã giảm từ 20% đến tối đa 25%, và điều này dẫn tới giảm độ trễ. Trong tương lai, Cloudflare cho biết sẽ mở rộng kỹ thuật này sang nhiều máy chủ hơn, cải thiện thuật toán thăng cấp để đưa thêm cả cơ chế “giáng cấp”, và xây dựng một cấu trúc phân tầng tính đến không chỉ SSD mà cả HDD.

Điều đầu tiên tôi nghĩ tới khi đọc ý tưởng này là kỹ thuật garbage collection của Java. Tiền đề cơ bản của phần lớn các kỹ thuật garbage collection chính là cái gọi là [đa số đối tượng chỉ được sử dụng trong thời gian rất ngắn], tức “weak generational hypothesis”. Có lẽ nội dung trên là một trường hợp nguyên lý đó được biến thể và áp dụng lại.

3 bình luận

 
xguru 2020-03-27

Cảm ơn vì bài viết hay.

Có vẻ trên blog của Cloudflare cũng đăng khá nhiều bài đáng để đọc.

Blog kỹ thuật của một công ty tốt được vận hành như thế nào https://vi.news.hada.io/topic?id=1698

Có lẽ là vì ở Cloudflare, việc viết blog đã trở thành một phần văn hóa nội bộ.

 
saltylight 2020-03-27

Rất thú vị, cảm ơn bạn.

 
sduck4 2020-03-27

Wow.. dịch luôn một lần nữa haha, cảm ơn bạn đã chia sẻ nội dung hay.