StackOverflow / ServerFault มีกี่เว็บ
หากคำตอบคือ "มากกว่าหนึ่ง" มันจะบรรลุSession Stickinessในขณะที่การสำรวจ DNS?
StackOverflow / ServerFault มีกี่เว็บ
หากคำตอบคือ "มากกว่าหนึ่ง" มันจะบรรลุSession Stickinessในขณะที่การสำรวจ DNS?
คำตอบ:
เว็บไซต์ขนาดใหญ่อาจ "โหลดสมดุล" ในหลาย ๆ เครื่อง ในการตั้งค่าโหลดบาลานซ์จำนวนมากผู้ใช้อาจไปที่เครื่องแบ็กเอนด์ใด ๆ ในระหว่างการใช้งาน ด้วยเหตุนี้จึงมีวิธีการจำนวนหนึ่งที่อนุญาตให้เครื่องจำนวนมากแบ่งปันเซสชันผู้ใช้
วิธีที่เลือกจะขึ้นอยู่กับรูปแบบของการทำโหลดบาลานซ์ที่ใช้รวมถึงความพร้อมใช้งาน / ความจุของหน่วยเก็บข้อมูลส่วนหลัง:
ข้อมูลเซสชันที่เก็บไว้ในคุกกี้เท่านั้น : ข้อมูลเซสชัน (ไม่ใช่ตัวระบุเซสชันเท่านั้น) จะถูกเก็บไว้ในคุกกี้ของผู้ใช้ ตัวอย่างเช่นคุกกี้ของผู้ใช้อาจมีเนื้อหาของตะกร้าสินค้าของพวกเขา เพื่อป้องกันผู้ใช้ยุ่งเกี่ยวกับข้อมูลเซสชัน HMAC อาจถูกจัดเตรียมไว้พร้อมกับคุกกี้ วิธีนี้น่าจะเหมาะสมที่สุดสำหรับการใช้งานส่วนใหญ่:
ตัวโหลดบาลานซ์จะนำผู้ใช้ไปยังเครื่องเดียวกันเสมอ : ตัวโหลดบาลานซ์จำนวนมากอาจตั้งค่าคุกกี้เซสชันของตัวเองเพื่อระบุว่าเครื่องแบ็กเอนด์เครื่องใดที่ผู้ใช้ทำการร้องขอและนำพวกเขาไปยังเครื่องนั้นในอนาคต เนื่องจากผู้ใช้จะถูกนำไปยังเครื่องเดียวกันเสมอจึงไม่จำเป็นต้องแชร์เซสชันระหว่างเครื่องหลายเครื่อง สิ่งนี้อาจดีในบางสถานการณ์:
ฐานข้อมูลแบ็กเอนด์ที่ใช้ร่วมกันหรือที่เก็บคีย์ / ค่า : ข้อมูลเซสชั่นจะถูกเก็บไว้ในฐานข้อมูลแบ็กเอนด์ซึ่ง webservers ทั้งหมดสามารถเข้าถึงแบบสอบถามและอัปเดต เบราว์เซอร์ของผู้ใช้จัดเก็บคุกกี้ที่มีตัวระบุ (เช่นรหัสเซสชัน) โดยชี้ไปที่ข้อมูลเซสชัน นี่อาจเป็นวิธีที่สะอาดที่สุดในสามวิธีนี้:
โดยรวมแล้วเว็บแอปพลิเคชั่นแบบไดนามิกส่วนใหญ่จะทำการค้นหาฐานข้อมูลจำนวนมากหรือการร้องขอที่เก็บคีย์ / ค่าดังนั้นฐานข้อมูลหรือที่เก็บคีย์ / ค่าจึงเป็นที่เก็บโลจิคัลของข้อมูลเซสชัน
หากคำถามของคุณคือวิธีการรักษาเซสชันในเว็บเซิร์ฟเวอร์หลาย ๆ หน้าคำตอบคือโดยปกติแล้วจะใช้ฐานข้อมูลส่วนกลาง แทนที่จะอาศัยเว็บเซิร์ฟเวอร์อินสแตนซ์เพื่อติดตามไฟล์เซสชั่นในระบบไฟล์โลคอลคุณควรเขียนรหัสเซสชันและข้อมูลลงในฐานข้อมูลส่วนกลางและเว็บเซิร์ฟเวอร์ทั้งหมดจะดึงข้อมูลจากที่นั่นแทน
การใช้ nemcached น่าจะเป็นทางออกที่ดีไม่ใช่ @David Pashley ที่ถูกกล่าวถึง
หมายความว่ามีอินสแตนซ์ memcached ระยะไกลที่ใช้ร่วมกันโดยเซิร์ฟเวอร์ทั้งหมดและใช้ส่วนขยาย memcache PECL ที่ให้ตัวจัดการเซสชั่นของตัวเอง
เพียงต้องการเปลี่ยนพารามิเตอร์สองตัวในการกำหนดค่า php!
นี่คือบทแนะนำที่ดีhttp://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/
IIRC ใน DotNetRocks # 440 พวกเขากล่าวว่าเซิร์ฟเวอร์หนึ่งช่วงเวลา ไม่ทราบว่าเป็นกรณีนี้หรือไม่
แก้ไข: จริง ๆ แล้วมันเป็น Hanselminutes # ขอโทษ
คุณสามารถตั้งค่าคุกกี้
คุณสามารถคำนวณแฮชของรีโมต IP (ที่รีโมตโฮสต์ที่มีเลขคี่ที่ง่ายที่สุดไปที่เซิร์ฟเวอร์ A แม้แต่โฮสต์ที่กำหนดหมายเลขไปที่เซิร์ฟเวอร์ B)
ดูเหมือนว่าคุณสามารถทำได้ผ่านค่าบางค่าที่อยู่กับระบบต้นทางหากคุณใช้ช่องสัญญาณ ssl
โดยทั่วไปกลไกดังกล่าวข้างต้นต้องใช้เซิร์ฟเวอร์ "reverse proxy" หรือ load balancer ของบางประเภท ตัวโหลดบาลานซ์นั้นยอมรับทราฟฟิกแล้วนำไปยังเซิร์ฟเวอร์ใดก็ตามที่เริ่มเซสชันในครั้งแรกตามเกณฑ์ข้อใดข้อหนึ่งข้างต้น
ฉันไม่แน่ใจว่าสิ่งที่คุณหมายถึงโดย "การสำรวจ DNS"
a) คุณสามารถจัดเก็บข้อมูลเซสชันในคุกกี้ผู้ใช้ ดูไร้สัญชาติแข็งคุกกี้ที่ร้านค้าไม่มีข้อมูลที่ฝั่งเซิร์ฟเวอร์ แต่สถานะเซสชันรักษาhttp://www.cl.cam.ac.uk/~sjm217/papers/protocols08cookies.pdf b) คุณสามารถเปลี่ยนที่เก็บข้อมูลแบ็คเอนด์ของเซสชั่นเป็นฐานข้อมูลหรือ memcached ในการกำจัดจุดความล้มเหลวจุดเดียวคุณสามารถตั้งค่าการจำลองแบบฐานข้อมูลหรือหลายโหนด memcached หมายเหตุแนะนำว่า memcached ในการตั้งค่าเช่นนี้ซึ่งการสูญเสียสถานะผู้ใช้ในเซสชันไม่ใช่ข้อผิดพลาดใหญ่และไม่ทำให้เขามีความสุขมาก สำหรับกรณีที่สถานะการสงวนมีความสำคัญให้ใช้ฐานข้อมูล ทั้ง PHP, Django และ Rails ช่วยให้นักพัฒนาสามารถเขียนแบ็กเอนด์เซสชันที่กำหนดเองได้