Performance Optimization
Khi áp dụng trong môi trường sản xuất với hàng triệu người dùng hoặc quyền, bạn có thể gặp phải sự giảm hiệu suất trong việc thực thi Casbin. Thông thường có hai nguyên nhân:
Lưu lượng truy cập cao
Số lượng yêu cầu đến mỗi giây quá lớn, ví dụ, 10.000 yêu cầu/s cho một thể hiện Casbin đơn lẻ. Trong những trường hợp như vậy, một đối tượng Casbin đơn lẻ thường không đủ để xử lý tất cả các yêu cầu. Có hai giải pháp có thể:
Sử dụng đa luồng để kích hoạt nhiều đối tượng Casbin, do đó bạn có thể tận dụng tối đa tất cả các lõi trong máy tính. Để biết thêm chi tiết, xem: Đa luồng.
Triển khai các đối tượng Casbin lên một cụm (nhiều máy tính) và sử dụng Watcher để đảm bảo tất cả các đối tượng Casbin đều nhất quán. Để biết thêm chi tiết, xem: Watchers.
Bạn có thể sử dụng cả hai phương pháp trên cùng một lúc, ví dụ, triển khai Casbin lên một cụm gồm 10 máy tính, trong đó mỗi máy có 5 luồng cùng lúc phục vụ các yêu cầu thực thi Casbin.
Số lượng quy tắc chính sách cao
Trong môi trường điện toán đám mây hoặc đa đối tượng, có thể cần hàng triệu quy tắc chính sách. Mỗi lần gọi thực thi hoặc thậm chí là tải các quy tắc chính sách lúc ban đầu cũng có thể rất chậm. Những trường hợp như vậy thường có thể được giảm thiểu theo một số cách:
Kiểm tra xem mô hình Casbin hoặc chính sách của bạn có được thiết kế tốt không. Một mô hình và chính sách được viết tốt sẽ trừu tượng hóa logic trùng lặp cho mỗi người dùng/người thuê và giảm số lượng quy tắc xuống một mức rất nhỏ (\< 100). Ví dụ, bạn có thể chia sẻ một số quy tắc mặc định cho tất cả người thuê và cho phép người dùng tùy chỉnh các quy tắc của họ sau này. Các quy tắc tùy chỉnh có thể ghi đè lên các quy tắc mặc định. Nếu bạn có bất kỳ câu hỏi nào thêm, vui lòng mở một vấn đề trên GitHub tại kho lưu trữ Casbin.
Thực hiện phân đoạn để cho phép một enforcer Casbin chỉ tải một tập nhỏ các quy tắc chính sách. Ví dụ, enforcer_0 có thể phục vụ cho người thuê_0 đến người thuê_99, trong khi enforcer_1 có thể phục vụ cho người thuê_100 đến người thuê_199. Để chỉ tải một tập con của tất cả các quy tắc chính sách, xem: Policy Subset Loading.
Cấp quyền cho các vai trò RBAC thay vì trực tiếp cho người dùng. RBAC của Casbin được triển khai bởi một cây kế thừa vai trò (như một bộ nhớ đệm). Vì vậy, với một người dùng như Alice, Casbin chỉ mất thời gian O(1) để truy vấn cây RBAC về mối quan hệ vai trò-người dùng và thực hiện thực thi. Nếu các quy tắc g của bạn không thay đổi thường xuyên, thì cây RBAC sẽ không cần phải được cập nhật liên tục. Xem chi tiết cuộc thảo luận này tại đây: https://github.com/casbin/casbin/issues/681#issuecomment-763801583
Bạn có thể thử tất cả các phương pháp trên cùng một lúc.