ประสิทธิภาพการทำงานของ https เปรียบเทียบกับ http สำหรับ apache เป็นเท่าใด


50

จะมีการเปรียบเทียบประสิทธิภาพการทำงานของ https เท่าใดเมื่อเปรียบเทียบกับ http สำหรับหน้าเดียวกัน สมมติว่าฉันสามารถจัดการ abc.php ได้ 1,000 คำร้องขอนั้นจะลดลงเท่าไรเมื่อเข้าถึงผ่าน https ฉันรู้ว่าสิ่งนี้อาจขึ้นอยู่กับฮาร์ดแวร์การตั้งค่าระบบปฏิบัติการ ฯลฯ ฯลฯ แต่ฉันแค่มองหากฎง่ายๆ / การประมาณโดยทั่วไป


2
มันคงจะดีถ้าได้เห็นคำตอบที่ยอมรับสำหรับเรื่องนี้
Hyppy

คำตอบ:


57

สำหรับการทดสอบที่รวดเร็วและสกปรก (เช่นไม่มีการเพิ่มประสิทธิภาพใด ๆ !) ฉันเปิดใช้งานเว็บไซต์เริ่มต้นอย่างง่ายของ Apache apache2 (ซึ่งเพิ่งบอกว่า "ใช้งานได้!") ด้วยทั้ง http และ https (ใบรับรองที่ลงชื่อด้วยตนเอง) บน VM ท้องถิ่น Ubuntu 9.04 และวิ่ง apache มาตรฐาน " ab" ที่มี 10,000 คำขอ (ไม่มีการทำงานพร้อมกัน) ไคลเอ็นต์และเซิร์ฟเวอร์อยู่บนเครื่อง / VM เดียวกัน:

ผลลัพธ์สำหรับhttp (" ab -n 10000 http://ubuntu904/index.html")

  • ใช้เวลาในการทดสอบ: 2.664วินาที
  • คำขอต่อวินาที: 3753.69 (# / วินาที)
  • เวลาต่อคำขอ: 0.266ms

ผลลัพธ์สำหรับhttps (" ab -n 10000 https://ubuntu904/index.html"):

  • ใช้เวลาในการทดสอบ: 107.673วินาที
  • คำขอต่อวินาที: 92.87 (# / วินาที)
  • เวลาต่อคำขอ: 10.767ms

หากคุณมองอย่างใกล้ชิด (เช่นกับ tcpdump หรือ wireshark) ที่การสื่อสาร tcp / ip ของคำขอเดียวคุณจะเห็นว่ากรณี http ต้องใช้ 10 แพ็กเก็ตระหว่างไคลเอนต์และเซิร์ฟเวอร์ในขณะที่ https ต้องการ 16: เวลาแฝงสูงกว่ามาก (เพิ่มเติมเกี่ยวกับความสำคัญของความล่าช้าที่นี่ )

การเพิ่ม keep-alive ( abตัวเลือก-k) ลงในการทดสอบช่วยปรับปรุงสถานการณ์เพราะตอนนี้คำขอทั้งหมดแชร์การเชื่อมต่อเดียวกันนั่นคือค่าโสหุ้ย SSL ต่ำกว่า แต่ https ก็ยังวัดได้ช้ากว่า:

ผลลัพธ์สำหรับhttpพร้อมแบบ keep-alive (" ab -k -n 10000 http://ubuntu904/index.html")

  • ใช้เวลาในการทดสอบ: 1.200วินาที
  • คำขอต่อวินาที: 8334.86 (# / วินาที)
  • เวลาต่อคำขอ: 0.120ms

ผลลัพธ์สำหรับhttps with keep-alive (" ab -k -n 10000 https://ubuntu904/index.html"):

  • ใช้เวลาในการทดสอบ: 2.711วินาที
  • คำขอต่อวินาที: 3688.12 (# / วินาที)
  • เวลาต่อคำขอ: 0.271ms

สรุป :

  • ใน testcase ง่าย ๆ นี้ https ช้ากว่า http มาก
  • เป็นความคิดที่ดีที่จะเปิดใช้งานการสนับสนุน https และเปรียบเทียบเว็บไซต์ของคุณเพื่อดูว่าคุณต้องการชำระค่าใช้จ่าย https หรือไม่
  • ใช้ wireshark เพื่อสร้างความประทับใจให้กับค่าใช้จ่าย SSL

1
+1 ทำได้ดีมาก ขอบคุณสำหรับการโพสต์ตัวเลข
MN

เราสามารถหารายละเอียดบางอย่างเกี่ยวกับฮาร์ดแวร์ของเครื่องนั้นได้หรือไม่? การเข้ารหัสนั้นขึ้นอยู่กับกำลังของโปรเซสเซอร์
Matt Simmons

1
ฉันเพิ่งทำการทดสอบ VPS จำนวนมากและสิ่งที่ยิ่งใหญ่ที่สุดเพียงอย่างเดียวที่ส่งผลต่อประสิทธิภาพคือตัวเลขที่ใช้ หากคุณ จำกัด เลขศูนย์ไว้ที่ 128 บิตคุณควรจะได้รับคำขอประมาณ 500-600 ครั้งต่อวินาที การใช้ตัวเลข 256 บิตที่จะลดลงเหลือ <100 ร้องขอต่อวินาที ฉันเชื่อว่าเมื่อฉันทำการทดสอบของตัวเองมันเป็น 30 คำขอต่อวินาที เห็นได้ชัดว่าตัวเลขจริงขึ้นอยู่กับเครื่องของคุณ
kovert

แมตต์ซิมมอนส์ฉันใช้ Ubuntu 9.04 VM (VMware Fusion) 2 แกน 64 บิตที่ทำงานบน Mac Pro ต้นปี 2008 ด้วย 2x Quad-Core 2.8 GHz Intel Xeon CPU
knweiss

คำตอบของคุณทำให้ฉันไม่สามารถโพสต์คำถามซึ่งจะถูกปิดภายใน 20 วินาที ขอบคุณ!
MonkeyZeus

10

บนเซิร์ฟเวอร์ที่ทันสมัยฉันจะบอกว่าคอขวดของคุณจะเป็นเครือข่ายและแอปพลิเคชันของคุณไม่ใช่การเข้ารหัส TLS / SSL ใน apache จะถูกเขียนใน C ที่ได้รับการปรับให้เหมาะสมที่สุดดังนั้นจะถูกแคระแกร็นด้วยโค้ด PHP ของคุณโดยเฉพาะถ้าคุณกำลังจะทำสิ่งต่าง ๆ เช่นการเข้าถึงฐานข้อมูล การให้บริการไฟล์สแตติกอาจมีผลกระทบมากขึ้นเนื่องจากการเข้ารหัสจะกลายเป็นส่วนสำคัญของกระบวนการทั้งหมด ฉันไม่สามารถให้ตัวเลขที่เป็นรูปธรรมแก่คุณได้ แต่ฉันจะแปลกใจถ้ามันมากกว่า 5% และอาจใกล้เคียงกับสองสามเปอร์เซ็นต์


2
เดวิดนั้นถูกต้องมันขึ้นอยู่กับประเภทของเนื้อหาที่คุณมี วิธีที่ดีคือการเปรียบเทียบกับ apache bench httpd.apache.org/docs/2.2/programs/ab.html
รัศมี

นอกเหนือจากความเร็วในการเข้ารหัสแล้ว SSL handshake จะมีผลต่อประสิทธิภาพและปริมาณงานของเซิร์ฟเวอร์หรือไม่?
erotsppa

การจับมือ SSL จะเพิ่มแพ็กเก็ตสองชุดไว้ที่ด้านหน้าของการเชื่อมต่อ ผลกระทบของสิ่งนี้จะขึ้นอยู่กับความหน่วงแฝงของการเชื่อมต่อระหว่างเซิร์ฟเวอร์และไคลเอนต์ HTTP keepalives จะลดผลกระทบของการจับมือกัน
David Pashley


1

ฉันพบว่าบนฮาร์ดแวร์ที่ทันสมัยฉันมีแนวโน้มที่จะเป็น I / O ที่ถูกผูกไว้สำหรับการทำธุรกรรมเฉพาะกว่าฉันเป็นตัวประมวลผล (คำนวณ) ที่ถูกผูกไว้ โดยเฉพาะอย่างยิ่งเมื่อพูดถึงการบีบอัดและการเข้ารหัส การเข้ารหัสแบบ 128 บิตนั้นไม่ค่อยน่าสนใจในทุกวันนี้โดยทั่วไปแล้วฉันจะได้รับความนิยมอย่างหนักจากการสร้างและส่งมอบหน้าที่ส่งออกมากกว่าที่ฉันใช้ SSL และไม่ได้สังเกตเห็นความแตกต่างอย่างมีนัยสำคัญของประสิทธิภาพระหว่าง http และ https


1

ฉันสองข้อเสนอแนะสำหรับ nginx ในการทดสอบของฉันเองมันได้จัดขึ้นเป็น SSL offloader โดยเฉพาะ


0

แน่นอนถ้าการประมวลผล SSL ไม่แรงคุณสามารถย้ายออกจากเซิร์ฟเวอร์ไปยังกล่องอุทิศได้เสมอ มีการเขียนที่ดีขึ้นจากการทำเช่นนี้กับ Nginx กว่าคือที่นี่ นี่คือสิ่งที่เราทำบนเซิร์ฟเวอร์โหลดบาลานซ์เลเยอร์ 7 ที่มีโหลดสูง


0

ฉันสามารถยืนยันได้ว่าการโหลดที่เพิ่มเข้ามาสำหรับการเข้ารหัสนั้นน้อยมากเมื่อเทียบกับองค์ประกอบอื่น ๆ ที่รวมอยู่ (การเขียนสคริปต์เครือข่าย ... )


0

จากประสบการณ์ของฉันกฎทั่วไปเกี่ยวข้องโดยตรงกับว่าคีย์สาธารณะของคุณมีขนาดใหญ่เพียงใด (เช่น 2048, 4096 เทียบกับ 8192) ทั้งหมดนี้ใช้เวลานานกว่ามาก อย่างไรก็ตามฉันแทบจะไม่สามารถสังเกตเห็นความแตกต่างในสภาพแวดล้อมเดสก์ท็อป แต่มือถือเป็นที่ที่คุณเห็นความแตกต่างเนื่องจากใช้พลังงานในการคำนวณ

โดยทั่วไปแล้วมันเป็นเรื่องที่โชคร้าย แต่ SSL นั้นมีอยู่เสมอและมักจะต้องเสียค่าปรับจำนวนมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.