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