การเชื่อมต่อพร้อมกัน
พร็อกซีอาจทำงานเสถียรเมื่อภาระงานน้อย แต่เริ่มตอบข้อผิดพลาดเมื่อรันตัวทำงานหรือโปรแกรมร่วมกันมากขึ้น สาเหตุหนึ่งที่เป็นไปได้คือใช้เกินจำนวนการเชื่อมต่อพร้อมกันที่อนุญาต
เพดานนี้เป็นหนึ่งในขีดจำกัดการใช้พร็อกซี เพื่อเข้าใจว่าควบคุมอะไรและเหตุใดจึงถึงเพดาน ต้องอธิบายก่อนว่าการเชื่อมต่อเครือข่ายคืออะไรและทำงานผ่านพร็อกซีอย่างไร
การเชื่อมต่อคืออะไรและทำงานอย่างไร
การเชื่อมต่อเครือข่ายคือช่องสื่อสารที่สองโปรแกรมสร้างเพื่อแลกเปลี่ยนข้อมูล เช่น เบราว์เซอร์เชื่อมเว็บเซิร์ฟเวอร์เพื่อขอหน้าและรับเนื้อหา การเชื่อมต่อเป็นเส้นทางสำหรับการแลกเปลี่ยน ส่วนคำขอและคำตอบเป็นข้อความที่ส่งผ่านเส้นทางนั้น
พิจารณาการเชื่อมต่อ TCP แบบทั่วไป แอปติดต่อ IP เซิร์ฟเวอร์และพอร์ตของบริการที่ต้องการ ทั้งสองฝั่งแลกข้อความควบคุมเพื่อสร้างการเชื่อมต่อ จากนั้นข้อมูลเดินทางเป็นหน่วยเล็กที่เรียกว่าแพ็กเก็ต TCP ติดตามการส่ง จัดให้ส่งข้อมูลที่หายซ้ำ และส่งมอบข้อมูลให้ผู้รับตามลำดับ ทั้งสองฝั่งเก็บข้อมูลเกี่ยวกับการแลกเปลี่ยนตราบที่การเชื่อมต่อยังอยู่
เมื่อใช้ TCP พร็อกซีทั่วไป แอปเชื่อมต่อเซิร์ฟเวอร์พร็อกซีก่อน พร็อกซีสร้างอีกการเชื่อมต่อไปยังเว็บปลายทาง แล้วส่งข้อมูลระหว่างสองการเชื่อมต่อทั้งสองทิศ จึงต้องรักษาการสื่อสารกับทั้งไคลเอนต์และปลายทาง
แอปส่งคำขอ รับคำตอบ และใช้การเชื่อมต่อที่มีแลกเปลี่ยนครั้งถัดไปได้ เช่น การได้รับหน้าหนึ่งไม่ได้ปิดการเชื่อมต่อเสมอ เบราว์เซอร์อาจเก็บไว้ขอเซิร์ฟเวอร์เพิ่ม เมื่อไม่ต้องการ ฝั่งหนึ่งจะปิด หรือข้อผิดพลาดและการหมดเวลาก็ทำให้สิ้นสุดได้ การเชื่อมต่อจึงคงอยู่โดยไม่ต้องรับส่งข้อมูลตลอดเวลาก่อนปิด
โปรแกรมรักษาหลายการเชื่อมต่อพร้อมกันได้ เช่น รับข้อมูลทางหนึ่ง รอคำตอบอีกทาง และเตรียมทางที่สามไว้ขอภายหลัง สิ่งเหล่านี้คือการเชื่อมต่อพร้อมกัน จำนวนบอกช่องสื่อสารที่เปิดอยู่ขณะนั้น ไม่ใช่จำนวนคำขอสะสมตั้งแต่เปิดโปรแกรม
ขีดจำกัดนี้วัดอะไร
การเชื่อมต่อที่เปิดอยู่ใช้หนึ่งตำแหน่งของโควตาที่เกี่ยวข้อง เมื่อปิดและบริการนำออกจากจำนวนที่นับ ตำแหน่งนั้นใช้ได้อีก นี่เป็นขีดจำกัดกิจกรรมปัจจุบัน การชนเพดานจึงไม่ได้ใช้ยอดการเชื่อมต่อรายเดือนหมด
วิธีนับเข้ากับโควตาลูกค้าเป็นกฎของบริการอีกเรื่อง การมีเส้นทางเครือข่ายสองช่วงที่พร็อกซีไม่ได้ใช้โควตาสองหน่วยโดยอัตโนมัติ
ผู้ให้บริการกำหนดเพดานเพราะการเชื่อมต่อที่เปิดใช้ทรัพยากรเซิร์ฟเวอร์แม้ส่งข้อมูลน้อย การเชื่อมต่อที่รอคำตอบยังต้องดูแล การควบคุมจำนวนช่วยให้บริการเหลือความจุพอสำหรับภาระงานที่ตกลงรองรับ
บริการเดียวอาจใช้ขีดจำกัดหลายแบบ
| ขีดจำกัด | สิ่งที่ควบคุม |
|---|---|
| การเชื่อมต่อพร้อมกัน | จำนวนการเชื่อมต่อที่เปิดค้างร่วมกันได้ |
| คำขอพร้อมกัน | จำนวนคำขอที่กำลังดำเนินการพร้อมกันได้ |
| คำขอต่อวินาที | ความถี่ที่ส่งหรือประมวลผลคำขอได้ |
| ความเร็วรับส่ง | ปริมาณข้อมูลที่ย้ายได้ต่อวินาที |
| โควตาปริมาณข้อมูล | ปริมาณข้อมูลที่รับส่งได้ตลอดรอบเรียกเก็บเงิน |
ดังนั้นข้อมูลไม่จำกัดจึงไม่ได้บอกจำนวนการเชื่อมต่อพร้อมกัน อาจมีเพดานความเร็วในการเปิดการเชื่อมต่อใหม่แยกด้วย การเปิดปิดเร็วมากอาจชนเพดานนั้นแม้มีเปิดค้างเพียงไม่กี่รายการในแต่ละขณะ
ทำไมจำนวนเธรดไม่เท่าจำนวนการเชื่อมต่อ
จำนวนเธรดหรือตัวทำงานอธิบายวิธีจัดงานของแอป ไม่ได้บอกอย่างแน่นอนว่าพร็อกซีจะนับกี่การเชื่อมต่อ งานเดียวอาจติดต่อหลายเซิร์ฟเวอร์ และสคริปต์อะซิงโครนัสจัดการงานเครือข่ายหลายรายการได้โดยไม่สร้างเธรดระบบปฏิบัติการแยกให้แต่ละรายการ
ไม่ใช่ทุกคำขอ HTTP ต้องเปิดใหม่ ไคลเอนต์ใช้การเชื่อมต่อเดิมซ้ำได้ และ HTTP/2 ส่งหลายคำขอพร้อมกันบนหนึ่งการเชื่อมต่อได้ จำนวนคำขอจึงต่างจากจำนวนการเชื่อมต่อ
คำที่ผู้ให้บริการใช้ก็สำคัญ ขีดจำกัดที่เรียก “threads” หรือ “sessions” อาจหมายถึงการเชื่อมต่อที่เปิดหรือคำขอที่ประมวลผลอยู่ เซสชันคง IPที่รักษา IP พร็อกซีเดิมสำหรับคำขอที่เกี่ยวข้องไม่จำเป็นต้องเป็นหนึ่งการเชื่อมต่อเครือข่าย นิยามที่มีประโยชน์คือสิ่งที่บริการนับจริง
โปรแกรมใดใช้โควตาร่วมกัน
เพดานอาจผูกกับบัญชี แพ็กเกจที่ซื้อ IP พร็อกซีรายตัว หรือเกตเวย์หนึ่ง หากเป็นเพดานบัญชีหรือแพ็กเกจ ให้รวมการเชื่อมต่อจากทุกโปรแกรมและอุปกรณ์ที่ใช้โควตานั้น การแบ่งรายการ IP ให้หลายคอมพิวเตอร์ไม่ได้สร้างโควตาแยกต่อเครื่อง
หากจำกัดต่อ IP การกระจายต่างออกไป ที่อยู่ที่งานมากอาจถึงเพดานแต่อีกที่อยู่ยังว่าง ย้ายงานบางส่วนไปที่สองอาจช่วยได้หากบริการไม่ได้กำหนดเพดานรวมที่ต่ำกว่าอีก แพ็กเกจอาจมีทั้งโควตารวมและส่วนแบ่งย่อยสำหรับผู้ใช้หรือ IP ไคลเอนต์แต่ละรายการ
จำนวน IP ไคลเอนต์ที่ตรวจสอบสิทธิ์ได้เป็นอีกการตั้งค่า ควบคุมว่าเครือข่ายใดเข้าพร็อกซีได้ ไม่ใช่เครือข่ายเหล่านั้นเปิดได้กี่การเชื่อมต่อ หลายอุปกรณ์หลัง IP สาธารณะเดียวอาจใช้ร่วมกันทั้งกฎสิทธิ์และส่วนแบ่งการเชื่อมต่อที่ผูกกับ IP นั้น
การเปลี่ยน IP พร็อกซีที่เว็บเห็นไม่ได้รีเซ็ตโควตาการเชื่อมต่อทั้งบัญชี เช่นเดียวกับเปลี่ยนชื่อเซสชันคง IP หรือโปรโตคอลก็ไม่ได้เพิ่มความจุโดยอัตโนมัติ เพดานยังผูกกับบัญชี แพ็กเกจ หรือจุดเชื่อมต่อที่ผู้ให้บริการใช้เป็นฐานนับ
ทำไมการเชื่อมต่อสะสม
การเชื่อมต่อสะสมเมื่อเปิดใหม่เร็วกว่าที่ของเดิมปิด เกิดได้ขณะโหลดหน้า ดาวน์โหลดไฟล์ หรือทำงานเครือข่ายอื่นขนานกัน บางการเชื่อมต่อยังส่งข้อมูลหรือรอคำตอบขณะที่แอปเปิดเพิ่ม ทั้งหมดนับในโควตาพร้อมกันและอาจรวมกันจนเต็มเพดานพร็อกซี
คำตอบช้าทำให้การเชื่อมต่อถูกใช้ไว้นานขึ้น หากโปรแกรมยังเริ่มงานใหม่จังหวะเดิม งานที่ไม่เสร็จจะสะสม หากคงกิจกรรมขนานไว้ระดับเดิม เว็บที่ช้าลงมักทำให้งานสำเร็จต่อนาทีน้อยลง ทั้งสองเกิดได้โดยแพ็กเกจพร็อกซีไม่ได้เปลี่ยน
การดาวน์โหลดนานและการเชื่อมต่อที่รอหมดเวลาก็ให้ผลเดียวกันได้ จึงอาจมีการเชื่อมต่อเปิดจำนวนมากพร้อมความเร็วรับส่งต่ำ เพราะเวลาส่วนใหญ่ใช้รอ ไม่ได้ย้ายข้อมูล
บางการเชื่อมต่อถูกตั้งใจเก็บไว้ระหว่างคำขอ มักเรียก keep-alive ช่วยเลี่ยงการสร้างใหม่ทุกครั้ง แต่การเชื่อมต่อว่างยังอาจใช้โควตาหากบริการนับสิ่งที่เปิด การส่งการเชื่อมต่อกลับกลุ่มของแอปทำให้ใช้ซ้ำได้ ไม่ได้หมายความว่าปิดที่พร็อกซีแล้ว
อีกปัญหาคือจัดการปิดหรือคืนการเชื่อมต่อผิด เกิดได้ทั้งซอฟต์แวร์สำเร็จรูปและสคริปต์เขียนเอง เช่น โค้ดเริ่มอ่านคำตอบ เจอข้อผิดพลาด แล้วเริ่มคำขอใหม่โดยไม่อ่านจบหรือปิดคำตอบก่อนหน้า หากเปิดใหม่ต่อเนื่องแต่ของเดิมยังค้าง แอปอาจใช้โควตาเต็มโดยไม่ได้ทำงานที่มีประโยชน์เพิ่ม จึงควรตรวจการเก็บกวาดหลังข้อผิดพลาดและการยกเลิก ไม่ใช่หลังสำเร็จเท่านั้น
การจัดการถูกต้องให้ไคลเอนต์ใช้การเชื่อมต่อที่เหมาะซ้ำหรือปิดสิ่งที่ไม่ต้องใช้ การกำหนดหมดเวลาช่วยไม่ให้งานที่ละทิ้งรอตลอดไป การปิดการใช้ซ้ำทุกที่ไม่ใช่วิธีแก้ทั่วไป เพราะเพิ่มงานตั้งการเชื่อมต่อและอาจเพิ่มอัตราเปิดใหม่ เป้าหมายคือจำนวนการเชื่อมต่อใช้ซ้ำที่ควบคุมได้ พร้อมคืนหรือปิดสิ่งไม่จำเป็นอย่างถูกต้อง
ทำไมพร็อกซีเหมือนใช้ได้ แล้วหยุด แล้วกลับใช้ได้
ความล้มเหลวเป็นช่วงเมื่อภาระสูงเป็นเหตุให้ควรตรวจเพดานการเชื่อมต่อตั้งแต่ต้น บางที่อยู่ดูใช้ได้บางที่อยู่ล้มเหลว แล้วรูปแบบสลับในเวลาไม่นาน จากมุมแอปจึงเหมือนรายการพร็อกซีส่วนต่าง ๆ ออฟไลน์สลับกัน
คำอธิบายหนึ่งคือโควตารวมเต็ม การเชื่อมต่อเดิมอาจทำต่อได้ แต่ความพยายามเปิดเพิ่มถูกปฏิเสธหรือให้รอ เมื่อของเก่าปิด บางรายการใหม่ผ่านได้ ส่วนบางรายการล้มเหลวเมื่อที่ว่างเต็มอีก ผลที่เปลี่ยนมาจากการแข่งขันใช้โควตาเดียว ไม่ใช่กลุ่ม IP เสียตายตัว
บางครั้งเรียกพฤติกรรมนี้ว่า throttling ในที่นี้ข้อจำกัดกระทบการรับการเชื่อมต่อใหม่ ไม่จำเป็นต้องลดความเร็วทุกการเชื่อมต่อที่เปิดแล้ว การตอบสนองแน่นอนขึ้นกับบริการ อาจแจ้งเพดานชัด ปฏิเสธ หรือปล่อยให้ไคลเอนต์หมดเวลา ไม่ได้รับประกันว่าจะมีคิวรอ
หากจะตรวจคำอธิบายนี้ ให้เทียบเวลาล้มเหลวกับจำนวนการเชื่อมต่อ และลดกิจกรรมขนานชั่วคราวทั่วโปรแกรมที่แชร์โควตา หากไม่ล้มเหลวเมื่อกิจกรรมต่ำกว่าเพดานและกลับล้มเหลวเมื่อเต็ม เพดานอาจเป็นสาเหตุ แต่การขาดช่วงคล้ายกันเกิดจากเว็บเป้าหมายหรือเครือข่ายได้ด้วย การหมดเวลาหรือ HTTP 429, 502 หรือ 503 เพียงอย่างเดียวไม่ได้ยืนยันว่าชนเพดานพร็อกซี ต้องดูแหล่งและข้อความข้อผิดพลาด
ทำงานที่มีประโยชน์ให้อยู่ในเพดานอย่างไร
เริ่มจากเว็บไซต์และการทำงานจริงที่ซอฟต์แวร์ต้องทำ ค่อยเพิ่มงานขนานแล้วดูผลสำเร็จ เวลาตอบ และยอดการเชื่อมต่อสูงสุด ทดสอบสั้นกับหน้าเร็วอาจไม่แทนการรันเต็มที่มีการเข้าสู่ระบบ คำตอบใหญ่ และจุดปลายช้า
- จัดงบการเชื่อมต่อร่วมให้ทุกโปรแกรม เผื่อกิจกรรมอื่นและช่วงพุ่งสั้น หากหลายโพรเซสใช้แพ็กเกจเดียว การตั้งแต่ละโพรเซสให้ใช้ได้เต็มโควตาแพ็กเกจอาจทำให้เกินเมื่อรันร่วมกัน
- ควบคุมทั้งงานและการเชื่อมต่อ กลุ่มการเชื่อมต่อเก็บสิ่งที่ใช้ซ้ำได้ ตรวจว่าค่าขนาดเป็นเพดานจริงหรือเพียงจำนวนที่เก็บหลังใช้ ไคลเอนต์บางแบบเปิดเพิ่มหากไม่ได้เปิดโหมดรอ คงการจัดการคำตอบและการหมดเวลาไว้ รวมถึงเมื่องานล้มเหลว
- กระจายเวลาเริ่มและการลองซ้ำ การเริ่มทุกเบราว์เซอร์พร้อมกันหรือลองใหม่ทุกคำขอทันทีสร้างยอดพุ่งอีก ใช้จำนวนลองซ้ำจำกัดและเพิ่มเวลารอ โดยให้อยู่ในงบภาระงานเดียวกัน การหมดเวลายังไม่ได้พิสูจน์ว่าการกระทำที่ส่งไปล้มเหลว จึงต้องระวังการซื้อหรืออัปเดตซ้ำ
- วัดงานที่สำเร็จ ตัวทำงานเพิ่มมีประโยชน์ตราบที่เพิ่มปริมาณผลสำเร็จ เมื่อส่วนใหญ่เพิ่มการรอและข้อผิดพลาด ค่าที่ต่ำกว่าอาจทำงานเดียวกันเสร็จเร็วกว่า หากแดชบอร์ดเฉลี่ยกิจกรรมตามช่วง ยอดพุ่งสั้นอาจเห็นไม่ชัดเท่าเวลาข้อผิดพลาดของแอป
สำหรับงานเบราว์เซอร์ การไม่ดาวน์โหลดสิ่งไม่จำเป็นก็ลดกิจกรรมเครือข่ายได้ การบล็อกภาพหรือวิดีโออาจช่วยเมื่องานไม่ต้องใช้ แต่ลบสคริปต์อาจทำให้การทำงานเองเสีย ควรตัดสินจากว่างานที่ตั้งใจยังสำเร็จถูกต้องหรือไม่
เมื่อใดเพดานสูงขึ้นช่วยได้
ความจุการเชื่อมต่อเพิ่มมีประโยชน์เมื่อแอปจัดการการเชื่อมต่อถูกต้อง และภาระที่ต้องการชนเพดานผู้ให้บริการสม่ำเสมอ ช่วยให้รันงานร่วมกันได้มากขึ้นโดยไม่แย่งโควตาเล็กก้อนเดียว
สิ่งที่ซื้อต้องเพิ่มเพดานที่ชนจริง การเพิ่ม IP ช่วยได้หากจำกัดต่อ IP และกระจายงานไปหลายที่อยู่ หากเป็นเพดานรวมแพ็กเกจ แพ็กเกจใหม่หรือส่วนเสริมต้องเพิ่มโควตารวมนั้น จำนวน IP เพิ่มเพียงอย่างเดียวไม่ได้พิสูจน์ว่าจะเพิ่มโควตา
ยังมีเพดานอื่น ไคลเอนต์อาจมีกลุ่มเล็กกว่า เครื่องอาจขาดทรัพยากรเครือข่าย หรือปลายทางจำกัดคำขอ การเชื่อมต่อมือถือหนึ่งเส้นก็มีแบนด์วิดท์ของตัวเองไม่ว่าพร็อกซีอนุญาตกี่การเชื่อมต่อ การซื้อความสามารถทำพร้อมกันเพิ่มไม่ได้ลบข้อจำกัดเหล่านี้ และไม่ได้ซ่อมสคริปต์ที่ปล่อยการเชื่อมต่อค้าง
เป้าหมายใช้งานจริงคือมีที่พอสำหรับยอดพุ่งปกติโดยผิดพลาดน้อย เมื่อทำได้แล้ว โควตาการเชื่อมต่อเพิ่มจึงเป็นการเพิ่มความจุที่มีประโยชน์ แทนการเลื่อนแก้แอปออกไป
