【雲服務】巧用螞蟻金服技術棧快速搭建自己的業務環境

技術棧介紹

技術棧 2.0 產品提供靈活強大的自定義技術棧能力,在螞蟻金服金融科技(簡稱“金融科技”)的公有云上爲您提供 SOFA Boot 技術棧,在私有云上爲您提供 SOFA4 技術棧。更重要的是,該產品支持任意的自定義技術棧部署及對已有技術棧的靈活擴展,以滿足您的定製化需求。

產品優勢

  • 提供簡潔、靈活、強大的自定義技術棧能力,讓您可以部署任意技術棧的應用。
  • 統一環境參數管理,通過參數允許您對發佈做更加靈活的控制,同時也支持包含各種特殊字符的參數。
  • 應用一處構建處處部署。
  • 降低發佈時對網絡的依賴,提升發佈成功率。
  • 提供緩存管理,減少重複發佈相同技術棧應用所需的時間。
  • SOFA Boot 系統技術棧支持 CentOS 6.5 與 CentOS 7.2 多操作系統。
  • 跨租戶分享,共築行業生態。
  • 公有云上提供限額能力。
  • 支持技術棧及技術棧包克隆。

產品組成

技術棧 2.0 產品主要由三部分組成:自定義技術棧包、控制檯系統、xDeploy 2.0 框架。自定義的技術棧需要定義生命週期中的五個步驟:

  • 環境初始化
  • 安裝依賴
  • 部署
  • 檢查服務
  • 關閉服務

這五個步驟會被 xDeploy 2.0 框架驅動,從而組成不同的操作,比如:部署操作、回滾操作、上線操作等。通過在控制檯中上傳自定義技術棧包,您可以在發佈部署過程中使用這些操作,而無需關心 xDeploy 2.0 的工作細節。

應用場景

使用系統技術棧 SOFA Boot(公有云)或者 SOFA4(私有云)開發的應用可以在金融科技平臺上進行靈活的發佈部署。

  • 如果系統技術棧的依賴的版本不符合需求,您可以先下載該系統技術棧包,更換包裏面的依賴,然後自定義技術棧並上傳新的技術棧包,這樣就可以更新系統技術棧的依賴,從而滿足需求。

  • 如果系統技術棧不能滿足需求,您可以自己製作技術棧包,通過新建自定義技術棧生成新的技術棧。同時還提供了在不同租戶之間分享技術棧的功能,讓更多的技術棧爲您所用。

術語 說明
技術棧 應用程序所依賴的框架,如:Java、Python、PHP 等。
技術棧版本 技術棧的每一次發佈都是一個新的版本,一個應用程序依賴某個技術棧的版本。
技術棧包 技術棧版本打包之後的文件被稱爲技術棧包。
應用發佈包 爲了進行發佈,將應用代碼和所關聯的資源等進行編譯打包後所產生的文件包。
技術棧克隆 基於一個已有的技術棧版本,創建一個完全相同的技術棧版本。
技術棧包克隆 將一個技術棧包從原有的技術棧版本複製到新的技術棧版本。
技術棧版本使用量 正在使用該技術棧版本的應用服務實例的數量。
xDeploy 2.0 驅動技術棧生命週期的框架。
技術棧包生命週期 包括環境初始化、安裝依賴、部署、檢查服務狀態、停止服務這五個階段。
AntX SOFA 技術棧應用的配置文件。

 

本文以 Spring Boot 技術棧爲例,介紹如何創建併發佈一個基於 Spring Boot 的應用。整體過程分爲以下 5 步:

  1. 製作 Spring Boot 技術棧包
  2. 創建技術棧版本
  3. 創建應用並關聯技術棧
  4. 創建應用服務實例並關聯技術棧版本
  5. 上傳應用發佈包並進行發佈部署

通過這篇文檔,您可以熟悉自定義技術棧的流程,創建並使用任意一種技術棧。

1、製作 Spring Boot 技術棧包

通用目錄結構

任意一個技術棧包的根目錄名必須名是自定義的技術棧的名稱,根目錄下一般包含以下一級子目錄:

  • conf:存放技術棧配置文件,可以爲空,也可以沒有。
  • lifecycle:存放生命週期代碼。目前有如下命名固定的代碼文件, 沒有後綴(請勿在 lifecycle 中存放任何其它語義的以 ac_ 開頭的文件,ac_ 是金融科技的專屬前綴):
    • ac_setup
    • ac_init_env
    • ac_deploy
    • ac_check_service
    • ac_shutdown
  • resources:存放技術棧的依賴、生命週期代碼的依賴等。如果您的技術棧足夠簡單,無需任何依賴,那麼 resources 也可以爲空。

Spring Boot 技術棧目錄結構

注意:Spring Boot 技術棧沒有 conf 目錄。

  • lifecycle:包含以下生命週期腳本,均爲 Python 代碼,理論上您可以使用任何語言來編寫這些生命週期腳本。
    • ac_setup:建議提供,該腳本包含 Spring Boot 所需要的 JDK 的安裝步驟, 主要代碼邏輯爲讀取 resources 目錄下的 JDK 文件,然後解壓、安裝、配置環境變量。
    • ac_init_env:可選,該腳本會緊鄰 ac_deploy 被調用前執行,一般會執行一些部署前的處理任務,目前僅有系統提供的 SOFA 技術棧會用到,自定義技術棧(如本例的 Spring Boot)則不會用到。
    • ac_deploy:建議提供,該腳本包含 Spring Boot 應用程序包的啓動過程,核心啓動命令爲:
      java -jar spring-boot.jar

       

    • ac_check_service:建議提供,該腳本利用 curl 命令檢測 Spring Boot 應用是否啓動。
    • ac_shutdown:建議提供,該腳本可直接停止 Spring Boot 應用。
  • resources:包含 JDK 1.8 的壓縮包以供 Spring Boot 使用。

生成 Spring Boot 技術棧包

將所有這些腳本和依賴壓縮到 spring-boot.tgz 文件中即可生成 Spring Boot 技術棧包。所有代碼可以參見 Spring Boot 技術棧包代碼(提交工單 聯繫技術支持團隊提供該代碼)。

2、創建技術棧版本

  1. 進入控制檯並選擇 產品與服務 > 應用管理 > 技術棧管理 進入默認的 技術棧 列表頁。
  2. 點擊頁面左上方的 創建 進入 創建技術棧 頁面。其中:
    • 基本信息 部分:
      • 技術棧:選擇 Spring Boot。
      • 技術棧版本:填寫 1.0.0-SpringBoot-mytest。
      • 支持操作系統:選擇 CentOS 6.5 64 Bit。
    • 技術棧包 部分:在所在地域選擇上傳壓縮好的 Spring Boot 技術棧包 spring-boot.tgz 文件。
  3. 點擊 發佈 等待文件上傳完畢併發布成功。

3、創建應用並關聯技術棧

  1. 進入控制檯並選擇 產品與服務 > 應用管理 > 應用列表 進入默認的應用列表頁。
  2. 點擊頁面左上方的 創建應用 進入創建應用頁面,其中:
    • 應用名:填寫 SpringBootDemo。
    • 技術棧:選擇 技術棧2.0架構,然後選擇 Spring Boot 技術棧。
  3. 點擊 確定,一個關聯 Spring Boot 技術棧的應用就創建完畢。

4、創建應用服務實例並關聯技術棧版本

  1. 進入控制檯並選擇 產品與服務 > 發佈部署服務 > 應用服務 > 服務實例列表 進入應用服務實例列表頁。
  2. 點擊頁面左上方的 創建服務實例 進入創建應用服務實例頁面,其中:
    • 服務實例名稱:填寫 SpringBootDemoInstance。
    • 應用:選擇剛纔創建的 SpringBootDemo。
    • 技術棧版本:選擇之前創建好的技術棧版本 1.0.0-SpringBoot-mytest。
  3. 點擊 確定,一個關聯 1.0.0-SpringBoot-mytest 的應用服務實例就創建完畢。

5、上傳應用發佈包並進行發佈部署

  1. 製作一個 Spring Boot 的應用發佈包,可以參考 How to Build a Spring Boot Application,也可以直接使用金融科技平臺提供的 Spring Boot 應用發佈包(提交工單 聯繫技術支持團隊提供該應用發佈包)。
  2. 選擇 產品與服務 > 發佈部署服務 > 應用服務 > 發佈包管理 進入默認的發佈包管理列表頁面。
  3. 在創建的應用 SpringBootDemo 右側,點擊 管理 進入應用發佈包管理頁面。
  4. 點擊 +上傳發布包 上傳第 1 步中製作出來的應用發佈包。
  5. 創建雲服務器,綁定雲服務器到剛創建的應用。
  6. 回到應用發佈包管理頁面,在剛剛上傳成功的應用發佈包右側,點擊 發佈 按鈕,彈出 發佈部署 窗口,在彈窗中點擊 立即發佈 進入發佈部署流程,即可以看到一個 Spring Boot 的應用進入發佈部署流程了。

視頻教程

本視頻教程詳細全面地講解了如何使用金融科技平臺部署您的自定義技術棧應用,涵蓋編寫代碼、製作技術棧、購買資源、發佈部署等金融科技 DevOps 產品族常用功能。

通過觀看本視頻,作爲研發工程師或運維工程師,您將學會如何使用金融科技平臺部署您的任意技術棧的應用。

https://cloud.video.taobao.com/play/u/3390345763/p/1/e/6/t/1/50076766111.mp4

其他進階

本位介紹如何通過控制檯對當前已有的技術棧進行編輯、克隆、廢棄或刪除操作,搜索技術棧,闡述了 xDeploy2.0 與技術棧包的運行原理。

編輯技術棧

若要對技術棧的基本信息進行編輯,可進行如下操作:

  1. 選擇 產品與服務 > 應用管理 > 技術棧管理 進入技術棧列表頁。
  2. 點擊需要編輯的技術棧右側的 編輯 按鈕,進入技術棧編輯頁面,編輯完後,點擊 確定 或 發佈 即可對所做的修改進行保存或發佈。

克隆技術棧

若要對技術棧進行克隆,可進行如下操作:

  1. 選擇 產品與服務 > 應用管理 > 技術棧管理 進入技術棧列表頁。
  2. 點擊需要編輯的技術棧右側的 克隆 按鈕,進入克隆之後的技術棧的編輯頁面,編輯完信息後,點擊 確定 或 發佈 即可對所做的修改進行保存或發佈。

廢棄技術棧

若要廢棄技術棧,可進行如下操作:

  1. 選擇 產品與服務 > 應用管理 > 技術棧管理 進入技術棧列表頁。
  2. 點擊需要編輯的技術棧右側的 廢棄 按鈕,填寫廢棄原因,然後點擊 確認 即可廢棄該技術棧。也可以進行批量操作。

刪除技術棧

若要刪除一個技術棧,需保證該技術棧沒有被任何應用服務實例引用。具體操作如下:

  1. 選擇 產品與服務 > 應用管理 > 技術棧管理 進入技術棧列表頁。
  2. 點擊需要刪除的技術棧右側的 刪除 按鈕。也可以進行批量操作。

搜索技術棧

在技術棧列表頁,可以使用各種搜索條件對技術棧進行搜索,搜索條件包括:技術棧版本名稱、狀態、發佈時間、支持地域、操作系統、技術棧名稱、技術棧來源。

xDeploy2.0 與技術棧包的運行原理

當您使用技術棧 2.0 進行一個發佈操作時,您的 ECS 在 StarAgent 的驅動下首先會去下載 download_env_v2.py 這個 Python 腳本,然後運行該腳本。download_env_v2.py 會根據接收到的參數從 OSS 上下載技術棧包和 xDeploy2.0 的壓縮包,並安裝 xDeploy2.0。如果您在進行發佈部署時勾選了 從緩存安裝,那麼 download_env_v2.py 的代碼就會從 ECS 的特定緩存目錄中去尋找緩存,如果命中則直接從緩存解壓技術棧,而無需下載。以下是技術棧的緩存路徑:

/home/admin/.buildpack/cache/

xDeploy2.0 裏包含了驅動技術棧生命週期的代碼,例如: batch_download.pycheckapp_v2.pydeploy_v2.pyinit_env_v2.pyreboot_v2.pyrollback_v2.pysoftware_setup_v2.py 等,這些代碼會去驅動技術棧包 lifecycle 目錄裏的 ac_check_serviceac_deployac_init_envac_setupac_shutdown 這些應用生命週期基本步驟的代碼。

xDeploy2.0 裏的這些生命週期驅動代碼是採用 Python 寫的,這些代碼通過以下這行核心代碼對任意技術棧的 lifecycle 下的基本步驟代碼進行調用:

os.system("%s %s"%(step_file_path,sys_argvs))

其中 step_file_path 是基本步驟代碼的路徑,sys_argvs 是上層業務系統傳遞的參數。 所以 lifecycle 下的生命週期基本步驟代碼可以用 Python、Shell、Ruby、Perl 等等 ECS 上默認安裝的語言編寫。建議您確認一下 ECS 上是否裝有您使用的語言環境。

接收的參數

您的代碼會接收到很多命令行參數,例如:

  • ac.env 開頭的參數,包括以下信息:
名稱 作用
region_id 區域的 ID
tenant_name 租戶名稱
datecenter_name 可用區的唯一標識
appname 應用名
workspace_id 工作空間的 ID
paas_id 雲服務器的 ID
workspace_name 工作空間的唯一標識
customer_id 企業的 ID
iaas_id 雲服務器的 IaaS ID
  • bp. 開頭的參數,這類參數是從控制檯界面上輸入的參數。包括技術棧的環境參數和應用服務實例詳情頁輸入的環境參數。應用服務實例的環境參數優先級高於技術棧的環境參數。

  • 其它參數則是上游業務系統傳遞下來的,比如 version 參數,表示當前發佈包的版本,同時也是這個發佈包的路徑,如果 version 是 V20171101,那麼下載的發佈包就會放到 /home/admin/release/V20171101/ 目錄下。

注意事項

  • 避免您的技術棧生命週期腳本產生過多日誌(控制檯日誌,如 Shell 腳本的 echo 命令,Python 腳本的print 調用等),否則會被截斷,給您排查問題帶來不便。建議將過多的日誌,尤其是安裝軟件依賴產生的日誌全部重定向到日誌文件中,而不是輸出到控制檯中。

  • 若您的技術棧腳本是使用 Python 編寫,注意 Python 的 print 調用會緩存輸出內容,可能會導致您最終在金融科技發佈部署產品中看到的日誌條目有延遲或亂序現象。您可以嘗試在 .py 文件頭部加入#!/usr/bin/python -u 來避免該問題。

常見問題

如何在發佈部署時替換應用發佈包的配置參數

以 Spring Boot 應用爲例,參見 快速開始,在 application.properties 文件中添加鍵值對:bp.username=antcloud,然後在 Java 代碼中讀取鍵值對:


 
 

@RequestMapping("/SpringBoot")

 

@RestController

 

public class WidgetController {

 

@Value("${bp.username}")

 

private String username;

   
 

@RequestMapping(value = "/hello", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})

 

public String helloSpringBoot() {

 

return "Hello " + username + "!";

 

}

 

}

若要在發佈部署時替換掉 username 的值,可執行以下操作:

  1. 選擇 產品與服務 > 發佈部署服務 > 應用服務 > 服務實例列表 進入服務實例管理頁面, 選擇使用了 Spring Boot 的應用服務實例,點擊該服務實例名或實例右側的 詳情 進入實例詳情頁。
  2. 在頁面底部的資源信息模塊,切換到 環境參數 標籤,添加一個新的鍵值對(鍵爲 username;值爲 world),並保存。
  3. 然後進行 發佈部署 操作,應用發佈成功之後,便可以在頁面上看到新的值:“Hello world”。

 

如何在雲上進行調試

我們經常需要對自定義的技術棧包進行修改、上傳、發佈部署並調試,同時觀察結果。爲簡化該流程,技術棧 2.0 產品提供了 調試模式。您可以在創建技術棧時勾選 調試模式,調試模式意味着您在發佈技術棧後,仍可以對該技術棧進行任意修改,從而方便您在雲上對技術棧進行集成測試,但調試模式的技術棧無法共享給任何租戶。發佈之後取消調試模式則無法再次開啓調試模式,取消調試模式之後,技術棧可重新分享給其他租戶。

如何修改系統提供的 SOFA Boot 技術棧依賴

系統提供的 SOFA Boot 技術棧依賴如下:

  • 如果操作系統爲 CentOS 6.5,則對應的是 Tengine 2.0.0 版本,cronolog 1.7.0 版本或 JDK 1.7.1_71 版本。
  • 如果操作系統爲 CentOS 7.2,則對應的是 Tengine 2.1.14 版本,cronolog 1.7.0 版本或 JDK 1.7.0_80 版本。

若要修改這些依賴的版本,可執行以下操作:

  1. 選擇 產品與服務 > 應用管理 > 技術棧管理 進入技術棧列表頁,找到系統提供的 SOFA Boot 技術棧,點擊 詳情 進入技術棧詳情頁面。
  2. 下載技術棧包並解壓,替換掉 resources/centos6.5 與 resources/centos7.2 目錄中的相關依賴軟件包,如:將 centos 7.2 的 JDK 1.7.0_80.tgz 刪掉,加上您需要的 JDK 版本的 .tgz 包,注意保持後綴爲 tgz 並且文件名稱含有 JDK 字樣。
  3. 重新壓縮技術棧包,創建新的技術棧並使用該技術棧包即可。

如何解決技術棧相關日誌不在發佈部署產品中顯示的問題

  • 避免您的技術棧生命週期腳本產生過多日誌(控制檯日誌,如 Shell 腳本的 echo 命令,Python 腳本的print 調用等),否則會被截斷,給您排查問題帶來不便。建議將過多的日誌,尤其是安裝軟件依賴產生的日誌全部重定向到日誌文件中,而不是輸出到控制檯中。

  • 若您的技術棧腳本是使用 Python 編寫,注意 Python 的 print 調用會緩存輸出內容,可能會導致您最終在金融科技發佈部署產品中看到的日誌條目有延遲或亂序現象。您可以嘗試在 .py 文件頭部加入#!/usr/bin/python -u 來避免該問題。

ad:上雲就上阿里雲 享數字化轉型市場佔有率超過第2-5名總和,雲產品通用紅包¥1888,可疊加官網常規優惠使用點擊領取

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章