您好,登錄后才能下訂單哦!
本篇內容介紹了“ABAP基礎知識有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
SAP Netweaver應用服務器是SAP ABAP應用開發和運行平臺,ABAP開發人員在上面可以專注于具體業務邏輯的開發,凡涉及到更底層的基礎設施相關任務,比如請求的負載均衡,進程的派生,同步和調度,內存管理,服務器多實例間緩存同步等等,統統交由Netweaver平臺本身處理。如此一來,一個ABAP開發人員,即使不具備精深的計算機組成原理,操作系統,計算機網絡等領域知識,也能勝任SAP應用的開發工作。
本文討論的SAP解決方案,僅限于那些基于ABAP技術棧的SAP產品。
Google里根據關鍵字"SAP ABAP three layer"搜索,能找到很多基于ABAP技術的SAP解決方案的三層經典架構圖:
隨便點開一張查看:
SAP客戶位于圖中最上面的展現層(Presentation Layer),通過SAP GUI這個客戶端軟件或者瀏覽器訪問SAP系統;
SAP系統的軟件,安裝在ABAP Netweaver服務器上,響應用戶請求,完成對應的業務邏輯。ABAP Netweaver服務器位于上圖中間的應用層。
最底層是數據庫層,很多SAP產品都支持不同類型的數據庫,比如SAP HANA,Oracle數據庫,SQL Server等。
部分ABAP開發人員覺得,我們既然能夠直接在ABAP Netweaver里用OPEN SQL對數據庫表進行讀寫操作,那么Netweaver應用服務器本身就包含了數據庫層。這樣理解其實不正確。我們在Netweaver SE38里編寫的OPEN SQL代碼,會通過Netweaver內部的數據庫接口,轉換成數據庫提供商相關的原生SQL語句在數據庫里執行,并且從最底層的數據庫層,到應用層里的ABAP程序之間的數據傳輸,也是通過數據庫接口完成的。
本文討論的ABAP Netweaver服務器的組成部分,位于三層架構中的應用層。
運行在物理機器上的ABAP應用服務器,按照其用途的不同,又可分為兩種實例:應用服務器實例和ABAP SAP中央服務實例(ABAP SAP Central Services instances, 縮寫為ASCS instances), 也就是下圖兩個灰色矩形框代表的實例。
一個典型的SAP系統一般由一到多個應用服務器實例和一個ASCS實例組成。
從上圖左邊的矩形框里,能觀察到ABAP應用服務器實例包含的主要組件有:
(1) Internet Communication Manager (ICM)
(2) ABAP dispatcher
(3) 工作進程
(4) RFC Gateway
(5) Start Service
下面是對這些組件的簡要介紹。
ICM是Netweaver服務器里一個單獨的進程,由ABAP Dispatcher啟動并監控,負責SAP系統和外部的網絡通信。基于收到請求URL的解析,ICM會將請求分發給具體的handler進行處理。
ICM常用的與Internet交互的協議有HTTP,HTTPS,SMTP等。
下圖是ICM的架構圖。
Thread Control:該線程負責接收外界請求,從ICM線程池中取出空閑的工作線程,將請求的上下文交給工作線程。
工作線程:負責請求的具體處理,包含一個I/O處理器,可以用來進行網絡的輸入和輸出操作。對于不同協議類型的請求,Thread Control會調度包含了對應協議插件的工作線程。
Watchdog:如果一個工作線程在任務處理時出現了等待某個響應直至超時的情況,Watchdog會將該工作線程釋放,避免其無限期的等待,這樣該工作線程可以服務于其他請求。而Watchdog會繼續等待尚未到來的響應。其后如果響應到達,Watchdog會通知Thread control, 后者會繼續調用新的工作線程來處理。
Signal Handler:處理來自操作系統或者其他進程的信號。
Connection Info: 這張表維護了每個連接的狀態信息,包括內存管道等。
Memory Pipes:內存管道是基于內存的通訊數據結構,用于將ICM接收到的外部請求包含的數據轉交給工作線程。
Internet Server Cache:服務器端的緩存,對于重復的請求可以加快響應速度。
二者的關系在下圖體現得很清晰,ABAP應用服務器上運行著許多工作進程(Work Process),這些進程類型各異,負責處理各種類型不同的請求。
事務碼SM50里能看到當前應用服務器上的工作進程明細,比如下圖顯示用于處理用戶普通事務請求的對話(Dialog)進程有30個,其中29個空閑;Update進程負責執行數據庫的更新操作;Background進程處理后臺作業,Spool負責打印任務。而ABAP里數據庫更新的操作有V1和V2兩種級別(平時大家用的默認都是V1級別),分別由下圖的Update和Update Task2兩種類型的工作進程完成。
這里的Gateway和SAP Fiori里的Gateway系統是兩碼事,后者指代安裝了SAP_GWFND這個Software Component的ABAP應用服務器,而我們現在即將討論的Gateway,是ABAP應用服務器里的一個組件。
SAP系統之間,以及SAP系統與外部系統間通過基于TCP/IP的RFC(Remote Function Call,遠程系統調用)進行通信,而Gateway作為RFC調用分發的入口,如下圖所示:
值得一提的是,我們能夠在SAP標準程序里看到CALL FUNCTION 'XXX' DESTINATION 'NONE'的寫法,這種寫法使得函數XXX仍然在調用它的應用服務器實例內部執行,而非在其他服務器上遠程執行。那么這種寫法不是多此一舉嗎?
SAP官網對這種用法的解釋:Destination "NONE" has the effect that the function module is started on the same application server as the calling program, however through the RFC interface and in its own RFC context.
也就是說,通過這種方式調用的函數,即便是和調用者同處一個應用服務器實例內,也會像遠程調用執行時一樣,到RFC接口即Gateway組件里去走一遭。
付出這種在額外協議棧上執行開銷的代價,有什么收益?那得從ABAP Netweaver里不同類型的會話說起。我們每用SAP GUI登錄一次系統,會在服務器上生成一個用戶會話(User Session). 每個User Session里通過命令行輸入/o可以生成新的ABAP會話,每個ABAP會話內的程序調用生成新的內部會話(Internal Session).
如果直接調用函數CALL FUNCTION 'XXX', 在發起該函數調用的同一ABAP會話內,會派生一個新的內部會話去執行函數體的邏輯。如果用CALL FUNCTION 'XXX' DESTINATION 'NONE', 則會派生一個全新的用戶會話,此時這個全新的用戶會話,和發起函數調用的原始用戶會話是完全隔離的,不共享任何數據,參數傳遞也是通過RFC標準的參數傳遞方式進行。通過這種方式,能實現被調用函數和原始程序的異步調用效果,同時兩個用戶會話里的程序執行完全隔離,不會彼此影響。
事務碼SM04能看到ABAP應用服務器上所有的用戶會話。雙擊某一用戶會話,能看到該用戶會話派生的所有ABAP會話。
該服務運行在部署了SAP應用服務器實例的服務器上,實現載體是Windows的系統服務(sapstartsrv.exe)和Unix系統的Daemon進程(sapstartsrv).
SAP Start Service實現的功能有:
(1) 啟動和終止SAP應用服務器實例,及其運行狀態的監控
(2) 應用服務器日志,跟蹤和配置文件的讀取與管理
主要包含Enqueue服務器和消息服務器。
數據庫層面的鎖由數據庫管理,而ABAP應用程序級別的鎖,比如鎖一個訂單,鎖一個物料主數據,則通過應用程序提出鎖申請,由Enqueue Server完成和管理鎖。應用服務器實例上所有用戶當前會話持有的鎖,都維護在Enqueue服務器的鎖信息管理表中,該表維護在Enqueue服務器的內存中,不會進行持久化,因此Enqueue服務器成為了ABAP系統的單點故障源之一:當Enqueue服務器由于各種原因運行時發生故障需要重啟時,維護在內存中的鎖信息表的數據會丟失。
因此為了確保Enqueue服務器的高可用性,通常將其放到單獨的物理主機上部署,甚至引入遵循主從機制的多臺Enqueue服務器,將Master Enqueue服務器上的鎖信息管理表同步到其他Enqueue服務器上。
事務碼SM12查看某個用戶持有的應用鎖:
SE11里打開任意一個鎖對象,點擊Lock Modules,進入自動生成的ABAP函數內部,就可以了解鎖請求是如何從應用服務器發送到Enqueue服務器的。
每個SAP系統只能包含一個消息服務器,該組件負責完成以下任務:
(1) 作為SAP系統內多個應用服務器實例間通訊的中央渠道
(2) 對來自客戶端通過SAP GUI和SAP RFC登錄請求的負載分發
當一個應用服務器實例啟動后,其Dispatcher進程就會聯系消息服務器,向其報告自己能夠提供的服務類型。
SAP系統的消息服務器地址,可以在SAP GUI里維護該系統登錄信息的Message Server字段里查詢到。
上圖我登錄的AG3系統有多個應用服務器實例,我登錄的實例編號為54,使用事務碼SM53發現這個系統還有另外兩個實例,編號為55和56.
忽視SAP系統可以由多個應用服務器實例組成這一點,有時候可能會遇到一些無法按照自己期望工作的場景.比如數據庫性能測量工具ST05,如果在實例A上打開跟蹤,而業務代碼實際執行在實例B上,那么待分析性能的應用執行完畢后,在實例A上關閉跟蹤后,當然看不到性能數據。這種情況下,最保險的做法就是,在激活跟蹤時,選擇“在所有實例上”打開跟蹤開關。
“ABAP基礎知識有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。