鄭昀 建立於2017/3/8 最後更新於2017/3/10html
關鍵詞:研發協做,Docker,環境變量,開發聯調,環境維護,虛擬機,中間件,配置與代碼分離,git,jenkinsnginx
開發聯調,測試,預發,生產,稍微上規模的互聯網技術團隊,每一次發佈都須要經歷這四個階段。每個階段都對應於一個環境。因此咱們會面對:
開發聯調環境,測試環境,預發環境,生產環境。git
產品線若干條。併發多個版本。工程無數,有Java,有PHP,有中間件。
說句狠話:沒有趁手的利器,生產效率打完對摺再打對摺,勿謂言之不預也。redis
雲縱有 CloudEngine,如個人《私有云的難處—爲何須要CloudEngine?》和《#研發解決方案#研發協做平臺CloudEngine》文章所述,我覺得能很是流暢地打通這四個環境,即便生產環境是混合雲,即便應用可能發佈在Docker容器裏也可能發佈在虛擬機裏。shell
陳皓同窗在《從Gitlab誤刪除數據庫想到的》中說道:數據庫
一個公司的運維能力的強弱和你上線上環境敲命令是有關的,你越是喜歡上線敲命令,你的運維能力就越弱,越是經過自動化來處理問題,你的運維能力就越強。緩存
而我但願的是:服務器
環境維護,應用部署,只是勾勾點點,沒有心理負擔,dont make me think。 一個代碼分支,對應的一個包(或鏡像,對應於
Docker 的
Image),能夠流經開發聯調環境、測試環境,直接上預發環境,上生產環境,上雲端,一路穿行沒有障礙,全程無需手工干預,無需手工改配置文件從新打包。架構
這麼思考問題的緣由也很簡單,咱們篤信工程師文化,靠技術而不是管理解決問題,正如陳皓同窗所言:併發
若是你是一個技術公司,你就會更多的相信技術而不是管理。相信技術會用技術來解決問題。相信管理,那就只會由制度、流程和價值觀來解決問題。
那麼怎麼辦到呢?
先來一個管中窺豹:
圖0 管中窺豹,CE裏是怎麼申請服務器資源的
再來品嚐一下關鍵點。
我以前說過:
要作到真正的大環境一致,必須將配置徹底與代碼分離,這裏的配置不只僅是服務之間的 IP
地址/內部域名/自動發現,還包括不一樣環境下不一樣應用的配置參數等。 首先咱們把與環境相關的參數都存儲在持久化配置中內心,好比 redis/zk
的訪問域名,好比第三方合做夥伴的接口IP地址等。 其次,每一個應用也都有本身的配置模板,不一樣環境部署的應用默認繼承配置模板,咱們能夠經過
CloudEngine 對配置作一些微調,也就是下面要講到的「臨時屬性信息」了。
CloudEngine 和 SimpleWay 會把環境標識(如 dev/dev-stable/test/test-stable/product 等)和需求工單號,以環境變量的方式打入「服務器」(即容器或虛擬機)裏。
工程經過環境變量確認本身在哪個環境裏,對應哪個需求工單,從而從持久化配置中心讀取到當前環境和當前需求對應的屬性信息。
所謂屬性信息有三類:
1)環境屬性信息:
環境的配置信息在環境層級設置,對應於「環境管理」菜單。好比開發穩定環境下的環境變量,我能夠經過以下界面統一配置:
(圖1 環境屬性信息)
2)應用屬性信息:
應用的配置信息在應用層級設置,對應於「應用管理」菜單。好比janus工程(Java)的應用配置,我能夠經過以下界面來配置:
(圖2 應用屬性信息)
3)臨時屬性信息:
應用實例的配置信息在服務器層級設置,對應於「服務器管理」菜單。也就是此次我申請機器資源時,能夠經過以下界面設置好臨時屬性信息,只有這個應用實例能訪問到:
(圖3 臨時屬性信息)
之前沒有 CloudEngine 的時候,咱們會維護三套測試環境:常規分支測試環境,緊急分支測試環境,特殊分支測試環境。分別對應於上線的班車模式(每週固定發車),警車模式(bugfix),專車模式(版本很大,開發和測試周期較長)。
維護三套測試環境,真心累。
如今只須要維護一套測試環境。
那麼問題來了,多個需求工單,怎麼在一套環境裏並行測試?
祕訣就是,在環境裏再建一個穩定環境(Stable)。
穩定環境裏的應用,只會部署 Release 版本。
根據需求工單申請的新服務器資源,能夠訪問穩定環境裏的業務中心,至少能保證相關業務能正常運行,不會說忽然功能不能用了,忽然服務宕機了。
若是開發聯調環境和測試環境裏的應用須要接受外網的請求,那麼在 CloudEngine 裏也不須要反覆申請外網域名。統一使用 router.yourcompany.com 域名接受外網請求,而後經過 nginx 轉發請求到相應的內網應用。
圖4 是否須要接受外網請求
在相應的環境裏,申請服務器資源時,你不須要鍵入 git 的代碼分支,你輸入應用名稱,選好應用以後,系統會自動列出相應的分支,智能吧:
(圖5 分支自動展示)
這充分體現了咱們的哲學:dont make me think。
咱們技術團隊能夠標準化輸出的成體系的通用技術能力有:
1)
基於虛擬機集羣和容器集羣的研發協做平臺:
申請服務器資源(虛擬機或容器),自動化構建,自動化部署,可自動發佈到咱們本身的公司機房、阿里雲、螞蟻金融雲和IDC機房,支持版本回滾;
2)
電商全套中間件解決方案:
定時任務管理與調度平臺,
異步消息可靠推送系統,
分佈式並行計算調度和管理系統,
一站式智能監控報警平臺,
分佈式跟蹤系統,
分佈式緩存管理系統,
數據庫自動化運維平臺,
3)
大數據全套解決方案:
自助式報表平臺,
即席查詢系統,
數據庫變動訂閱中心,
實時數據大屏發佈平臺,
大數據計算任務發佈管理平臺,
4)
運維基礎設施:
運維自動化平臺,
雲平臺基礎(虛擬機集羣和容器集羣),
大數據分析棧架構。
此體系絕非一朝一夕所能搭建,這是秉承着平凡人作非凡事的理念,一羣信仰技術的工程師邊開飛機邊換引擎,花了幾年歲月建造的森嚴有序的技術體系。
-EOF-