宜信開源|詳解PaaS平臺LAIN的功能和架構

LAIN是宜信公司大數據創新中心開發的開源PaaS平臺。在金融的場景下,LAIN 是爲解放各個團隊和業務線的生產力而設計的一個雲平臺。LAIN 爲宜信大數據創新中心各個團隊提供了統一的測試和生產環境,簡化了服務的部署與上線流程,也降低了運維人員對系統管理的複雜度。

一、設計理念及解決問題

LAIN 規範了一個應用的開發、測試、上線工作流,提供了爲應用做的容器編排、權限控制、SDN、流量管理、監控報警、備份、日誌等 devops 問題的整體解決方案。

在 LAIN 上,應用是一個基本的概念,某個應用的開發者只需要定義一個 lain.yaml 即可定義應用的編譯和運行方式,對應用代碼侵入性很低。LAIN 基於容器技術,面向多樣化的技術棧,並且天然隔離系統和應用的依賴。

當 LAIN 用戶創建一個應用(服務)時,可以到 LAIN 上註冊該應用,當前的用戶自動成爲了該應用的維護者,擁有了進一步操作該應用的權限。構建應用的環境需要 docker 和 lain 命令行工具,爲了方便,我們創建了一個 vagrant box 即 lain-box. 在構建應用時,除了工程代碼外,還需要一個 Docker 鏡像作爲基礎鏡像,即編譯的環境。如果是二進制的工程,如 golang,則可以在運行時換掉一個底,否則會使用 build 鏡像爲 release 鏡像。準備好鏡像和編譯/運行的腳本後,就可以編輯 lain.yaml 了。

具體來說,LAIN 解決了以下四個問題:

1、應用開發之下的devops問題的整體解決方案

常見問題

  • 面對用戶的應用級開發僅僅是冰山一角,在此之下有機房、網絡、服務器、系統管理、運維管理、監控、告警、日誌等等一系列背後的工作,而這部份的工作可能比應用級開發還要複雜
  • 採用IaaS解決了服務器採購和上架問題,但是依然需要一個強大的devops團隊來負責上述事務,否則基礎設施很容易成爲發展瓶頸,且越拖越難解決
  • 上面的這些工作對於每一個產品可能都是同質化但又伴隨着定製,會消耗大量的時間做這些重複的工作

Lain是怎麼做的

  • 直接在幾乎裸的IaaS或者服務器上即可構建lain集羣,方便地進行在線的擴容縮容等集羣底層資源操作
  • 整合了業界沉澱下來的良好的運維整體實踐,提供了冰山下的這一大塊工作的整體解決方案
  • 將紛繁複雜的系統管理和運維管理行爲封裝爲更簡單易用的工具包,極大簡化大部分的系統工作,降低日常維護的技術門檻和人力需求
  • 將同質化的工作整合在一起,避免重複勞動
  • 開箱即用的各種管理組件,囊括了部署,擴容,監控,告警,日誌等方方面面。還有附贈應用,包括mysql,redis的集羣服務

2、規範了應用開發的工作流程,並輔以適當的SCM支援

常見問題

  • 在個人開發者以及startup組織中,良好的工作流這件事幾乎是不會被提及的,然而在日漸發展的過程中遺留的技術債務卻會越來越多的影響開發部署的效率和質量
  • 設計、開發和部署行爲的不規範會引發各種問題

Lain是怎麼做的

  • 提供本地開發環境的解決方案
  • 提供本地開發過程的SDK / CLI工具鏈,使得開發和構建過程是嵌入在解決方案中的
  • 隱性的提供了SCM支援,約束了開發者的開發和發佈行爲

3、提高整體資源利用率,優化冗餘資源池

常見問題

  • 傳統的按照產品線規劃資源池的情況下,會給各產品預留專屬的資源池以及配備冗餘,以便進行災備以及服務突發流量
  • 然而各產品線的資源需求類型不同,冗餘類型也不同,無法共通共享,造成衆多的重複冗餘,資源利用率比較低
  • 通過服務器資源的冗餘,擴容縮容,以及資源遷移的操作比較複雜,時間消耗大,風險高

Lain是怎麼做的

  • 通過容器技術的資源隔離和控制,實現多種技術棧多種應用在集羣內安全的不相互影響的混合部署,通過統一的資源池進行冗餘,有效提高資源利用率
  • 容器技術的運用使得對下資源的使用形成完全統一的形式,擴容縮容以及遷移的成本很低,操作也更簡單。

4、TBD:架構上提供了服務治理的可能性和解決方案

二、特徵

在應用的層面上,LAIN 還有以下特徵:

1、基於配置文件定義應用

  • 在現有的應用上只需要增加一個配置文件lain.yaml即可定義應用在lain集羣裏的編譯和運行
  • 對應用代碼的侵入性很低

2、SDN網絡安全隔離

3、基於容器技術支持多樣化的技術棧

  • 使用開源的docker項目構建容器雲
  • 擴展封裝Dockerfile,使用自定義的yaml格式進行應用的集羣定義
  • 只需符合最簡單的lain cluster runtime interface,可自由選擇base image
  • 容器技術天然的支持隔離系統和應用的依賴

    • lain SDK / CLI以及可選的ci組件支援代碼版本和鏡像之間的對應關係
    • 編譯時和運行時鏡像均可完全定製和隔離

4、應用在線擴容縮容

  • 使用開源的swarm調度應用部署
  • 深度封裝swarm docker API,自行開發集羣控制器(deployd)以及應用控制器(console)

    • 直接支持用戶API調用進行容器實例數擴容,縮容
    • 直接支持用戶API調用進行容器單實例資源的擴容,縮容(CPU,MEM)

5、節點在線擴容縮容

  • 使用開源的ansible(https://github.com/ansible/an...
  • 集羣的服務器節點(NODE)兼容同一個C段內的物理服務器,虛擬機,公有云服務器
  • 集羣管理工具包支持add NODE 和 remove NODE 指令,快速進行底層資源擴容和縮容

6、服務自動維持和災難恢復

  • 自行開發集羣控制器(deployd)

    • 容器實例級別的服務巡檢和維持,自動遷移和服務恢復
    • 基於虛ip自動漂移的入口load balancer HA
    • 高級API支持服務定製遷移

7、內部服務依賴和發現機制

  • 集羣支援Service / Resource 機制

    • 集羣整體的服務應用
    • 應用私有Service (即 Resource)服務應用
  • 集羣支援特別的服務應用類型和資源應用類型
  • 在lain.yaml中顯式聲明使用的Service / Resource

    • 基於DNS的服務發現機制
    • 可編程的service/resource load balancer
    • 默認提供可用的RoundRobin類型的load balancer

8、統一認證

  • 集羣自行開發統一認證組件(sso)
  • 支持oauth2的多種認證方式

9、虛ip和負載均衡器統一管理

  • 支援 virtual ip 和 應用 proc 的註冊,應用可註冊 virtual ip 來進行對外服務
  • 基於etcd lock機制的virtual ip 漂移機制,應用 load balancer 可藉此實現 HA

10、web load balancer的自動配置

  • 使用開源的nginx和tengine(https://github.com/alibaba/te...
  • 自研的watcher檢測集羣應用的整體 runtime 數據,自動爲 web 服務生成配置

    • 獲取runtime變化的時間,判斷是否需要進行配置變更
    • 配置變更事件出發配置的渲染
    • 觸發 reload 生效

11、集羣體系化的日誌收集

  • 使用開源的 heka(https://github.com/mozilla-se...
  • 默認收集應用的stdout / stderr日誌收集
  • 支援應用顯式聲明需要收集的落地文件日誌
  • 支援應用顯式聲明結構化的監控數據日誌
  • 定製檢測web服務load balancer的nginx日誌收集和數據統計

12、私有docker registry以及認證機制

  • 使用開源的docker registry封裝私有 registry 應用
  • 集成支援集羣的私有統一認證機制
  • 定製支援可選的moosefs存儲後端或者Ceph存儲後端

13、應用配置加密存儲

  • 使用開源的庫封裝的應用私有配置加密存儲組件
  • 集成sso組件實現用戶管理和權限隔離
  • 在應用運行時階段將配置注入

14、本地化開發環境

  • 使用開源的vagrant,免費的centos和virtualbox組織統一的本地化開發環境
  • 甚至支援本地使用上述工具鏈bootstrap出一個lain本地集羣

15、應用部署運維API以及相應的CLI客戶端

  • 應用的構建,發佈,部署,運維都由集羣的各組件提供API
  • 使用lain SDK / CLI再次封裝上述API,給用戶提供良好的操作界面
  • 集成集羣的統一認證,進行用戶管理和權限隔離

16、集羣管理CLI

  • 使用開源的ansible開發集羣管理運維工具包
  • 再次封裝ansible調用爲簡單的CLI使得操作更方便,包括增加節點,移除節點,遷移應用,集羣健康檢查等。

17、規範化的開發workflow

  • 基於上述組件,以代碼 - 鏡像的一一對應關係進行SCM,對鏡像進行發佈管理
  • 使用lain SDK / CLI以及可選的ci組件進行本地開發,構建發佈,會很自然的規範開發workflow
  • 工作流運轉的核心單位是鏡像,lain cli封裝了鏡像的生成,更新,推送,部署,運維

18、可選的集羣體系化的備份和恢復(backupd + moosefs)

  • 採用開源的moosefs作爲分佈式存儲後端
  • 支援在lain.yaml中顯式聲明volume備份需求和策略,以及設定備份策略的hooks
  • 支援指定備份恢復

19、可選的集羣日誌查詢組件(kafka + elasticsearch + kibana)

  • 採用開源的kakfa ,elasticsearch,kibana搭建外部依賴的卡夫卡集羣和elasticsearch集羣,封裝集羣可選組件libana
  • rebellion集羣日誌收集組件支援發送所有日誌到上述外部依賴kafka
  • 在libana上支援對集羣應用日誌和web load balancer 日誌的條件組合查詢

20、可選的系列預置應用

三、系統架構

1、物理視圖

從物理層面看,每一個 lain 集羣是由一個或多個網絡互通的節點(Node)構成的。

每個節點可以被賦予不同的 label ,供容器調度時進行節點選擇使用。
目前的實現中,需要所有節點位於同一個路由器後。

2、邏輯視圖

從邏輯層面看,一個 lain 集羣是由多個應用組成,應用和應用之間網絡相互隔離(通過SDN技術)。

每一個應用是由多個 Docker 容器組成,每個容器都可能運行在不同的節點上。

應用開發者可以在一個應用中定義多種容器(稱爲 proc),每個 proc 可以指定爲在集羣上運行多份,每份即爲一個容器,被稱爲 proc instance 。Lain 集羣會儘可能保證有指定份數的容器在運行,如果有容器 crash 或者節點 fail 的情況發生,集羣會試圖重啓容器或者在節點間遷移容器。

3、系統架構設計圖

目標是做成一層一層可以深入的架構圖

總圖

節點

4、工作流程

GitHub地址https://github.com/laincloud

白皮書https://laincloud.gitbooks.io...

來源:宜信技術學院

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章