Regal 是一個用於"灰度發佈"或 A/B Testing的智能分組引擎前端
主要功能:nginx
提供發佈策略,動態智能分流git
支持多版本分組和優先級github
數據格式化服務器
同時兼容Python2和Python3併發
舉個最簡單的例子,好比須要針對一個版本進行灰度發佈,而這一版本對應的多是一大堆服務器集羣, 以下圖:app
就像圖中描述的同樣,不管你的服務器是多仍是少,尤爲不少中小型企業在進行灰度發佈時,一般會遇到所制定的分流策略在實際的技術或開發中如何去實現,是機器直接寫死?框架
所以讓Regal智能分組引擎
直接介入,讓它來根據你的策略提早進行動態地分組分流。
在這裏,我再舉一個簡單的例子,方便你們可以更清楚的明白Regal的主要工做:ssh
假設有一個版本A,須要針對六臺機器進行發佈異步
如今應該已經瞭解Regal究竟是什麼乾貨了吧,固然了,上面的例子是服務器很是少的狀況,實際狀況中,所面對的服務器集羣是很是多,這個時候能夠經過提供的combine
和schedule
兩個API進行策略調整。詳情能夠見下文的使用介紹
Feature:
提供發佈策略,動態智能分流
支持多版本分組和優先級
數據格式化
同時兼容Python2.5以上和Python3以上的版本(建議使用Python2.7+或者Python3.5之後的版本)
pip install regal
單個版本場景
In [1]: from regal import BaseInfo # 初始化信息,請注意一下格式 In [6]: ab = BaseInfo( version_host={'app-test-version1.0':'10.1.1.1,10.1.1.2,10.1.1.3,10.1.1.4,10.1.1.1.5'}, combine=2 # combine 但願以每組多少臺服務器做爲一組,進行用戶羣B的分流 # 在這個例子中爲2臺 # 默認:每組1臺 ) # grouping() 進行分組 In [11]: smart_grouping = ab.grouping() # result屬性 進行分組後的返回結果 In [12]: smart_grouping.result Out[12]: [('app-test-version1.0', [['10.1.1.1'], ['10.1.1.2', '10.1.1.3'], ['10.1.1.4', '10.1.1.1.5']])]
你能夠進入項目Github地址,來了解更多Regal引擎的多種運用使用場景及說明
Regal自己只是一個分組引擎,所以它並不承擔直接發佈的做用,可是經過Regal分組以後,你所獲得數據,是很是容易和其餘能夠用來發布的組件進行配合;下面是個人一些建議和指導。
versionA: (第一組) groupA ip...... 用戶羣A (第二組) groupB1 ip...... __ (第三組) groupB2 ip...... | (第四組) groupB3 ip...... | -- 用戶羣B ...... --|
關於發佈
分組以後,每一組的全部機器能夠看做一個總體,扔進發布組件,進行'組內併發'
你能夠把每一組直接放在ansible、saltstack、pssh或異步IO框架等等進行發佈;
甚至你也能夠和前端nginx+lua進行組合;
關於中止發佈
每組進行發佈,一旦出現異常,你能夠利用發佈組件,或者你本身寫一套異常抓取工具來中止發佈,這個時候就不會再針對剩下的組進行發佈操做了。
關於回滾
把回滾也看做一種發佈,就很少說了