Performance Optimization
เมื่อใช้งานในสภาพแวดล้อมการผลิตที่มีผู้ใช้หรือสิทธิ์การเข้าถึงหลายล้านราย, คุณอาจพบกับการลดลงของประสิทธิภาพในการบังคับใช้ Casbin โดยทั่วไปมีสองสาเหตุ:
ปริมาณการจราจรที่สูง
จำนวนคำขอที่เข้ามาต่อวินาทีมากเกินไป, ตัวอย่างเช่น, 10,000 คำขอ/วินาทีสำหรับอินสแตนซ์ Casbin เดียว ในกรณีเช่นนี้, อินสแตนซ์ Casbin เดียวมักจะไม่เพียงพอที่จะจัดการกับคำขอทั้งหมด มีสองวิธีแก้ไขที่เป็นไปได้:
ใช้การทำงานแบบหลายเธรดเพื่อเปิดใช้งานอินสแตนซ์ Casbin หลายอัน, ดังนั้นคุณสามารถใช้ประโยชน์จากคอร์ทั้งหมดในเครื่องได้อย่างเต็มที่ สำหรับรายละเอียดเพิ่มเติม, ดูที่: Multi-threading
ติดตั้งอินสแตนซ์ Casbin ไปยังคลัสเตอร์ (หลายเครื่อง) และใช้ Watcher เพื่อให้แน่ใจว่าอินสแตนซ์ Casbin ทั้งหมดมีความสอดคล้องกัน สำหรับรายละเอียดเพิ่มเติม, ดูที่: Watchers
คุณสามารถใช้วิธีทั้งสองข้างต้นได้พร้อมกัน, ตัวอย่างเช่น, ติดตั้ง Casbin ไปยังคลัสเตอร์ที่มี 10 เครื่อง โดยที่แต่ละเครื่องมี 5 เธรดที่ทำงานพร้อมกันในการให้บริการคำขอการบังคับใช้ Casbin
จำนวนกฎนโยบายที่สูง
ในสภาพแวดล้อมคลาวด์หรือหลายผู้เช่า, อาจจำเป็นต้องใช้กฎนโยบายหลายล้านข้อ การเรียกใช้การบังคับใช้ทุกครั้งหรือแม้แต่การโหลดกฎนโยบายในเวลาเริ่มต้นอาจช้ามาก กรณีเช่นนี้สามารถบรรเทาได้โดยหลายวิธี:
ตรวจสอบว่าโมเดล Casbin หรือนโยบายของคุณออกแบบมาอย่างดีหรือไม่ โมเดลและนโยบายที่เขียนได้ดีจะสรุปตรรกะที่ซ้ำกันสำหรับแต่ละผู้ใช้/ผู้เช่าและลดจำนวนกฎลงไปเป็นระดับที่น้อยมาก (\< 100) ตัวอย่างเช่น, คุณสามารถแชร์กฎบางอย่างที่เป็นค่าเริ่มต้นให้กับผู้เช่าทุกรายและอนุญาตให้ผู้ใช้ปรับแต่งกฎของตนเองในภายหลัง กฎที่ปรับแต่งได้สามารถแทนที่กฎเริ่มต้นได้ หากคุณมีคำถามเพิ่มเติม, กรุณาเปิด issue บน GitHub ในที่เก็บข้อมูลของ Casbin
ทำการแบ่งส่วนเพื่อให้ตัวบังคับใช้ Casbin โหลดเฉพาะชุดกฎนโยบายที่เล็ก ตัวอย่างเช่น, enforcer_0 สามารถให้บริการ tenant_0 ถึง tenant_99, ในขณะที่ enforcer_1 สามารถให้บริการ tenant_100 ถึง tenant_199 เพื่อโหลดเฉพาะชุดย่อยของกฎนโยบายทั้งหมด, ดูที่: Policy Subset Loading
ให้สิทธิ์การเข้าถึงกับบทบาท RBAC แทนที่จะให้กับผู้ใช้โดยตรง RBAC ของ Casbin ได้รับการดำเนินการโดยต้นไม้การสืบทอดบทบาท (เป็นแคช) ดังนั้น, สำหรับผู้ใช้เช่น Alice, Casbin ใช้เวลาเพียง O(1) เพื่อค้นหาความสัมพันธ์ระหว่างบทบาทกับผู้ใช้ในต้นไม้ RBAC และดำเนินการบังคับใช้ หากกฎ g ของคุณไม่เปลี่ยนแปลงบ่อยครั้ง, ต้นไม้ RBAC ก็จะไม่จำเป็นต้องอัปเดตอย่างต่อเนื่อง ดูรายละเอียดของการสนทนานี้ที่นี่: https://github.com/casbin/casbin/issues/681#issuecomment-763801583
คุณสามารถลองใช้วิธีทั้งหมดข้างต้นได้พร้อมกัน