互聯網產品灰度發佈

互聯網產品灰度發佈

 原文地址:http://blog.csdn.net/boonya/article/details/51537674

關於2016年5月15日,DevOps成都站|架構與運維峯會活動總結

1. 前言 2

2. 灰度發佈定義 5

3. 灰度發佈作用 5

4. 灰度發佈步驟 5

5. 灰度發佈測試方法 6

6. 灰度發佈引擎 6

7. 灰度發佈常見問題 8

7.1. 以偏概全 8

7.1.1. 問題特徵: 8

7.1.2. 解決方案: 8

7.2. 知識的詛咒 9

7.2.1. 問題特徵: 9

7.2.2. 解決方案: 9

7.3. 發佈沒有回頭路可走 9

7.3.1. 問題特徵: 9

7.3.2. 解決方案: 9

7.4. 用戶參與度不夠 10

7.4.1. 問題特徵: 10

7.4.2. 解決方案: 10

8. 讓產品具備灰度發佈能力 10

8.1. 灰度機制的七個維度 10

8.1.1. 需求度 10

8.1.2. 速度 10

8.1.3. 靈活度 10

8.1.4. 冗餘度 11

8.1.5. 開放協作度 11

8.1.6. 進化度 11

8.1.7. 創新度 11

8.2. 灰度發佈的策略要素 11

8.2.1. 易於發佈到雲平臺 11

8.2.2. 設置用戶標識策略 12

8.2.3. 目標用戶選取策略 12

8.2.4. 提供數據反饋入口 12

8.2.5. 新版本回滾策略 12

8.2.6. 新版本公關運營支持 13

8.3. 灰度發佈的方案 13

8.3.1. 方案一:代碼邏輯控制 13

8.3.2. 方案二:Alibaba預發機制 14

8.3.3. 方案三:SET部署 14

8.3.3.1. 按照業務隔離部署 14

8.3.3.2. 按照用戶隔離部署 15

8.3.4. 方案四:動態路由 16

9. 採用灰度發佈的案例 16

9.1. 谷歌Gmail Labs 16

9.2. 騰訊QZone 17

9.3. 微信wechat 17

9.4. Ucloud高可用架構實踐 20

10. 參考資料 26

 

 

1. 前言

 互聯網產品有一個特點,就是不停的升級,升級,再升級。一般採用敏捷開發的團隊,基本上保持每週一次的發佈頻率,系統升級總是伴隨着風險,新舊版本兼容的風險,用戶使用習慣突然改變而造成用戶流失的風險,系統down機的風險.....爲了避免這些風險,很多產品都採用了灰度發佈的策略,其主要思想就是把影響集中到一個點,然後再發散到一個面,出現意外情況後很容易就回退。

很長時間,我們都一直在改進搜索引擎的排序算法,儘量讓最好的商品出現在 搜索結果的第一屏。我們嘗試了很多種算法,不斷調整各個排序因子所佔的比重。但是我們無法確信我們的排序結果能滿足所有用戶的需求。所以我們採用了灰度發 布,選取幾個一級商品類目,在其中應用不同的排序算法,比如在女裝類目中,我們把賣家信用所佔的比率調整到60%,在珠寶類目中,我們把銷售量所佔的比率 調整到60%.. 然後發佈出去,收集用戶反饋,最終選擇一種大部分人認爲好的算法。

     在傳統軟件產品發佈過程中(例如微軟的Windows 7的發佈過程中),一般都會經歷Pre-Alpha、Alpha、Beta、Release candidate(RC)、RTM、General availability or General Acceptance (GA)等幾個階段(參考Software release life cycle)。可以看出傳統軟件的發佈階段是從公司內部->外部小範圍測試>外部大範圍測試->正式發佈,涉及的用戶數也是逐步放量的過程。

   在互聯網產品的發佈過程中也較多采用此種發佈方式:產品的發佈過程不是一蹴而就,而是逐步擴大使用用戶的範圍,從公司內部用戶->忠誠度較高的種子 用戶->更大範圍的活躍用戶->所有用戶。在此過程中,產品團隊根據用戶的反饋及時完善產品相關功能。此種發佈方式,按照中國特色的叫法被冠 以”灰度發佈“、”灰度放量“、”分流發佈“。

  關於“灰度發佈”叫法的來源無從考察。只不過按照中國傳統哲學的說法來看,很符合中國人中庸的思維模式:自然界所有的事物總是以對稱、互補、和諧的形式存 在,例如黑與白、陰與陽、正與負、福與禍。在二元對立的元素間存在相互過渡的階段,所謂”禍兮福所倚,福兮禍所伏“。具體到黑與白,在非黑即白中間還有中 間色——灰色。於是出現了很多關於灰色的說法:灰盒測試,灰色管理(極力推薦 任正非:管理的灰度),灰色收入,灰色地帶等等。因此對於灰度發佈實際上就是從不發佈,然後逐漸過渡到正式發佈的一個過程。

2. 灰度發佈定義

灰度發佈是指在黑與白之間,能夠平滑過渡的一種發佈方式。AB test就是一種灰度發佈方式,讓一部分用戶繼續用A,一部分用戶開始用B,如果用戶對B沒有什麼反對意見,那麼逐步擴大範圍,把所有用戶都遷移到B上面 來。灰度發佈可以保證整體系統的穩定,在初始灰度的時候就可以發現、調整問題,以保證其影響度。

3. 灰度發佈作用

a.及早獲得用戶的意見反饋,完善產品功能,提升產品質量

b.讓用戶參與產品測試,加強與用戶互動

c.降低產品升級所影響的用戶範圍

d.規避一定的發佈風險

e.避免停服發佈給用戶帶來不便

f.具有容災能力

4. 灰度發佈步驟

  1)、定義目標

  2)、選定策略:包括用戶規模、發佈頻率、功能覆蓋度、回滾策略、運營策略、新舊系統部署策略等

  3)、篩選用戶:包括用戶特徵、用戶數量、用戶常用功能、用戶範圍等

  4)、部署系統:部署新系統、部署用戶行爲分析系統(web analytics)、設定分流規則、運營數據分析、分流規則微調

  5)、發佈總結:用戶行爲分析報告、用戶問卷調查、社會化媒體意見收集、形成產品功能改進列表

  6)、產品完善

  7)、新一輪灰度發佈或完整發布

 

5. 灰度發佈測試方法

     灰度發佈於互聯網公司常用A/B測試似乎比較類似,老外似乎並沒有所謂的灰度發佈的概念。按照wikipedia中對A/B測試的定義,A/B測試又叫:A/B/N Testing、Multivariate Testing,因此本質上灰度測試可以算作A/B測試的一種特例。只不過爲了術語上不至於等同搞混淆,談談自己理解的兩者的差異。

    灰度發佈是對某一產品的發佈逐步擴大使用羣體範圍,也叫灰度放量

    A/B測試重點是在幾種方案中選擇最優方案

   關於A/B測試可以參考這篇文章:A/B測試終極指南

 

6. 灰度發佈引擎

     對於一般的小系統並不需要單獨的灰度發佈引擎,可以參考A/B測試中做法,在頁面javascript或服務器端實現分流的規則即可。但對於大型的互聯網應用而言,單獨的用於管理用戶分流的發佈引擎就很有必要了。“錢掌櫃”分流發佈模式 提到了原來阿里軟件所使用的灰度發佈引擎,設計思路具有普遍性,可以供參考


下面是一個灰度發佈的架構示意圖:

 

7. 灰度發佈常見問題

7.1. 以偏概全

7.1.1. 問題特徵:

a選擇的樣本不具有代表性;

b樣本具有代表性,但選擇樣本用戶使用習慣並沒有涵蓋所有核心功能

7.1.2. 解決方案:

樣本選擇要多樣化,樣本的組合涵蓋大部分核心功能

7.2. 知識的詛咒

“知識的詛咒”的說法來自《粘住》中實驗,具體可以自己搜索一下。我們自己對於自己開發的產品極爲熟悉,於是乎想當然認爲用戶也應當能夠理解產品的設計思路、產品的功能使用。

7.2.1. 問題特徵:

a結果沒有量化手段;

b只依賴於用戶問卷調查;

c沒有web analytics系統;

d運營數據不全面,只有核心業務指標(例如交易量),沒有用戶體驗指標

e對結果分析,只選擇對發佈有利的信息,對其他視而不見

7.2.2. 解決方案:

a產品設計考慮產品量化指標

b結果分析依據量化指標而不是感覺

7.3. 發佈沒有回頭路可走

7.3.1. 問題特徵:

a新舊系統用戶使用習慣差異太大,沒有兼容原有功能

b新舊系統由於功能差異太大,無法並行運行,只能強制升級

c新系統只是實現了舊系統部分功能,用戶要完整使用所有功能,要在 在新舊系統切換

d新舊系統數據庫數據結構差異太大,無法並行運行

7.3.2. 解決方案:

    前期產品策劃重點考慮這些問題,包括:回滾方案、 新舊系統兼容方案、用戶體驗的一致性、用戶使用習慣的延續性、新舊系統數據模型兼容性

7.4. 用戶參與度不夠

7.4.1. 問題特徵:

a指望用戶自己去挖掘所有功能。對於一個產品,大部分用戶經常只使用部分功能,用戶大部分也很懶惰,不會主動去挖掘產品功能

b互動渠道單一

c陷入“知識的詛咒”,不尊重參與用戶意見

7.4.2. 解決方案:

a善待吃螃蟹的樣本用戶,包括給予參與測試的用戶小獎勵(例如MS給參與Win7測試用戶正版License)、給用戶冠以title

b通過郵件、論壇、社區、Blog、Twitter等新媒體與用戶形成互動

c提供產品功能嚮導。在hotmail最近的升級後的功能tip,gmail的tip都有類似的產品功能導向。在產品中會提示類似於:你知道嗎,xx還提供xx功能,通過它你可以xx 。

8. 讓產品具備灰度發佈能力

8.1. 灰度機制的七個維度

8.1.1. 需求度

用戶需求是產品核心,產品對需求的體現程度,就是企業被生態所需要的程度;

8.1.2. 速度

快速實現單點突破,角度、銳度尤其是速度,是產品在生態中存在發展的根本;

8.1.3. 靈活度

敏捷企業、快速迭代產品的關鍵是主動變化,主動變化比應變能力更重要;

8.1.4. 冗餘度

容忍失敗,允許適度浪費,鼓勵內部競爭內部試錯,不嘗試失敗就沒有成功;

8.1.5. 開放協作度

最大程度地擴展協作,互聯網很多惡性競爭都可以轉向協作型創新;

8.1.6. 進化度

構建生物型組織,讓企業組織本身在無控過程中擁有自進化、自組織能力;

8.1.7. 創新度

創新並非刻意爲之,而是充滿可能性、多樣性的生物型組織的必然產物。

 

8.2. 灰度發佈的策略要素

8.2.1. 易於發佈到雲平臺

    一般採用灰度發佈都是具有自主產品的平臺模式發佈,而不是在客戶服務器端進行發佈,具備自主研發產品和有一定硬件部署能力的企業可以考慮灰度發佈。

灰度發佈一般是基於雲的需要,如負載均衡,用戶隔離等機制。如大型的電商網站等都是採用的分佈式部署方式,利用負載均衡實現服務器分發,將用戶訪問分配到不同的地區服務器訪問,確保用戶訪問效率,提升用戶體驗。

之所以強調易於發佈,就是公司要具備自己可操作的服務器設備(雲服務設備),這樣可以實現在用戶不知情的情況下實現灰度發佈。即,在用戶無感知的情況下實現最優配置的測試部署,提升產品質量,實現產品快速迭代——頻繁發佈,實現具有意義的‘實時發佈’策略。

注:需要開通雲服務模式(有一定硬件和經濟實力的公司可以考慮)。

 

8.2.2. 設置用戶標識策略

用於區分用戶,輔助數據統計,保證灰度發佈過程中用戶體驗的連貫性(避免用戶在新舊版本中跳變,匿名Web應用比較容易有這個問題)。匿名Web應用可採用IP、Cookie等,需登錄的應用可直接採用應用的帳號體系。

8.2.3. 目標用戶選取策略

即選取哪些用戶先行體驗新版本,是強制升級還是讓用戶自主選擇等。可考慮的因素很多,包括但不限於地理位置、用戶終端特性(如分辨率、性能)、用戶自身特點(性別、年齡、忠誠度等)。對於細微修改(如文案、少量控件位置調整)可直接強制升級,對於類似新浪微博改版這樣的大型升級,應讓用戶自主選擇,最好能夠提供讓用戶自主回滾至舊版本的渠道。

對於客戶端應用,可以考慮類似Chrome的多channel升級策略,讓用戶自主選擇採用stable、beta、unstable channel的版本。在用戶有明確預期的情況下自行承擔試用風險。

8.2.4. 提供數據反饋入口

     用戶數據反饋:在得到用戶允許的前提下,收集用戶的使用新版本應用的情況。如客戶端性能、客戶端穩定性、使用次數、使用頻率等。用於與舊版本進行對比,決策後續是繼續擴大新版本投放範圍還是回滾。
     服務端數據反饋:新版本服務端性能、服務端穩定性等,作用與用戶數據反饋類似。

8.2.5. 新版本回滾策略

當新版本灰度發佈表現不佳時,應回滾至舊版本。對於純粹的Web應用而言,回滾相對簡單。主要難點在於用戶數據的無縫切換。對於客戶端應用,如果期待用戶自行卸載新版本另行安裝舊版本,成本和流失率都太高。可以考慮通過快速另行發佈新版本,利用升級來“回滾”,覆蓋上次灰度發佈的修改。

對於移動客戶端,新版本發佈成本較高,需要Appstore、Market審覈。本人沒有移動客戶端產品的經驗,不太確定移動客戶端產品如何處理灰度發佈及回滾。但儘量將客戶端打造成Web App,會更有利於升級和回滾。(不過蘋果對純Web App類的App有較強的限制,好像已經不允許在Appstore上發佈這類應用了?)

8.2.6. 新版本公關運營支持

對於改版級別的大型升級,需要配合公關運營支持,用於及時處理用戶在微博、博客等渠道給出的“顯式反饋”。對比通過隱式數據反饋得到的結論後,綜合考慮應對策略。

8.3. 灰度發佈的方案

灰度發佈一般有三種方式 nginx+lua,nginx根據cookie分流,nginx 根據權重來分配:
     nginx+lua根據來訪者ip地址區分,由於公司出口是一個ip地址,會出現訪問網站要麼都是老版,要麼都是新版,採用這種方式並不適合nginx 根據權重來分配,實現很簡單,也可以嘗試nginx根據cookie分流,灰度發佈基於用戶才更合理

 

Nginx+lua配置可以參考如下文章進行實踐:

利用nginx+lua+memcache實現灰度發佈

 

Nginx+Lua+Redis實例

 

nginx灰度方案---基於ip或者基於cookies

 

8.3.1. 方案一:代碼邏輯控制

實現:

在代碼中埋開關,做if-else判斷,對於需要灰度的機器,設置開關爲on,否則爲off。每次版本發佈都是有兩個版本。

優點

· 快速回滾,不需要重新發布和重啓系統。

缺點

· 對代碼有傾入性。

· 分支邏輯,帶來複雜性。

這種方式筆者曾經應用過,就是在阿里的時候把商品的數據庫從Oracle切換到MySql,使用了一個狀態變量進行控制。從而打到平滑遷移的效果。

 

8.3.2. 方案二:Alibaba預發機制

    其實這個不是真正意義上的灰度。因爲這個預先發布機器是內部IP,沒有對外服務的。需要綁定域名進行驗證。但是數據是完全的線上。所以本質上是灰度 某些特定用戶(可以訪問灰度機器的用戶,內部測試用戶)的一種簡單做法。其實API這邊也有類似的做法,就是我們的Gamma環境,而且我們還提供了 Gamma機器的域名,方便外部合作用戶配合測試。

優點

· 簡單

缺點

· 浪費一臺機器(這個可以預先發布完成之後投入正式環境,預發佈的時候從nginx摘除,不過需要運維支持。)

· 不夠靈活

· 只能針對接入層機器,IDL服務灰度需要另外考慮。

8.3.3. 方案三:SET部署

8.3.3.1. 按照業務隔離部署

    比如現在API Container的做法,部署的粒度可以到API級別,前端根據nginx進行轉發。比如:

· 微購物 API Container: api.weigou.qq.com

· 拍拍 API Container:api.paipai.com

· 易迅 API Container: api.yixun.com

· 網購 API Container:api.buy.qq.com

    上面是大業務級別的隔離部署。還可以進一步細化到模塊級別,比如虛擬服務電商的API,是掛在拍拍下面的一個子業務模塊,但是由於他們接入微信之 後,訪問量大增,爲了避免影響拍拍其他業務,也爲了避免受其他業務影響,API這裏是給他們單獨部署了兩臺機器,nginx配置一下就可以將針對虛擬的 API訪問引流過來了:

虛擬API Container:http://api.paipai.com/v2/virbiz

這樣,我們在發佈一個版本的時候,可以先選擇業務量最小的易迅進行發佈,觀察沒有問題再全量其他平臺。

8.3.3.2. 按照用戶隔離部署

    這個對於開放平臺來說不是很適合,不過對於SNS這種應用場景就很合適了。比如QQ系統,按照用戶號碼段分爲若干個set,每個set包含連續1億 個號碼的用戶。假設現在最新的QQ號碼接近10億,則總共有10個set(Set 1到Set 10)。這樣每次可以選擇其中一個SET進行發佈,而且高位QQ往往是不是很重要的用戶,所以會先發布SET10。

優點

· 隔離部署,各個業務線影響最小。自動支持灰度發佈。

缺點

· 灰度的粒度取決於隔離部署的粒度,一般會偏大。

· 相對於集中部署比較浪費機器。

· 各個業務線版本可能不一致,不利於統一管理。

· 有一定的實現和部署成本

 

 

8.3.4. 方案四:動態路由

   採用一個可以靈活配置的灰度策略,影響Load Balance的行爲,讓其根據灰度策略,返回灰度服務的IP和端口。

適合與後臺IDL的服務灰度。

優點

· 靈活,可控。

缺點

· 現在的配置中心和L5本身沒有考慮指定路由策略,且不具有擴展性,需要在其外邊開發。

· API的元數據來源比較分散,目前 API和IDL元數據,API等級和頻率限制 分佈在不同的數據源,現在需要增加一個 灰度路由 數據源。

 

 

9. 採用灰度發佈的案例

9.1. 谷歌Gmail Labs

Gmail Labs是一個新特性櫥窗,用戶可以自己選擇一些未正式發佈的新特性進行體驗,不喜歡可以關閉,在這個過程中,吃了螃蟹,也當了Google的小白鼠。

這個做法比傳統的灰度要高明很多,更加尊重用戶:

1、它沒有強加用戶,用戶是否願意當小白鼠完全自願

2、新特性不是打包在一起的一個大版本,可以選擇某幾個喜歡的螃蟹嚐嚐

3、螃蟹不好吃可以扔掉,不用硬吃進肚子裏引發腸胃炎

當然這些好處也是有代價的:

1、要開發一個labs平臺實現新特性上架、獨立嘗試的功能,這可能要改動Gmail的前後臺架構

2、新特性要按照一定規範來寫,才能發佈到這個平臺上,可能會增加一些工作量

3、小白鼠用戶增多之後,對系統的壓力可能會有一定提升,因爲每一位用戶調用的界面都不一樣了

既然Gmail Labs能夠順利發佈,那麼說明對Google來說,以上這些問題都不算問題。另外,現在展示的新特性,都註明了開發者的名字,那麼,Gmail Labs可能會開放這個平臺讓外部開發者也能提交特性?這倒是很open的一種開發模式,非常適合Google的web app產品線。

9.2. 騰訊QZone

QZone是另外一個採用灰度發佈的例子。大家都知道,QZone的改進是巨大的,從以前慢悠悠的老爺爺變成了一個充滿青春活力的小夥子。其中經歷了大小無數次的發佈,他們的發佈也都是採用了灰度發佈的策略,用戶數據的升級並不是大 面積的一次性升級,而是通過一個用戶升級標誌服務器,如果用戶數據沒有升級,後臺會把此用戶的數據逐步遷移到新版本上,然後將升級標誌位置1,升級過程 中,用戶仍然可以訪問舊的數據,升級完成後的訪問都將轉發給新的版本。

QQ的很多產品發佈都採用灰度發佈,有些是抽取部分QQ號段升級成新系統,然後根據用戶反饋再大範圍升級。

9.3. 微信wechat

灰度、灰度、再灰度

    在變更後的部署方式上,微信在一些規則會限定不能一次把所有的邏輯變更上去,每一次變更一小點觀察到每一個環節沒有問題的時候,才能佈局到全網上去。微信後臺每一天可以支撐超過20個後臺變更,在業界來說,通常做到5個已經是比較快了,但是微信可以做到快4倍。


騰訊內部的上線系統

而所謂灰度發佈,是指在黑與白之間,能夠平滑過渡的一種發佈方式。AB test就是一種灰度發佈方式,讓一部用戶繼續用A,一部分用戶開始用B,如果用戶對B沒有什麼反對意見,那麼逐步擴大範圍,把所有用戶都遷移到B上面 來。灰度發佈可以保證整體系統的穩定,在初始灰度的時候就可以發現、調整問題,以保證其影響度。(在騰訊,灰度發佈是最常採用的發佈方式之一)

孫子兵法:古之所謂善戰者,勝於易勝者也

常識上,解決一個複雜問題的時候,會用高明的技巧解決複雜的問題,這個不是微信團隊的目標,他們追求的要做到讓所有問題很自然和簡單的方式解決掉。在周顥看來,微信架構的技術複雜點在四個要點:協議、容災、輕重、監控。

微信架構

· 協議。手機終端跟後臺服務器之間的交互協議,這個協議的設計是整個系統的骨架,在這一點做好設計可以使得系統的複雜度大大降低。

· 容災。當系統出現了若干服務器或若干支架(宕機的時候),仍然需要讓系統儘可能的提供正常的服務。

· 輕重。如何在系統架構中分佈功能,在哪一個點實現哪一個功能,代表系統中間的功能配置。

· 監控。爲系統提供一個智能儀表盤。

在協議設計上,移動互聯網和常規互聯網有很大的區別。首先有CMWAP和CMNET的不同,在中國現在有相當多的手機用戶使用WMWAP連接,還有 就是在線和離線的概念,當QQ下線的時候叫離線,當你登錄的時候叫在線。但是在移動互聯網這兩個概念比較模糊。從微信的設計中,不管在線還是離線系統表現 都應該是一致的。還有一個是連接不穩定的問題,由於手機信號強弱的變化,當時信號很好,5秒鐘走到信號不好的地區,連接就必須斷掉。這個中間帶來不穩定的 因素爲協議設計帶來較大困難。此外就是資費敏感的問題,因爲移動互聯網是按照流量計費的,這個計費會使得在協議設計中如何最小化傳輸的問題。最後就是高延 遲的問題。

對此,業界標準的解決方案:Messaging And Presence Protocol:1)XMPP;2)SIP/SIMPLE。它的優點是簡單,大量開源實現。而缺點同樣明顯:1)流量大:狀態初始化;2)消息不可靠。

微信在系統中做了特殊設計,叫SYNC協議,是參考Activesyec來實現的。特點首先是基於狀態同步的協 議,假定說收發消息本身是狀態同步的過程,假定終端和服務器狀態已經被遲了,在服務器端收到最新的消息,當客戶端、終端向服務器對接的時候,收取消息的過 程實際上可以簡單的歸納爲狀態同步的過程,收消息以及收取你好友狀態更新都是相同的。在這樣的模式之下,我們會也許會把交互的模式統一化,只需要推送一個 消息到達的通知就可以了,終端收到這個通知就來做消息的同步。在這樣的簡化模式之下,安卓和塞班都可以得到統一。這樣的系統本身的實現是更爲複雜的,但是 獲得很多額外的好處。

讓剩下系統實現的部分更加簡單,簡化了交互模式,狀態同步可以通過狀態同步的差值獲得最小的數據變更,通過增量的傳輸得到最小的數據傳輸量。通過這 樣的協議設計,微信可以確保消息是穩定到達的,而且是按序到達。引用一句俗話:比它炫的沒它簡單,比它簡單的沒它快,沒誰比他更快,哪怕在GPRS下,微 信也能把進度條輕易推到底。

9.4. Ucloud高可用架構實踐

DevOps成都站|架構與運維峯會活動總結地址:

http://mp.weixin.qq.com/s?__biz=MjM5NDE0MjI4MA==&mid=2656298704&idx=2&sn=68d5d42a9c26640a21eebd3253ca81c3&scene=1&srcid=0519IBq6Q2k77kYAQmXuofuV&from=groupmessage&isappinstalled=0#wechat_redirect

此處主要截取賬戶計費系統架構演進過程的六個階段進行整理。

服務架構的演進過程


UCloud服務架構的演進主要經歷了以下六個階段:

a.單體模式;

b.具有灰度發佈能力;

c.前後端分離;

d.服務化改造;

e.按SET部署;

f.分機房按SET部署,按SET進行跨機房熱備容災。

 

1. 單體模式架構上線業務系統

UCloud服務初期上線時的架構主要分三部分:

· 

PHP Web Conosle,負責所有前端展現交互、後臺服務間邏輯組裝;

· 

· 

平臺類服務,賬戶、計費、監控、名字服務等公共服務;

· 

· 

各業務系統分數據中心後臺服務的接入層。

· 

PHP Web Console、業務系統分數據中心的服務、平臺類服務組合上線,Web Console 通過Protobuf與所有後端服務進行通信。

 

2. 具備灰度發佈能力

要解決前面面臨的問題,我們首先需要支持Web層灰度發佈包含以下的灰度方式:

· 

無用戶態特性按照 單IP -> IP段(地區) -> 到IP取模逐步灰度控制影響範圍;

· 

· 

有用戶態特性按照 單內部用戶(開發賬號) -> 內部測試賬號 -> 用戶分級逐步灰度發佈控制影響範圍。

· 

 

3. 前後端分離

· 

開發API Gateway 層用來管理後端 API 註冊和管理、權限驗證管理、流量控制;

· 

· 

開發API層,解決前臺交互層,需要整合跨系統邏輯調用問題,前端只專注產品交互和用戶體驗;

· 

· 

開發統一的單點登陸Token,系統方便前端實現跨域API調用讓前端代碼可以完全靜態化。

· 

在此階段,完成前端展現可以獨立控制發佈,徹底實現了前後端解耦,API協議保證向前兼容,Web端可以隨意重構交互優化前端架構,實現了跨域獨立部署,獨立的灰度策略互相之間不受影響,極大的提高了前端團隊開發效率和穩定性。

 

4. 服務化改造

 對業務端API開發效率優化:

· 

按照業務模塊化,所有業務API由後臺產品研發部門獨立部署發佈上線;

· 

· 

抽象通用平臺類特性例如:子賬號特性,權限體系,計費等特性抽象公共能力讓業務端在API中組裝。

· 

總體目標:讓業務API開發效率提升並單獨部署維護,提高產品特性的研發迭代效率並提高穩定性。

 

5. 按SET部署


基礎架構優化完畢,各個業務系統單獨部署發佈,開始對系統進行容量和容災方面的考慮,從部分平臺類系統開始考慮按SET部署架構測底解決容量和容災問題,每個SET只服務一部分用戶,保證遇到物理服務器宕機等故障情況下隻影響部分用戶或業務。

例如圖上所示, SET 1 服務1 ~ 服務50000000 用戶,SET 2 服務50000001 ~ 100000000 的用戶,一個SET 出現問題隻影響一個部分用戶,不同的業務根據自身情況進行SET切分,規模大小也視情況而定,按SET部署後合理的劃分方式下不同SET之間數據還可以互相遷移,來平衡搞負載或高容量的SET,極大的提高了可運維性。

 

6. 分機房部署SET


按SET部署架構改造完畢後還沒有達到最理想的狀態,如果所有服務部署在單機房還是可能會出現問題,機房整體出現斷電、斷網等故障還是會出現大面積影響。

· 

對SET架構進行分機房部署,讓不同的用戶運行在不同的機房中,這依賴一些基礎設施比如跨機房光線專線。

發佈了31 篇原創文章 · 獲贊 12 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章