21 điểm bởi xguru 2024-04-10 | 1 bình luận | Chia sẻ qua WhatsApp

Động lực tạo ra

  • Trong các thư viện cache cho Go, không có thư viện nào thực sự contention-free. Phần lớn chỉ là map đi kèm mutex và chính sách loại bỏ
  • Vì vậy, chúng không đạt được tốc độ như các cache ở ngôn ngữ khác (ví dụ: Caffeine)
  • Ristretto, cache nhanh nhất của Dgraph Labs, nhanh hơn đối thủ tới 30% (Otter còn nhanh hơn nhiều) nhưng hit ratio không tốt
  • Trong ứng dụng thực tế, điều này có thể trở thành vấn đề vì bạn không muốn bị hiệu năng của thư viện cache giới hạn
  • Kết quả là tác giả muốn tạo ra bộ nhớ đệm nhanh nhất và dễ dùng nhất

Tính năng chính

  • API đơn giản: chỉ cần thiết lập các tham số mong muốn trong Builder rồi sử dụng
  • Tự động cấu hình: tự động được cấu hình dựa trên khả năng xử lý song song của ứng dụng
  • Generic: có thể an toàn sử dụng mọi kiểu có thể so sánh được làm khóa, và mọi kiểu làm giá trị
  • TTL: các giá trị hết hạn sẽ tự động bị xóa khỏi cache
  • Loại bỏ dựa trên chi phí: hỗ trợ loại bỏ dựa trên chi phí của từng mục
  • Thông lượng vượt trội: hiện là thư viện cache nhanh nhất, vượt xa các sản phẩm cạnh tranh hiện nay (Theine, Ristretto, Bigcache, Fastcache)
  • Hit ratio xuất sắc: sử dụng thuật toán S3-FIFO mới, cho kết quả rất tốt

1 bình luận

 
xguru 2024-04-10

Cái tên nghe quen quen nên tìm thử thì hóa ra có cái này rồi
Otter: mô hình đa phương thức có thể tinh chỉnh câu lệnh trong ngữ cảnh
Chắc từ giờ không nên làm gì đó với tên động vật nữa. Trừ khi là loài cực kỳ hiếm, còn không thì đa phần đều đã có rồi.

Ý kiến phân tích của AI cũng ổn nên mình thêm vào thử.

Ý kiến của GN⁺

  • Thư viện cache mã nguồn mở này có vẻ sẽ rất hữu ích cho các lập trình viên Go. Đặc biệt, với các dịch vụ cần hiệu năng cao, đây có thể là một giải pháp thay thế để vượt qua giới hạn hiệu năng của các thư viện cache hiện có
  • Việc áp dụng thuật toán dựa trên bài báo để đạt được hiệu năng cạnh tranh so với các thư viện hiện có là điểm khá ấn tượng. Tuy nhiên, trước khi áp dụng vào dịch vụ thực tế, vẫn cần kiểm chứng hiệu năng qua nhiều benchmark khác nhau
  • API đơn giản giúp dễ sử dụng, đồng thời hỗ trợ generics của các phiên bản Go mới, nên xét về trải nghiệm phát triển cũng có vẻ khá tốt
  • Các thư viện cache Go tương tự có thể kể đến groupcache, fastcache, ristretto, freecache, v.v. Có lẽ nên so sánh kỹ đặc tính hiệu năng và mức độ dễ sử dụng
  • Có vẻ sẽ hữu ích hơn cho các dịch vụ xử lý lưu lượng lớn hơn là các dịch vụ cá nhân/quy mô nhỏ. Cần cân nhắc kỹ nên đặt kích thước cache bao nhiêu, chu kỳ eviction ở mức nào, v.v. Ngoài ra, nếu phụ thuộc quá nhiều vào cache thì có thể phát sinh vấn đề về tính nhất quán, nên cần lưu ý