Netweaver和CloudFoundry是如何執行Web應用的?
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本身維護了一個工作執行緒池。有一個專屬的控制執行緒,負責接收進來的TCP/IP請求,然後從執行緒池中喚醒一個工作執行緒來響應該請求。
- 每個工作執行緒包含一個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的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2156271/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Netweaver和CloudFoundry裡的trace開關Cloud
- Netweaver和CloudFoundry的伺服器日誌Cloud伺服器
- Netweaver工作程式的記憶體限制 VS CloudFoundry應用的記憶體限制記憶體Cloud
- 如何在ABAP Netweaver和CloudFoundry裡記錄並檢視日誌Cloud
- 在 Node.js 上執行 Flutter Web 應用和 APINode.jsFlutterWebAPI
- Hummingbird: 在Web上執行Flutter應用WebFlutter
- 如何處理CloudFoundry應用部署時遇到的254錯誤Cloud
- 使用SSH命令列遠端登入執行在CloudFoundry上的應用命令列Cloud
- SAP Netweaver和Hybris Commerce啟動後執行的預設操作
- SAP Netweaver的負載均衡訊息伺服器 vs CloudFoundry的App Router負載伺服器CloudAPP
- 如何遠端除錯部署在CloudFoundry平臺上的nodejs應用除錯CloudNodeJS
- 詳談執行緒池的理解和應用執行緒
- SQL是如何執行的SQL
- 如何使用Prometheus採集SAP ABAP Netweaver的應用日誌資料Prometheus應用日誌
- Web 應用安全性: 瀏覽器是如何工作的Web瀏覽器
- PyQt應用程式中的多執行緒:使用Qt還是Python執行緒?QT執行緒Python
- Node.js的勁敵來了:Deno是用於在Web瀏覽器之外執行JavaScript和TypeScript的執行環境Node.jsWeb瀏覽器JavaScriptTypeScript
- 模板引擎注射:針對現代web應用的新型命令執行Web
- Web Worker執行緒的限制是什麼?Web執行緒
- iOS runtime執行時的作用和應用場景iOS
- python中多執行緒和多程序的應用Python執行緒
- 如何使用Visual Studio Code除錯PHP CLI應用和Web應用除錯PHPWeb
- c++是如何執行的C++
- sql更新是如何執行的?SQL
- 用Spring Web Flow和Terracotta搭建Web應用SpringWeb
- MapReduce如何作為Yarn應用程式執行?Yarn
- 如何應用於Web框架的搭建Web框架
- Java Main 如何是如何被執行的?JavaAI
- ObjC 多執行緒簡析(一)-多執行緒簡述和執行緒鎖的基本應用OBJ執行緒
- 如何優雅地恢復執行中的容器應用
- HttpRuntime應用程式的執行時HTTP
- 執行緒池中多餘的執行緒是如何回收的?執行緒
- sql查詢是如何執行的?SQL
- 17.Sql是如何執行的SQL
- 爬蟲代理是如何執行的?爬蟲
- Python是如何編譯執行的Python編譯
- 什麼是 Web 應用程式的 synthetic monitorWeb
- 多執行緒應用執行緒