Bao nhiêu hiệu suất đạt được cho https so với http cho apache?


50

Https sẽ mất bao nhiêu lượt truy cập hiệu suất so với http cho cùng một trang? Giả sử tôi có thể xử lý 1000 yêu cầu / s cho abc.php, nó sẽ giảm bao nhiêu khi truy cập qua https? Tôi biết điều này có thể phụ thuộc vào phần cứng, cấu hình, hệ điều hành, v.v. nhưng tôi chỉ tìm kiếm một quy tắc chung về ước tính / ước tính.


2
Sẽ thật tốt khi thấy một câu trả lời được chấp nhận cho điều này.
Hyppy

Câu trả lời:


57

Để kiểm tra nhanh & bẩn (nghĩa là không tối ưu hóa gì!) Tôi đã kích hoạt trang web mặc định Ubuntu apache2 đơn giản (chỉ nói "Nó hoạt động!") Với cả http và https (chứng chỉ tự ký) trên máy ảo Ubuntu 9.04 cục bộ và chạy apache điểm chuẩn " ab" với 10.000 yêu cầu (không đồng thời). Máy khách và máy chủ nằm trên cùng một máy / VM:

Kết quả cho http (" ab -n 10000 http://ubuntu904/index.html")

  • Thời gian thực hiện các bài kiểm tra: 2,664 giây
  • Yêu cầu mỗi giây: 3753,69 (# / giây)
  • Thời gian cho mỗi yêu cầu: 0.266ms

Kết quả cho https (" ab -n 10000 https://ubuntu904/index.html"):

  • Thời gian thực hiện các bài kiểm tra: 107.673 giây
  • Yêu cầu mỗi giây: 92,87 (# / giây)
  • Thời gian cho mỗi yêu cầu: 10.767ms

Nếu bạn xem xét kỹ hơn (ví dụ với tcpdump hoặc wireshark) tại giao tiếp tcp / ip của một yêu cầu, bạn sẽ thấy trường hợp http yêu cầu 10 gói giữa máy khách và máy chủ trong khi https yêu cầu 16: Độ trễ cao hơn nhiều so với https. (Thông tin thêm về tầm quan trọng của độ trễ ở đây )

Việc thêm tính năng giữ nguyên ( abtùy chọn -k) vào kiểm tra sẽ cải thiện tình hình vì hiện tại tất cả các yêu cầu đều có chung kết nối, nghĩa là chi phí SSL thấp hơn - nhưng https vẫn có thể đo được chậm hơn:

Kết quả cho http với giữ nguyên (" ab -k -n 10000 http://ubuntu904/index.html")

  • Thời gian thực hiện các bài kiểm tra: 1.200 giây
  • Yêu cầu mỗi giây: 8334,86 (# / giây)
  • Thời gian cho mỗi yêu cầu: 0.120ms

Kết quả cho https với tính năng giữ nguyên (" ab -k -n 10000 https://ubuntu904/index.html"):

  • Thời gian thực hiện các bài kiểm tra: 2.711 giây
  • Yêu cầu mỗi giây: 3688,12 (# / giây)
  • Thời gian cho mỗi yêu cầu: 0,271ms

Kết luận :

  • Trong thử nghiệm đơn giản này, https chậm hơn nhiều so với http.
  • Đó là một ý tưởng tốt để kích hoạt hỗ trợ https và điểm chuẩn trang web của bạn để xem bạn có muốn trả tiền cho chi phí https không.
  • Sử dụng wireshark để có ấn tượng về chi phí SSL.

1
+1 Công việc tốt đấy. Cảm ơn đã đăng số.
MN

Chúng tôi có thể nhận được một số thông số kỹ thuật trên phần cứng của máy đó không? mã hóa phụ thuộc nhiều vào sức mạnh của bộ xử lý.
Matt Simmons

1
Gần đây tôi đã thực hiện rất nhiều thử nghiệm trên VPS và điều tuyệt vời nhất ảnh hưởng đến hiệu năng là mật mã được sử dụng. Nếu bạn giới hạn mật mã ở mức 128 bit thì bạn sẽ có thể nhận được khoảng 500-600 yêu cầu một giây. Sử dụng mật mã 256 bit sẽ giảm xuống <100 yêu cầu một giây. Tôi tin rằng khi tôi tự kiểm tra, nó đã có 30 yêu cầu một giây. Rõ ràng con số thực tế phụ thuộc vào máy của bạn.
kovert

Matt Simmons, tôi đã sử dụng máy ảo Ubuntu 9.04 64 bit (VMware Fusion) chạy trên Mac Mac 2008 đầu năm 2008 với CPU Intel Xeon Quad-Core 2,8 GHz.
knweiss

Câu trả lời của bạn đã ngăn tôi đăng câu hỏi đã bị đóng trong vòng 20 giây. Cảm ơn!
MonkeyZeus

10

Trên các máy chủ hiện đại, tôi muốn nói rằng nút cổ chai của bạn sẽ là mạng và ứng dụng của bạn chứ không phải mã hóa. TLS / SSL trong apache sẽ được viết bằng C khá tối ưu hóa, do đó sẽ bị mã PHP của bạn lấn át, đặc biệt nếu bạn sẽ làm những việc như truy cập cơ sở dữ liệu. Việc phục vụ các tệp tĩnh có thể sẽ có tác động lớn hơn, vì mã hóa sẽ trở thành một phần lớn hơn trong toàn bộ quá trình. Tôi không thể đưa cho bạn bất kỳ số liệu cụ thể nào, nhưng tôi sẽ ngạc nhiên nếu nó cao hơn 5% và có thể là gần một vài phần trăm.


2
David nói đúng, nó phụ thuộc vào loại nội dung bạn có. Cách tốt nhất là điểm chuẩn với băng ghế dự bị apache httpd.apache.org/docs/2.2/programs/ab.html
bán kính

Ngoài tốc độ mã hóa, còn về việc bắt tay SSL, điều đó có ảnh hưởng gì đến hiệu suất và thông lượng của máy chủ không?
erotsppa

Bắt tay SSL sẽ thêm một vài gói vào phía trước của kết nối. Tác động của điều này sẽ phụ thuộc rất lớn vào độ trễ của kết nối giữa máy chủ và máy khách. Thủ tục HTTP sẽ làm giảm tác động của việc bắt tay này.
David Pashley


1

Tôi thấy rằng trên phần cứng hiện đại, tôi có nhiều khả năng bị ràng buộc I / O cho một giao dịch cụ thể hơn là tôi bị xử lý (tính toán) ràng buộc. Điều này đặc biệt đúng khi nói về nén và mã hóa. Mã hóa 128 bit ngày nay không đáng kể - Tôi thường gặp khó khăn hơn trong việc xây dựng và phân phối các trang gửi đi so với tôi đang sử dụng SSL và không nhận thấy sự khác biệt đáng kể về hiệu suất giữa lưu lượng truy cập http và https trong một vài năm.


1

Tôi thứ hai đề nghị cho nginx. Trong các thử nghiệm của riêng tôi, nó đã hoạt động tốt như một bộ giảm tải SSL chuyên dụng.


0

Tất nhiên, nếu quá trình xử lý SSL gặp khó khăn, bạn luôn có thể di chuyển nó ra khỏi máy chủ sang hộp dành riêng. Có một bài viết hay về việc làm này với nginx ở đây . Đây là điều chúng tôi đã thực hiện trên các máy chủ cân bằng tải lớp 7 tải cao.


0

Tôi có thể xác nhận rằng tải được thêm vào để mã hóa là rất nhỏ so với mọi yếu tố khác được bao gồm (tập lệnh, mạng, ...)


0

Theo kinh nghiệm của tôi, quy tắc chung liên quan trực tiếp đến mức độ công khai của khóa của bạn (ví dụ: 2048, so với 4096, so với 8192) đều mất nhiều thời gian hơn đáng kể. Tuy nhiên tôi khó có thể nhận thấy sự khác biệt trong môi trường Máy tính để bàn, nhưng thiết bị di động là nơi bạn thấy sự khác biệt vì nó có sức mạnh tính toán.

Nói chung là không may nhưng SSL luôn luôn và có khả năng sẽ luôn phải chịu một hình phạt hiệu suất rất lớn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.