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