前言
本文主要探讨政務雲下,使用容器方式部署服務時,整體配套的阿裡雲産品,同時介紹主要使用的基礎産品及這些産品使用的一些建議。
下文對于阿裡雲産品的使用介紹基于目前的政務雲版本,與公有雲版本存在一定差異,僅供參考。
部署架構
由于線上環境穩定要求較高,是以加入了撥測 和 監控報警服務,為項目單獨開發,本文暫不做介紹。
産品介紹
EDAS(企業級分布式應用服務)
使用方式
edas的釋出主要有兩種方式基于ESC叢集部署和基于k8s叢集部署(需要配合阿裡雲的容器服務使用)
同時,edas也提供了微服務的注冊中心和配置中心
tips
- 使用edas+acs實作無損釋出(釋出期間流量不中斷)
滾動釋出 + Readiness配置,配置健康檢查的接口,隻有通過了Readiness檢測,流量才會打到此pod。
ACS(容器服務)
容器需要對外暴露服務時,是不可使用pod Ip + 端口的,這隻在k8s叢集内部可識别,正确的做法是使用容器服務配置服務,容器服務本身是提供了slb負載均衡的位址段的。(使用EDAS釋出時,EDAS也可直接配置負載均衡,但需要關聯SLB,較為不便,不推薦)
SLB (負載均衡)
基于k8s釋出的服務,SLB中無法直接選擇相應的伺服器,需要手動添加服務ip位址(上面容器服務中配置服務的負載均衡位址)
SLS(日志服務)
叢集部署時,日志分散在各個節點上,檢視日志時,需要切換各個節點檢視,極為不便(容器方式還需要多一步進入容器,更為麻煩)。
sls采集容器服務的日志時,需要把logtail配置到鏡像内,同時采用機器組格式,多台伺服器通過同一個自定義辨別實作機器組彈性伸縮。(容器每次重新開機pod ip會變更,不适合使用固定IP)
# 擷取安裝logtail的腳本
wget
http://data.cn-hangzhou-zwynet-d01.sls-pub.internet.cloud.zj.gov.cn/logtail.sh# 安裝logtail
sh logtail.sh install
# 修改機器組辨別
echo dayu-compute-yufa > /etc/ilogtail/user_defined_id
- sls的預設全文索引,基于分詞查詢的,可以根據需要配置分詞符 (預設配置中 . 并不是分詞符)
以預設配置為例,以下日志搜IOException并不能搜到日志, 需要搜java.io.IOException,因為預設 . 并不是分詞符,需要按完整分詞搜尋
- 基于格式化字段的搜尋 如 ElapseTime > 1000,需要給該字段加數值索引,否則不生效
- 基于分詞符,索引的修改隻能對後續接入的日志生效,并能不影響之前的資料
- 同一個檔案,隻能被一個Logtail的配置收集,不支援同時被多個logtail配置收集
- 不要使用極簡模式(單行) 模式采集日志,異常棧會被認作是多行日志,叢集模式下,會出現錯序,使用極簡-多行 或正則模式比對行首即可
ARMS(應用實時監控服務)
使用jar包方式部署時,不需要額外的配置即可接入arms;使用容器部署時,需要将探針拷貝到鏡像中,同時指定相應的啟動指令。
# 拷貝ARMS探針
COPY ArmsAgent.zip ArmsAgent.zip
# 啟動指令
# 啟動後端服務
java -javaagent:/data/arms/ArmsAgent/arms-bootstrap.jar -Darms.licenseKey=#{licenceKey} -Darms.appName=#{appName} -jar java.jar --spring.profiles.active=${activeProfile}
- 慢SQL巡檢優化 (可以使用接口快照檢視是由哪些接口引起的)
- 異常分析,可以輔助測試發現一些隐蔽的問題(可以使用接口快照檢視是由哪些接口引起的)
- 調用鍊路,耗時分析優化 & 錯誤排查, 調用棧中會将每一步的耗時列印出來,另外,如果該接口出錯,調用棧也會展示在哪個方法中抛出了異常