摘要:是宜信公司大數(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)新中心各個團隊提供了統(tǒng)一的測試和生產(chǎn)環(huán)境,簡化了服務(wù)的部署與上線流程,也降低了運維人員對系統(tǒng)管理的復(fù)雜度。
一、設(shè)計理念及解決問題LAIN 規(guī)范了一個應(yīng)用的開發(fā)、測試、上線工作流,提供了為應(yīng)用做的容器編排、權(quán)限控制、SDN、流量管理、監(jiān)控報警、備份、日志等 devops 問題的整體解決方案。
在 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 解決了以下四個問題:
1、應(yīng)用開發(fā)之下的devops問題的整體解決方案常見問題
面對用戶的應(yīng)用級開發(fā)僅僅是冰山一角,在此之下有機房、網(wǎng)絡(luò)、服務(wù)器、系統(tǒng)管理、運維管理、監(jiān)控、告警、日志等等一系列背后的工作,而這部份的工作可能比應(yīng)用級開發(fā)還要復(fù)雜
采用IaaS解決了服務(wù)器采購和上架問題,但是依然需要一個強大的devops團隊來負責(zé)上述事務(wù),否則基礎(chǔ)設(shè)施很容易成為發(fā)展瓶頸,且越拖越難解決
上面的這些工作對于每一個產(chǎn)品可能都是同質(zhì)化但又伴隨著定制,會消耗大量的時間做這些重復(fù)的工作
Lain是怎么做的
直接在幾乎裸的IaaS或者服務(wù)器上即可構(gòu)建lain集群,方便地進行在線的擴容縮容等集群底層資源操作
整合了業(yè)界沉淀下來的良好的運維整體實踐,提供了冰山下的這一大塊工作的整體解決方案
將紛繁復(fù)雜的系統(tǒng)管理和運維管理行為封裝為更簡單易用的工具包,極大簡化大部分的系統(tǒng)工作,降低日常維護的技術(shù)門檻和人力需求
將同質(zhì)化的工作整合在一起,避免重復(fù)勞動
開箱即用的各種管理組件,囊括了部署,擴容,監(jiān)控,告警,日志等方方面面。還有附贈應(yīng)用,包括mysql,redis的集群服務(wù)
2、規(guī)范了應(yīng)用開發(fā)的工作流程,并輔以適當(dāng)?shù)腟CM支援常見問題
在個人開發(fā)者以及startup組織中,良好的工作流這件事幾乎是不會被提及的,然而在日漸發(fā)展的過程中遺留的技術(shù)債務(wù)卻會越來越多的影響開發(fā)部署的效率和質(zhì)量
設(shè)計、開發(fā)和部署行為的不規(guī)范會引發(fā)各種問題
Lain是怎么做的
提供本地開發(fā)環(huán)境的解決方案
提供本地開發(fā)過程的SDK / CLI工具鏈,使得開發(fā)和構(gòu)建過程是嵌入在解決方案中的
隱性的提供了SCM支援,約束了開發(fā)者的開發(fā)和發(fā)布行為
3、提高整體資源利用率,優(yōu)化冗余資源池常見問題
傳統(tǒng)的按照產(chǎn)品線規(guī)劃資源池的情況下,會給各產(chǎn)品預(yù)留專屬的資源池以及配備冗余,以便進行災(zāi)備以及服務(wù)突發(fā)流量
然而各產(chǎn)品線的資源需求類型不同,冗余類型也不同,無法共通共享,造成眾多的重復(fù)冗余,資源利用率比較低
通過服務(wù)器資源的冗余,擴容縮容,以及資源遷移的操作比較復(fù)雜,時間消耗大,風(fēng)險高
Lain是怎么做的
通過容器技術(shù)的資源隔離和控制,實現(xiàn)多種技術(shù)棧多種應(yīng)用在集群內(nèi)安全的不相互影響的混合部署,通過統(tǒng)一的資源池進行冗余,有效提高資源利用率
容器技術(shù)的運用使得對下資源的使用形成完全統(tǒng)一的形式,擴容縮容以及遷移的成本很低,操作也更簡單。
4、TBD:架構(gòu)上提供了服務(wù)治理的可能性和解決方案 二、特征在應(yīng)用的層面上,LAIN 還有以下特征:
1、基于配置文件定義應(yīng)用
在現(xiàn)有的應(yīng)用上只需要增加一個配置文件lain.yaml即可定義應(yīng)用在lain集群里的編譯和運行
對應(yīng)用代碼的侵入性很低
2、SDN網(wǎng)絡(luò)安全隔離
使用開源的calico(https://github.com/projectcal...
高效率的應(yīng)用內(nèi)網(wǎng)絡(luò)互通
應(yīng)用間網(wǎng)絡(luò)默認隔離
顯式聲明應(yīng)用間的服務(wù)互訪
3、基于容器技術(shù)支持多樣化的技術(shù)棧
使用開源的docker項目構(gòu)建容器云
擴展封裝Dockerfile,使用自定義的yaml格式進行應(yīng)用的集群定義
只需符合最簡單的lain cluster runtime interface,可自由選擇base image
容器技術(shù)天然的支持隔離系統(tǒng)和應(yīng)用的依賴
lain SDK / CLI以及可選的ci組件支援代碼版本和鏡像之間的對應(yīng)關(guān)系
編譯時和運行時鏡像均可完全定制和隔離
4、應(yīng)用在線擴容縮容
使用開源的swarm調(diào)度應(yīng)用部署
深度封裝swarm docker API,自行開發(fā)集群控制器(deployd)以及應(yīng)用控制器(console)
直接支持用戶API調(diào)用進行容器實例數(shù)擴容,縮容
直接支持用戶API調(diào)用進行容器單實例資源的擴容,縮容(CPU,MEM)
5、節(jié)點在線擴容縮容
使用開源的ansible(https://github.com/ansible/an...
集群的服務(wù)器節(jié)點(NODE)兼容同一個C段內(nèi)的物理服務(wù)器,虛擬機,公有云服務(wù)器
集群管理工具包支持add NODE 和 remove NODE 指令,快速進行底層資源擴容和縮容
6、服務(wù)自動維持和災(zāi)難恢復(fù)
自行開發(fā)集群控制器(deployd)
容器實例級別的服務(wù)巡檢和維持,自動遷移和服務(wù)恢復(fù)
基于虛ip自動漂移的入口load balancer HA
高級API支持服務(wù)定制遷移
7、內(nèi)部服務(wù)依賴和發(fā)現(xiàn)機制
集群支援Service / Resource 機制
集群整體的服務(wù)應(yīng)用
應(yīng)用私有Service (即 Resource)服務(wù)應(yīng)用
集群支援特別的服務(wù)應(yīng)用類型和資源應(yīng)用類型
在lain.yaml中顯式聲明使用的Service / Resource
基于DNS的服務(wù)發(fā)現(xiàn)機制
可編程的service/resource load balancer
默認提供可用的RoundRobin類型的load balancer
8、統(tǒng)一認證
集群自行開發(fā)統(tǒng)一認證組件(sso)
支持oauth2的多種認證方式
9、虛ip和負載均衡器統(tǒng)一管理
支援 virtual ip 和 應(yīng)用 proc 的注冊,應(yīng)用可注冊 virtual ip 來進行對外服務(wù)
基于etcd lock機制的virtual ip 漂移機制,應(yīng)用 load balancer 可借此實現(xiàn) HA
10、web load balancer的自動配置
使用開源的nginx和tengine(https://github.com/alibaba/te...
自研的watcher檢測集群應(yīng)用的整體 runtime 數(shù)據(jù),自動為 web 服務(wù)生成配置
獲取runtime變化的時間,判斷是否需要進行配置變更
配置變更事件出發(fā)配置的渲染
觸發(fā) reload 生效
11、集群體系化的日志收集
使用開源的 heka(https://github.com/mozilla-se...
默認收集應(yīng)用的stdout / stderr日志收集
支援應(yīng)用顯式聲明需要收集的落地文件日志
支援應(yīng)用顯式聲明結(jié)構(gòu)化的監(jiān)控數(shù)據(jù)日志
定制檢測web服務(wù)load balancer的nginx日志收集和數(shù)據(jù)統(tǒng)計
12、私有docker registry以及認證機制
使用開源的docker registry封裝私有 registry 應(yīng)用
集成支援集群的私有統(tǒng)一認證機制
定制支援可選的moosefs存儲后端或者Ceph存儲后端
13、應(yīng)用配置加密存儲
使用開源的庫封裝的應(yīng)用私有配置加密存儲組件
集成sso組件實現(xiàn)用戶管理和權(quán)限隔離
在應(yīng)用運行時階段將配置注入
14、本地化開發(fā)環(huán)境
使用開源的vagrant,免費的centos和virtualbox組織統(tǒng)一的本地化開發(fā)環(huán)境
甚至支援本地使用上述工具鏈bootstrap出一個lain本地集群
15、應(yīng)用部署運維API以及相應(yīng)的CLI客戶端
應(yīng)用的構(gòu)建,發(fā)布,部署,運維都由集群的各組件提供API
使用lain SDK / CLI再次封裝上述API,給用戶提供良好的操作界面
集成集群的統(tǒng)一認證,進行用戶管理和權(quán)限隔離
16、集群管理CLI
使用開源的ansible開發(fā)集群管理運維工具包
再次封裝ansible調(diào)用為簡單的CLI使得操作更方便,包括增加節(jié)點,移除節(jié)點,遷移應(yīng)用,集群健康檢查等。
17、規(guī)范化的開發(fā)workflow
基于上述組件,以代碼 - 鏡像的一一對應(yīng)關(guān)系進行SCM,對鏡像進行發(fā)布管理
使用lain SDK / CLI以及可選的ci組件進行本地開發(fā),構(gòu)建發(fā)布,會很自然的規(guī)范開發(fā)workflow
工作流運轉(zhuǎn)的核心單位是鏡像,lain cli封裝了鏡像的生成,更新,推送,部署,運維
18、可選的集群體系化的備份和恢復(fù)(backupd + moosefs)
采用開源的moosefs作為分布式存儲后端
支援在lain.yaml中顯式聲明volume備份需求和策略,以及設(shè)定備份策略的hooks
支援指定備份恢復(fù)
19、可選的集群日志查詢組件(kafka + elasticsearch + kibana)
采用開源的kakfa ,elasticsearch,kibana搭建外部依賴的卡夫卡集群和elasticsearch集群,封裝集群可選組件libana
rebellion集群日志收集組件支援發(fā)送所有日志到上述外部依賴kafka
在libana上支援對集群應(yīng)用日志和web load balancer 日志的條件組合查詢
20、可選的系列預(yù)置應(yīng)用
MySQL的服務(wù)(https://github.com/laincloud/...
MySQL的資源
Redis的服務(wù)-SM(https://github.com/laincloud/...
三、系統(tǒng)架構(gòu) 1、物理視圖從物理層面看,每一個 lain 集群是由一個或多個網(wǎng)絡(luò)互通的節(jié)點(Node)構(gòu)成的。
每個節(jié)點可以被賦予不同的 label ,供容器調(diào)度時進行節(jié)點選擇使用。
目前的實現(xiàn)中,需要所有節(jié)點位于同一個路由器后。
從邏輯層面看,一個 lain 集群是由多個應(yīng)用組成,應(yīng)用和應(yīng)用之間網(wǎng)絡(luò)相互隔離(通過SDN技術(shù))。
每一個應(yīng)用是由多個 Docker 容器組成,每個容器都可能運行在不同的節(jié)點上。
應(yīng)用開發(fā)者可以在一個應(yīng)用中定義多種容器(稱為 proc),每個 proc 可以指定為在集群上運行多份,每份即為一個容器,被稱為 proc instance 。Lain 集群會盡可能保證有指定份數(shù)的容器在運行,如果有容器 crash 或者節(jié)點 fail 的情況發(fā)生,集群會試圖重啟容器或者在節(jié)點間遷移容器。
3、系統(tǒng)架構(gòu)設(shè)計圖目標(biāo)是做成一層一層可以深入的架構(gòu)圖
總圖
節(jié)點
4、工作流程GitHub地址:https://github.com/laincloud
白皮書:https://laincloud.gitbooks.io...
來源:宜信技術(shù)學(xué)院
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/27845.html
摘要:正式上線已經(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)成熟,...
摘要:容器云的背景伴隨著微服務(wù)的架構(gòu)的普及,結(jié)合開源的和等微服務(wù)框架,宜信內(nèi)部很多業(yè)務(wù)線逐漸了從原來的單體架構(gòu)逐漸轉(zhuǎn)移到微服務(wù)架構(gòu)。 容器云的背景 伴隨著微服務(wù)的架構(gòu)的普及,結(jié)合開源的Dubbo和Spring Cloud等微服務(wù)框架,宜信內(nèi)部很多業(yè)務(wù)線逐漸了從原來的單體架構(gòu)逐漸轉(zhuǎn)移到微服務(wù)架構(gòu)。應(yīng)用從有狀態(tài)到無狀態(tài),具體來說將業(yè)務(wù)狀態(tài)數(shù)據(jù)如:會話、用戶數(shù)據(jù)等存儲到中間件中服務(wù)中。 showI...
摘要:容器云的背景伴隨著微服務(wù)的架構(gòu)的普及,結(jié)合開源的和等微服務(wù)框架,宜信內(nèi)部很多業(yè)務(wù)線逐漸了從原來的單體架構(gòu)逐漸轉(zhuǎn)移到微服務(wù)架構(gòu)。 容器云的背景 伴隨著微服務(wù)的架構(gòu)的普及,結(jié)合開源的Dubbo和Spring Cloud等微服務(wù)框架,宜信內(nèi)部很多業(yè)務(wù)線逐漸了從原來的單體架構(gòu)逐漸轉(zhuǎn)移到微服務(wù)架構(gòu)。應(yīng)用從有狀態(tài)到無狀態(tài),具體來說將業(yè)務(wù)狀態(tài)數(shù)據(jù)如:會話、用戶數(shù)據(jù)等存儲到中間件中服務(wù)中。 showI...
摘要:本屆大會仍然以交流云計算產(chǎn)業(yè)的最前沿技術(shù)探索和服務(wù)端開發(fā)運維的最成熟實踐為宗旨,圍繞各講師過去一年內(nèi)的技術(shù)演變和項目實踐進行互動和分享。 showImg(https://segmentfault.com/img/bVsmUZ);ECUG 全稱為 Effective Cloud User Group (實效云計算用戶組),由七牛云 CEO 許式偉于 2007 年發(fā)起,集結(jié)了一批具有高端視...
閱讀 2583·2021-10-11 10:58
閱讀 1163·2021-09-29 09:34
閱讀 1521·2021-09-26 09:46
閱讀 3846·2021-09-22 15:31
閱讀 744·2019-08-30 15:54
閱讀 1467·2019-08-30 13:20
閱讀 1262·2019-08-30 13:13
閱讀 1495·2019-08-26 13:52