1. 程式人生 > >Netweaver和CloudFoundry是如何運行Web應用的?

Netweaver和CloudFoundry是如何運行Web應用的?

檢測 dcl war包 security mon weixin component 線程池。 alt

Netweaver

在Jerry的微信公眾號文章SAP Fiori應用的三種部署方式裏提到SAP Fiori應用以BSP應用的方式部署在ABAP Front-End Server上。那麽這些BSP應用在運行時為什麽能夠接受和發送HTTP請求呢?

技術分享圖片

主要是下圖的Internet Communication Manager(ICM)在起作用。
技術分享圖片
SAP help:

The Internet Communication Manager ensures that communication between the SAP System (SAP NetWeaver Application Server) and the outside world via HTTP, HTTPS and SMTP protocols works properly.

The ICM is a component of the SAP NetWeaver Application Server. It is implemented as a separate process, which is started and monitored by the ABAP dispatcher.

即ICM作為溝通的橋梁,確保Netweaver應用服務器和外界能夠通過HTTP,HTTPS等協議交互。ICM是Netweaver應用服務器的一個組件,作為一個單獨的工作進程,由ABAP dispatcher啟動並監控。

ICM的架構:

技術分享圖片

  1. ICM本身維護了一個工作線程池。有一個專屬的控制線程,負責接收進來的TCP/IP請求,然後從線程池中喚醒一個工作線程來響應該請求。
  2. 每個工作線程包含一個I/O處理器,負責網絡輸入輸出。工作線程通過各種各樣的plugin處理HTTP,SMTP等協議。

CloudFoundry

假設我本地開發了一個Java Web應用,裏面包含一個Servlet,部署到CloudFoundry後,該應用如何運行起來的?
細心觀察cf push的日誌,不難自己找出答案。
因為我的manifest.yml裏定義的buildpack為java_buildpack:
技術分享圖片
這對應了cf push日誌裏高亮的這一行:
技術分享圖片
下載Open JDK JRE和Tomcat instance。
技術分享圖片
為什麽會自動下載tomcat?
打開java_buildpac的github倉庫:
https://github.com/cloudfoundry/java-buildpack
上面提到了原因:

The Tomcat Container allows servlet 2 and 3 web applications to be run. These applications are run as the root web application in a Tomcat container.

一旦buildpack檢測到war包中存在WEB-INF,且不存在Java Main(實現了main方法的Java類),則決定使用Tomcat容器。
技術分享圖片
實際上從cf push的日誌裏也能觀察到tomcat容器啟動參數:

技術分享圖片

"JAVA_OPTS="-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.13.0_RELEASE=printHeapHistogram=1 -Djava.io.tmpdir=$TMPDIR -Djava.ext.dirs=$PWD/.java-buildpack/container_security_provider:$PWD/.java-buildpack/open_jdk_jre/lib/ext -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS -Daccess.logging.enabled=false -Dhttp.port=$PORT" && CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE -totMemory=$MEMORY_LIMIT -loadedClasses=11021 -poolType=metaspace -stackThreads=250 -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 JAVA_OPTS=$JAVA_OPTS JAVA_HOME=$PWD/.java-buildpack/open_jdk_jre exec $PWD/.java-buildpack/tomcat/bin/catalina.sh run",

最後一行的$PWD/.java-buildpack/tomcat/bin/catalina.sh run是我們非常熟悉的tomcat啟動腳本。

要獲取更多Jerry的原創技術文章,請關註公眾號"汪子熙"或者掃描下面二維碼:

技術分享圖片

技術分享圖片

Netweaver和CloudFoundry是如何運行Web應用的?