模板解析器
通過輸入輸出流獲取模板中參數(shù)標識,進行語義轉化,得到易于理解的配置參數(shù)。模板解析器的工作原理如下圖2所示:
圖2 模板解析器的工作原理
客戶端發(fā)起創(chuàng)建對象請求,服務端收到請求以后,會根據(jù)請求的對象類型自關聯(lián)基礎模板。通過文件流的方式,讀取基礎模板,讀取過程中以Parameters標志為起始點,獲取參數(shù)描述信息。解析完成,參數(shù)以Json串的方式返回客戶端,客戶端根據(jù)Json串,動態(tài)生成需要用戶填寫的表單,用戶根據(jù)表單內容完成參數(shù)輸入操作。
模板解析器重點解析模板定義中的參數(shù)標識。通過語義轉化,信息提示,形成易辨識的輸入項。對用戶而言,解析完成以后能夠屏蔽繁雜的技術指標,用戶的關心點由技術轉變到業(yè)務配置。最大程度降低使用成本,增加易用性。
模板轉化器
模板轉化器是模板引擎的核心,重點解決三個問題:獲取部署模板,參數(shù)與值轉換,構建可執(zhí)行文件??蛻舳税涯0褰馕銎髦袇?shù)賦予真實值,傳遞到服務端,服務端讀取模版內容,遇到參數(shù)的標志位結束,把讀取的內容通過文件流寫到新文件,生成部署文件,接著用參數(shù)值對部署文件中的參數(shù)做關聯(lián)替換,生成最終的可執(zhí)行文件。模板轉化器的工作原理如圖3所示:
圖3 模板轉化器的工作原理
獲取部署模板:由模板定義可知,模板中包含兩部分內容:部署模板和參數(shù)標識。模板轉化器首先需要部署模板,通過文件流的方式讀取模板定義中的部署模板,讀取過程中以parameters標識符分割,獲取部署模板。
參數(shù)值轉化:核心是解決參數(shù)與占位符關聯(lián)和賦值問題。模板轉換器通過模板參數(shù)定義的name屬性key關聯(lián),模板轉化器拿到參數(shù)值以后,獲取參數(shù)值對應的key(key在部署模板唯一),并且根據(jù)key,替換部署模板中占位標識,完成參數(shù)替換。
構建可執(zhí)行文件:通過文件流的方式,把前兩部轉化的字符流輸出到文件,構建出可執(zhí)行文件。
模板轉換器執(zhí)行以后,生成的可執(zhí)行文件如下所示:
模板執(zhí)行器
模板執(zhí)行器接收可執(zhí)行的部署文件,對于文件中定義的部署類型進行解析,拆分成若干個可執(zhí)行任務。容器引擎根據(jù)收到的任務執(zhí)行操作,最終協(xié)同完成部署工作。模板執(zhí)行器往往依賴于容器調度和執(zhí)行引擎。以Kubernetes容器編排框架為例,模板轉化器生成的可執(zhí)行文件,以字符流的方式傳輸?shù)終ubernetes的Server端,Kubernetes根據(jù)傳入文件,自動解析文件內容,并且做出相關操作。對于模板引擎而言,無論是Kubernetes還是Swarmkit都能夠得到友好的支持。模板執(zhí)行器的工作原理如圖4所示:
圖4 模板執(zhí)行器的工作原理
模板執(zhí)行器執(zhí)行以后的結果如圖5所示:
圖 5
通過模板引擎的方式,可以對容器的配置做靈活使用,無論是容器部署還是其他資源主題對象創(chuàng)建,都有對應模板支持。模板處理引擎不需要根據(jù)模板的變動而不斷的修改代碼。與此同時,用戶可以從自己理解的語義關注配置信息,不需要關注具體技術細節(jié)和實現(xiàn)方式,簡化操作行為,降低使用成本。
本文為《程序員》原創(chuàng)文章,本文作者:李寧,BoCloud博云高級架構師。