mod_proxy vs mod_proxy_ajp vs mod_jk


9

Chúng tôi đang chuẩn bị cho việc di chuyển từ môi trường sau:

Apache 2.0.2 --AJP -> JBoss4.2.2

đến

Apache 2.2.3 - ??? -> JBoss 5.1.0

Làm thế nào bạn sẽ tham gia hai cùng nhau?

Các tùy chọn là:

  1. AJP cổ điển (có nghĩa là xây dựng mod_jk cho Apache)
  2. mod_proxy (chuyển tiếp yêu cầu HTTP đến JBoss)
  3. mod_proxy_ajp

Tùy chọn 2 là giải pháp phổ biến nhất tại thời điểm này bởi vì nó dường như có nghĩa là ít xử lý hơn do không còn cần phải dịch các phản hồi của JBoss từ AJP và thời gian CPU là thứ chúng ta cần theo dõi chặt chẽ trong cơ sở hạ tầng của mình. Tùy chọn 2 và 3 cũng đi kèm với bản dựng Apache được Red Hat hỗ trợ.

Hiện tại tôi không thể thấy chúng tôi sẽ chọn tùy chọn 1, vì chúng tôi nhận được AJP 'miễn phí' với tùy chọn 3.

Vì vậy, những ưu và nhược điểm của lựa chọn 2 và 3 là gì? Là mối quan tâm về tải CPU thực sự là một cái gì đó mà chúng ta cần phải lo lắng? Những gì chúng ta mất khi xử lý dữ liệu nhị phân (lưu lượng AJP) để chúng ta lấy lại băng thông và IO bị giảm?

Cơ sở hạ tầng của chúng tôi sẽ là Apache có tới 9 JBoss được điều chỉnh nhiều (nhưng thường là khoảng một nửa) tất cả trên cùng một máy RHEL 5, được ảo hóa trong một đám mây riêng.

Cảm ơn trước cho bất kỳ con trỏ / lời khuyên.

Giàu có

Câu trả lời:


8

2 mod_proxy_http, trừ khi bạn cần tiêu đề Máy chủ từ máy khách.

Tôi không khuyên dùng mod_jk cổ điển vì chức năng của nó đã được thay thế bởi mod_proxy_ajp và như bạn đã nói, nó yêu cầu tự xây dựng và duy trì mô-đun đó.

Tôi nghĩ mod_proxy_http là một giải pháp rất sạch sẽ và nó đưa ajp ra khỏi hình ảnh. Tuy nhiên, bạn nên lưu ý một vài lưu ý khi chuyển từ ajp sang http. Nếu bạn cần quyền truy cập vào các tiêu đề máy chủ chính xác như chúng đã nhận được bởi apache (bao gồm cả tiêu đề Máy chủ), thì bạn nên sử dụng ajp. JBoss sẽ thấy một yêu cầu http mới đến từ apache, không phải máy khách gốc. Nếu bạn chỉ cần IP từ xa của máy khách, bạn vẫn có thể nhận được điều này với một tiêu đề đặc biệt mà apache có thể đặt cho các yêu cầu mới. Tuy nhiên, nếu bạn đang thực hiện lưu trữ ảo từ lớp ứng dụng, bạn nên sử dụng ajp.

Liên quan đến hiệu suất, ajp hoặc http sẽ yêu cầu một số xử lý của JBoss và một số lưu lượng TCP ổ cắm cục bộ. Bạn sẽ phải thử cả hai để xem cái nào hiệu quả hơn, nhưng tôi nghĩ về tổng thể nó chiếm một tỷ lệ rất nhỏ trong tổng tải máy chủ. Http là một giao thức phức tạp hơn và ajp được thiết kế đặc biệt để hiệu quả giữa các tầng ứng dụng và web, vì vậy về mặt lý thuyết, ajp có lẽ tốt hơn. Điều đó nói rằng, tôi đã thấy rằng http thường được hỗ trợ tốt hơn bên ngoài dòng máy chủ ứng dụng Tomcat.

Tôi sử dụng mod_proxy_ajp và mod_proxy_http và tôi không gặp vấn đề gì.


Các Hosttiêu đề sẽ được đi qua một cách chính xác nếu bạn sử dụngProxyPreserveHost On
Derf

Khi làm việc với Apache mod_proxy, hãy xem httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers . Nếu bạn định cấu hình RemoteIpValve như một phần của Tomcat Servlet, mã ứng dụng của bạn có thể nhận được hầu hết thông tin trong suốt tomcat.apache.org/tomcat-8.0-doc/config/iêu
Scott Markwell
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.