簡體   English   中英

Apache:如何在Apache / mod_proxy中設置並發轉發請求數的上限?

[英]Apache: how to setup in Apache/mod_proxy an upper bound on the number of concurrent forwarded requests?

我有一個相當標准的設置,其中前端Apache服務器通過mod_proxy / AJP將請求轉發到Tomcat。 如何設置Apache / mod_proxy,使其最多僅轉發N個(例如N = 4)並發請求到Tomcat? 進入Apache的其他並發請求不應被拒絕,而應該排隊等待稍后發送到Tomcat。

PS 1:請注意,您可以使用maxThreads屬性在Tomcat級別執行此操作,但是我更喜歡在Apache級別進行處理。

PS 2:我看到Apache具有MaxClients配置,這似乎可以滿足我的需求。 但是我不清楚如何將每台服務器的MaxClient傳遞給mod_proxy,而不是每個Apache的MaxClient。 即,如果Apache將請求轉發到4個Tomcat計算機的集群,我希望Apache將轉發給任何給定Tomcat的並發請求數限制為N(例如,N = 4)。

通過向ProxyPass指令添加參數,解決方案是mod_proxy。 您想要設置的可能是max 但是,這將立即引發錯誤,並且在您達到最大值時不會將請求排隊。

如果您確實要排隊,則還必須使用mod_proxy_balancer。 例如,最多允許4個連接:

ProxyPass / balancer://appservers/ stickysession=JSESSIONID|jsessionid nofailover=On
<Proxy balancer://appservers>
    BalancerMember ajp://192.168.0.100:8009 max=4
    BalancerMember ajp://192.168.0.101:8009 max=4
    BalancerMember ajp://192.168.0.102:8009 max=4
    BalancerMember ajp://192.168.0.103:8009 max=4
</Proxy> 

不幸的是,在Apache中, max的值是每個進程的。 因此,僅當Apache有一個進程並使用線程而不是進程來處理多個連接時,才可以有效地限制與后端服務器的連接數,這取決於Apache使用的MPM

  • 在Windows上 ,您應該一切都很好,並且很可能不必擔心這一點,因為Winnt MPM使用一個進程,該進程進而創建線程來處理請求。
  • 在UNIX上 ,如果您使用的是操作系統隨附的Apache,那么很可能您有預分支MPM Apache,它會為每個請求創建一個進程,並且max參數無法使用:

    1. 要檢查您擁有的MPM,請運行apachectl -l
    2. 在列表中,如果看到worker.cevent.c ,那么您幾乎可以做到:現在只需要確保Apache僅創建一個進程即可。 為此,請將ThreadsPerChildMaxClients設置為相同的值,這將是Apache能夠處理的並發連接總數。 ServerLimit設置為1。
    3. 在列表中,如果看到prefork.c ,則首先需要用工作程序或事件MPM Apache替換Apache。 您可以自己重新編譯Apache(MPM不是運行時配置參數),也可以為平台獲取現有的軟件包。 然后,轉到第二步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM