瞭解多租賃和併發開發

簡介

當多個團隊將程式碼部署至同一AEM個環境時,他們應遵循一些實務,以確保團隊能夠盡可能獨立地工作,而不需要其他團隊的介入。 雖然無法完全消除這些技巧,但這些技巧將可將跨團隊的相依性降至最低。 要成功建立並行開發模型,開發團隊之間的良好溝通至關重要。

此外,當多個開發團隊在同一AEM個環境中工作時,可能會有一定程度的多租約。 關於嘗試在環境中支援多個租戶的實際考慮,AEM特別是管理治理、運營和發展所面臨的挑戰,已有很多論述。 本白皮書探討在多租用戶環境AEM中實作的一些技術挑戰,但其中許多建議將適用於擁有多個開發團隊的任何組織。

請務必提前注意,雖然可支援AEM在單一環境中部署多個網站甚至多個品牌,但並不提供真正的多租賃。 某些環境配置和系統資源將始終共用給部署在環境中的所有站點。 本白皮書提供了將這些共用資源的影響降至最低的指導,並提供了簡化這些領域通信和協作的建議。

優點與挑戰

實作多租用戶環境有許多挑戰。

其中包括:

  • 額外的技術複雜性
  • 增加開發開銷
  • 對共用資源的跨組織依賴
  • 提高操作複雜性

雖然面臨諸多挑戰,但執行多租用戶應用程式確實有其優點,例如:

  • 降低硬體成本
  • 縮短未來網站的上市時間
  • 降低未來租戶的實作成本
  • 標準的架構和整個業務開發實踐
  • 常見的程式碼基底

如果企業需要真正的多租約,而對其他租戶知之甚少,且沒有共用的程式碼、內容或共同作者,則只有個別的作者例項才可行。 應將開發工作的整體增加與基礎架構和授權成本的節省進行比較,以確定此方法是否最適合。

開發技巧

管理相依性

在管理Maven項目相關性時,所有團隊都必須在伺服器上使用相同版本的給定OSGi捆綁包。 為了說明當Maven項目管理不當時可能出什麼問題,我們舉了一個例子:

項目A取決於庫foo的1.0版;foo 1.0版已嵌入到伺服器的部署中。 項目B取決於庫foo的1.1版;foo 1.1版已嵌入到其部署中。

此外,假設此資料庫中的API在1.0和1.1版之間有所變更。目前,這兩個專案中的一個將無法正常運作。

為瞭解決這一問題,我們建議讓馬文的所有項目都由一個母反應堆項目的子項目承擔。 該反應堆項目有兩個用途:它允許根據需要一起構建和部署所有項目,並包含所有子項目的相關性聲明。 父項項目定義從屬項及其版本,而子項項目只聲明其所需的從屬項,從父項項目繼承版本。

在此案例中,如果專案B的團隊需要1.1版foo中的功能,此變更會很快在開發環境中變得明顯,即會中斷專案A。目前,團隊可討論此項變更,讓專案A與新版本相容,或尋找專案B的替代解決方案。

請注意,這並不會消除這些團隊共用這種依賴性的需要,它只會迅速及早地強調問題,讓團隊可以討論任何風險並就解決方案達成一致。

防止代碼複製

在處理多個專案時,請務必確保程式碼不重複。 復製程式碼會增加發生瑕疵的可能性、系統變更的成本,以及程式碼庫的整體剛性。 為避免重複,請將通用邏輯重新整合至可重複使用的程式庫,以便跨多個專案使用。

為支援此項需求,我們建議開發和維護所有團隊都可仰賴並貢獻的核心專案。 在這樣做時,必須確保此核心項目不再依賴於任何個別團隊的項目;這可讓您獨立進行部署,同時仍能提升程式碼的重複使用率。

核心模組中常見的程式碼範例包括:

  • 全系統配置,例如:
    • OSGi配置
    • Servlet篩選器
    • 資源解析器映射
    • 吊索變壓器管線
    • 錯誤處理程式(或使用ACS公AEM域錯誤頁處理程式1)
    • 權限敏感型快取的授權servlet
  • 實用程式類
  • 核心商業邏輯
  • 協力廠商整合邏輯
  • 編寫UI覆蓋
  • 製作時所需的其他自訂項目,例如自訂Widget
  • 工作流程啟動器
  • 跨網站使用的常見設計元素

模組化項目體系結構

這並不會消除多個團隊依賴並可能更新同一組代碼的需求。 透過建立核心專案,我們減少了團隊間共用的程式碼基底大小,但並未消除對共用資源的需求。

為確保對此核心套件所做的變更不會中斷系統的功能,我們建議資深開發人員或開發人員團隊維持監督。 一個選擇是讓一個團隊負責管理此套件的所有變更;另一個方法是讓團隊提交由這些資源審查和合併的提取請求。 必須由團隊設計並同意治理模型,並且讓開發人員遵循它。

管理部署範圍(&N)

當不同團隊將程式碼部署至相同的儲存庫時,請務必避免覆寫彼此的變更。 有AEM一種機制可在部署內容封裝(即篩選器)時加以控制。 xml檔案。 篩選器之間不重疊,這一點很重要。 xml檔案,否則某個團隊的部署可能會抹去另一個團隊先前的部署。 為了說明這一點,請參見以下精心編製的過濾器檔案與有問題的過濾器檔案示例:

/apps/my-company與/apps/my-company/my-site

/etc/clientlibs/my-company與/etc/clientlibs/my-company/my-site

/etc/designs/my-company與/etc/designs/my-company/my-site

如果每個團隊明確將篩選檔案設定至他們正在處理的網站,則每個團隊可以獨立部署其元件、用戶端程式庫和網站設計,而不會清除彼此的變更。

由於它是全域系統路徑,而非特定於一個網站,因此核心專案中應包含下列servlet,因為此處所做的變更可能會影響任何團隊:

/apps/sling/servlet/errorhandler

覆蓋

覆蓋常用來延伸或取代現成功AEM能,但使用覆蓋會影響整個應AEM用程式(亦即,所有租戶都可使用任何功能變更)。 如果租戶對覆蓋有不同的要求,情況將更加複雜。 理想情況下,商業團體應共同合作,就管理主控台的功能AEM與外觀達成一致。

如果各業務單位無法達成共識,可能的解決方法就是不使用覆蓋。 請改為建立功能的自訂副本,並透過不同的路徑為每個租用戶公開。 這可讓每個租用戶擁有完全不同的使用者體驗,但這種方式也會增加實作和後續升級工作的成本。

工作流程啟動器

使用AEM工作流啟動程式,在儲存庫中進行指定更改時自動觸發工作流執行。 提AEM供數種立即可用的啟動器,例如,在新資產和更新資產上執行轉譯產生和中繼資料擷取程式。 雖然可以在多租用戶環境中保留這些發射器,但如果租戶有不同的發射器和/或工作流模型要求,則可能需要為每個租用戶建立和維護單個發射器。 這些啟動器必須設定為在租戶更新時執行,同時保留其他租戶的內容。 輕鬆完成此作業,方法是將啟動器套用至特定於租用戶的指定儲存庫路徑。

虛名 URL

提AEM供可依每頁設定的虛名URL功能。 在多租用戶情境中,此方法的顧慮在於,AEM無法確保以此方式設定的虛名URL之間的唯一性。 如果兩個不同的使用者為不同頁面設定相同的虛名路徑,則可能會遇到非預期的行為。 因此,我們建議在Apache調度器實例中使用mod_rewrite規則,這允許配置中心點與僅出站資源解析器規則相配合。

元件組

當開發適用於多個編寫群組的元件和範本時,請務必有效地使用componentGroup和allowedPaths屬性。 透過有效運用這些功能與網站設計,我們可確保品牌A的作者只能看到為其網站建立的元件和範本,而品牌B的作者只能看到他們的元件和範本。

測試

雖然良好的架構和開放的通訊通道有助於防止網站意外區域出現缺陷,但這些方法並非萬無一失。 因此,在將任何內容發佈至生產環境之前,必須先完整測試平台上所部署的內容。 這需要團隊在發佈週期上進行協調,並強化需要盡可能涵蓋功能的自動化測試套件。 此外,由於一個系統將由多個團隊共用,因此效能、安全性和負載測試變得比以往更重要。

操作注意事項

共用資源

在AEM單一JVM中執行;任何部AEM署的應用程式都會彼此共用資源,而資源已在正常執行時耗用AEM。 在JVM空間本身中,線程不會邏輯分離,並且對於記憶體、AEMCPU和磁碟i/o等有限資源也將共用。 任何租戶消耗資源都必然會影響其他系統租戶。

效能

如果不遵循最AEM佳實務,則可開發使用超出正常範圍資源的應用程式。 例如,觸發許多繁重的工作流程作業(例如DAM更新資產)、對許多節點使用MSM推播-on-modify作業,或使用昂貴的JCR查詢即時呈現內容。 這些將不可避免地影響其他租用戶應用程式的效能。

記錄

提供AEMbox外掛介面,以建立健全的記錄器設定,以便在共用開發案例中用於我們的優勢。 通過為每個品牌指定單獨的日誌程式,通過包名,我們可以實現一定程度的日誌分離。 雖然複製和驗證等全系統作業仍會記錄在中央位置,但非共用的自訂程式碼可以個別記錄,讓每個品牌技術團隊的監控和除錯工作更輕鬆。

備份和還原

由於JCR儲存庫的性質,傳統備份在整個儲存庫中工作,而不是在單個內容路徑上。 因此,無法根據每個租用戶輕鬆地分離備份。 相反地,從備份中恢復將回滾系統上所有租戶的內容和儲存庫節點。 雖然可以使用VLT等工具執行目標內容備份,或者通過在單獨的環境中構建軟體包選擇要恢復的內容,但這些
方法不易包含組態設定或應用程式邏輯,而且管理起來很麻煩。

安全性考量事項

ACL

當然,使用訪問控制清單(ACL)可以根據內容路徑控制誰有權查看、建立和刪除內容,這需要建立和管理用戶組。 維護ACL和組的困難取決於如何確保每個租用戶對他人一無所知,以及部署的應用程式是否依賴共用資源。 為確保高效的ACL 、用戶和組管理,我們建議讓一個集中的組進行必要的監督,以確保這些訪問控制和承擔者以提高效率和安全性的方式重疊(或不重疊)。

本頁內容

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now