摘要:正式上線已經(jīng)大約兩年,基本已經(jīng)成熟,為宜信大數(shù)據(jù)創(chuàng)新中心各個團隊提供了統(tǒng)一的測試和生產(chǎn)環(huán)境,簡化了服務(wù)的部署與上線流程,也降低了運維人員對系統(tǒng)管理的復(fù)雜度。地址白皮書原文發(fā)布于高可用架構(gòu)作者宜信大數(shù)據(jù)創(chuàng)新中心團隊王超一
一、基于Docker的PaaS平臺LAIN
在金融的場景下,LAIN 是為解放各個團隊和業(yè)務(wù)線的生產(chǎn)力而設(shè)計的一個云平臺。LAIN 正式上線已經(jīng)大約兩年,基本已經(jīng)成熟,為宜信大數(shù)據(jù)創(chuàng)新中心各個團隊提供了統(tǒng)一的測試和生產(chǎn)環(huán)境,簡化了服務(wù)的部署與上線流程,也降低了運維人員對系統(tǒng)管理的復(fù)雜度。
LAIN 規(guī)范了一個應(yīng)用的開發(fā)、測試、上線工作流,提供了為應(yīng)用做的容器編排、權(quán)限控制、SDN、流量管理、監(jiān)控報警、備份、日志等 devops 問題的整體解決方案。(擴展閱讀:宜信開源|詳解PaaS平臺LAIN的功能和架構(gòu))
在 LAIN 上,應(yīng)用是一個基本的概念,某個應(yīng)用的開發(fā)者只需要定義一個 lain.yaml 即可定義應(yīng)用的編譯和運行方式,對應(yīng)用代碼侵入性很低。LAIN 基于容器技術(shù),面向多樣化的技術(shù)棧,并且天然隔離系統(tǒng)和應(yīng)用的依賴。
當(dāng) LAIN 用戶創(chuàng)建一個應(yīng)用(服務(wù))時,可以到 LAIN 上注冊該應(yīng)用,當(dāng)前的用戶自動成為了該應(yīng)用的維護者,擁有了進一步操作該應(yīng)用的權(quán)限。構(gòu)建應(yīng)用的環(huán)境需要 docker 和 lain 命令行工具,為了方便,我們創(chuàng)建了一個 vagrant box 即 lain-box. 在構(gòu)建應(yīng)用時,除了工程代碼外,還需要一個 Docker 鏡像作為基礎(chǔ)鏡像,即編譯的環(huán)境。如果是二進制的工程,如 golang,則可以在運行時換掉一個底,否則會使用 build 鏡像為 release 鏡像。準(zhǔn)備好鏡像和編譯/運行的腳本后,就可以編輯 lain.yaml 了。
具體來說,lain.yaml 主要做了如下四件事:
1、應(yīng)用名稱的確定,體現(xiàn)一個應(yīng)用的邊界
2、應(yīng)用的基礎(chǔ)技術(shù)棧,即編譯和運行的鏡像
3、構(gòu)建過程(如何編譯)
4、微服務(wù)拆分及服務(wù)內(nèi)部配置(如何運行、運維)
關(guān)于第4點,LAIN 上有一個 Proc 的概念,即每個應(yīng)用都有一個或多個 Proc,Proc 在應(yīng)用內(nèi)有唯一的名字和類型,Proc 在底層對應(yīng)于一組容器,一個應(yīng)用之間的各個 Proc 的各個容器的網(wǎng)絡(luò)是互通的,所以應(yīng)用就是可以互相信任的幾個 Proc,對外表現(xiàn)為現(xiàn)實中的某項功能。Proc 的類型是 LAIN 內(nèi)置的,worker 類型是最簡單的類型,LAIN 處理其它的 Proc 類型會做一些額外的事情。
在應(yīng)用的層面上,LAIN 除了用 lain.yaml 將一個應(yīng)用的依賴和行為固化外,還有以下幾大亮點:
1、SDN 網(wǎng)絡(luò)安全隔離
使用 calico 項目構(gòu)建 SDN 網(wǎng)絡(luò)
高效率的應(yīng)用內(nèi)網(wǎng)絡(luò)互通
應(yīng)用間網(wǎng)絡(luò)默認隔離
顯式聲明應(yīng)用間的服務(wù)互訪
2、應(yīng)用權(quán)限的控制
sso 單點登錄,統(tǒng)一認證
利用 sso 的組管理,console 進行應(yīng)用維護者的權(quán)限管理,包括 registry 的鏡像的權(quán)限和應(yīng)用維護的權(quán)限
接下來,我們以一個最簡單的 web 服務(wù)為例,來說明 LAIN 的工作原理。
二、通過實例看LAIN 的9大功能首先,用 go 寫一個簡單的 web 服務(wù),hello.go
下一步,編輯 lain.yaml 文件:
可以看出,lain.yaml 定義了如何編譯,發(fā)布,測試一個應(yīng)用。注意到 hello 應(yīng)用只有一個 Proc,web 是 web.web 的簡寫形式,即 Proc 類型和名字都是 web. 對于每一個 Proc,LAIN 提供了幾個殺手級功能:
1、動態(tài)擴容縮容
可以在 lain.yaml 中定義一個 Proc 的實例數(shù)量,即 num_instances,可以定義每個實例所用的內(nèi)存,也可以在命令行或 console 的 UI 上動態(tài)對實例個數(shù)以及所用內(nèi)存大小進行調(diào)整。動態(tài)擴容縮容會自動注入一些 swarm 的 filters,保證同一個 Proc 的實例調(diào)度到不同的節(jié)點上。
2、volumes
即 docker 的 volume,如果配置了該字段,每一個實例都對應(yīng)擁有一個節(jié)點上的文件目錄。雖然大部分情況下,加入 volume 意味著加入了狀態(tài),不利于 HA,但有些特殊情況比如數(shù)據(jù)庫容器化時,volume 還是必須的。LAIN 的 volume 的精彩之處是可以配置一個備份策略,lain 有一個組件可以支持自定義備份,在備份過程前后還可以自定義腳本,這些自定義腳本何時運行的配置類同 crontab 的調(diào)度策略,相當(dāng)于可以在容器里定義一些 cron job。
3、cloud_volumes
由于某些數(shù)據(jù)需要高可用,另外 Proc 中不同的實例可能需要共享一個 volume,LAIN 集成了分布式文件系統(tǒng),比方說 ceph 和 MooseFS,cloud_volume 比普通的 volume 多一種使用方式,即所有的 instance 共享同一個分布式文件系統(tǒng)目錄。
4、logs
本質(zhì)上還是 docker volume,但是定義在 logs 字段下目錄包含的文件會被 lain 的日志收集系統(tǒng)收集,效果等同于輸出到標(biāo)準(zhǔn)輸入輸出。這樣我們可以統(tǒng)一管理、查詢所有應(yīng)用的日志。
5、secret_files
考慮到一次編譯要在不同集群(如測試、生產(chǎn)集群)上運行,那必然會導(dǎo)致一個問題,就是如何加載某些配置,如數(shù)據(jù)庫用戶名和密碼,將這些配置寫入代碼倉庫會帶來明顯的安全問題,也不方便自動集成和不同集群上的部署,LAIN 通過內(nèi)置的 lvault 組件實現(xiàn)了代碼與配置的分離,每一個 LAIN 集群都有一個自帶的配置中心 lvault,加密存儲著所有該集群應(yīng)用的配置文件。只有應(yīng)用管理者有權(quán)限管理應(yīng)用的配置文件。這樣,用戶將不同集群的配置分別寫到對應(yīng)的 lvault 中,即可用將同一個鏡像推送到不同的集群中并部署運行。
6、web 類型的 Proc
相關(guān) nginx 配置的自動化:web 類型的 Proc 的流量會由一個基于 nginx 的組件 webrouter 做負載均衡,對于不同的 Proc,集群有默認的 mount point,也可以自定義新的 mount point,即 servername 或 baseurl; 也可以定義 health check 等諸多實踐上必須的功能。
watcher 會自動刷新 nginx 配置
日志系統(tǒng)會自動收集 nginx 日志
7、虛IP
虛 IP 是為了保證某個 Proc 的高可用而設(shè)計的一套機制。
Proc 可以注冊一個或多個虛 IP,應(yīng)用可以通過虛 IP 對外服務(wù),比如 webrouter 可以用虛 IP 機制去除 nginx 的單點
networkd 動態(tài)維護虛 IP:在 etcd 配置虛 ip 后,各個節(jié)點的 networkd 會得到通知,如果對應(yīng)的 Proc 的實例調(diào)度到本節(jié)點上,則 networkd 會激活該節(jié)點配置 vip 和 iptables 規(guī)則,保證流量可以到達實例容器。如果一個 Proc 注冊了多個虛 IP,networkd 會盡量將不同的虛 IP 分配到不同的節(jié)點上,由于容器是默認分散到不同的節(jié)點上的,所以這樣可以保證很嚴(yán)格的高可用。
8、Filters
LAIN 支持 swarm 的 constraint 和 affinity 等容器調(diào)度的參數(shù),使得容器的調(diào)度更加合理,比方說默認同一個 Proc 的容器盡量調(diào)度到不同的節(jié)點上,最新的 LAIN 還支持用戶自定義 Proc 的 label 以及 Filters。
9、容器的監(jiān)控和報警
利用自己開發(fā)的 collectd 插件,監(jiān)控容器的基本運行時數(shù)據(jù),集成了 Carbon,Whisper,Graphite-Web,Grafana,icinga2 等開源組件,團隊開發(fā)了 hedwig,hagrid 兩個組件,提供了一整套監(jiān)控報警系統(tǒng)。
對集群而言,一個應(yīng)用的部署大致經(jīng)過這么幾個階段:
1)console 通過 lain-sdk 對 lain.yaml 進行解析,為應(yīng)用創(chuàng)建 network,創(chuàng)建 calico profile, 創(chuàng)建 sso 的應(yīng)用維護者組.
2)console 調(diào)用 deployd 的接口,deployd 完成容器的編排,也提供了應(yīng)用在線擴容縮容等 API,進行自動維持和災(zāi)難恢復(fù),并將一些重要的數(shù)據(jù)寫入 etcd 中
3)lainlet 監(jiān)聽 etcd,networkd 和 webrouter 里的 watcher 通過 lainlet 拿到集群的最新配置,來完成虛 IP 的自動漂移和 nginx 配置的自動更新等。
總之,LAIN 在最開始的設(shè)計中較多地考慮了安全性,包括了 SDN 網(wǎng)絡(luò)和應(yīng)用權(quán)限的管理,秘密文件配置系統(tǒng);在實現(xiàn)中,考慮到了多種技術(shù)棧的支持和容器化帶來的優(yōu)勢,提供了包括備份、日志、監(jiān)控報警等一攬子解決方案,能夠讓應(yīng)用使用者方便地開發(fā)各種特性的應(yīng)用,提高了生產(chǎn)力;最后,對于 LAIN 集群維護者,LAIN 提供了很多運維工具,包括 LAIN 節(jié)點的加入刪除,應(yīng)用容器的手動遷移,節(jié)點的維護模式等等,基本上滿足了從日常運維到災(zāi)難恢復(fù)的方方面面。
GitHub地址:https://github.com/laincloud
白皮書:https://laincloud.gitbooks.io...
原文發(fā)布于“高可用架構(gòu)”
作者:宜信大數(shù)據(jù)創(chuàng)新中心LAIN團隊 王超一
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27846.html
摘要:是宜信公司大數(shù)據(jù)創(chuàng)新中心開發(fā)的開源平臺。為宜信大數(shù)據(jù)創(chuàng)新中心各個團隊提供了統(tǒng)一的測試和生產(chǎn)環(huán)境,簡化了服務(wù)的部署與上線流程,也降低了運維人員對系統(tǒng)管理的復(fù)雜度。基于容器技術(shù),面向多樣化的技術(shù)棧,并且天然隔離系統(tǒng)和應(yīng)用的依賴。 LAIN是宜信公司大數(shù)據(jù)創(chuàng)新中心開發(fā)的開源PaaS平臺。在金融的場景下,LAIN 是為解放各個團隊和業(yè)務(wù)線的生產(chǎn)力而設(shè)計的一個云平臺。LAIN 為宜信大數(shù)據(jù)創(chuàng)新中...
摘要:最近推出了獨具創(chuàng)新的。能否戰(zhàn)勝微軟事實上,的血統(tǒng)將嚴(yán)重影響到它成為企業(yè)的可行性選擇,它不會吸引用戶。微軟的在成熟性上更好,而且它的備份是通過自身的專用基礎(chǔ)設(shè)施。的基礎(chǔ)構(gòu)建被擺在了微軟商店首要位置上。是針對開發(fā)者和并不熱衷于微軟的商店。 VMware最近推出了獨具創(chuàng)新的Cloud Foundry。這款平臺及服務(wù)無疑有著新派傾向:用戶將可以注冊并開發(fā)像MySQL和MongoDB這樣的運行數(shù)據(jù)庫...
摘要:本屆大會仍然以交流云計算產(chǎn)業(yè)的最前沿技術(shù)探索和服務(wù)端開發(fā)運維的最成熟實踐為宗旨,圍繞各講師過去一年內(nèi)的技術(shù)演變和項目實踐進行互動和分享。 showImg(https://segmentfault.com/img/bVsmUZ);ECUG 全稱為 Effective Cloud User Group (實效云計算用戶組),由七牛云 CEO 許式偉于 2007 年發(fā)起,集結(jié)了一批具有高端視...
閱讀 778·2021-10-09 09:58
閱讀 644·2021-08-27 16:24
閱讀 1726·2019-08-30 14:15
閱讀 2386·2019-08-30 11:04
閱讀 2073·2019-08-29 18:43
閱讀 2171·2019-08-29 15:20
閱讀 2719·2019-08-26 12:20
閱讀 1618·2019-08-26 11:44