所謂放量其實就是A/B測試,不過在咱們組內部喜歡叫「放量」。關於放量其實有不少種規則:時間、地區、用戶區間、隨機放量等。測試
放量只有在大流量的C端項目中才有這個需求,流量小的產品或者公司內部使用的管理系統一般不須要作放量。動畫
這裏衍生出一個問題「爲何大流量C端項目須要作放量?」。網站
以某門戶網站爲例,假設去年日均PV是二個億,一年的總收入是30億人民幣。code
那麼能夠推算出,若是不作任何改動的狀況下,今年的收入和去年比不會有太多的波動;可是部門給規定的目標一般要高於去年的收入,因此產品須要作一些事情來增長收入。cdn
通過一系列調研與討論,最終決定把圖中紅圈的位置作一個改動,但願這個位置能夠獲得更好的商業化效果,提高一些收入。blog
但咱們並不知道這個改動的結果是正面的仍是負面的,若是這個改動上線以後致使了負面效果(用戶很討厭這個改動,瘋狂罵咱們),不但沒增長收入反而下降了收入,這個後果是很是嚴重的。開發
因此咱們一般會作一件事就是「放量」,先小規模放10%的量看看效果如何。產品
這裏的放量一般又根據不一樣的狀況分好幾種:it
地域放量與時間放量很容易理解,這裏主要解釋下什麼是按用戶區間放量。io
假設咱們的產品總共有10億個用戶,放量10%,那麼咱們能夠選擇一個區間,是放給0~1億
這個區間的用戶仍是放給1億~2億
這個區間,這個就是用戶區間。
固然,這個名字是我隨便起的,只是爲了朗朗上口。
這裏你可能會有一個疑問,爲何要按照用戶區間放10%的量,直接隨機放10%的量不行麼?
答案是「也能夠」,但隨機放量沒法知足下列需求。
咱們仍是舉個例子,假設圖1
的紅圈位置通過一系列討論,如今有兩個升級方案,但不肯定哪一個效果好,最終決定將這兩個版本都開發出來,而後對比下哪一個效果好就使用哪一個版本。
這時候隨機放量就沒法知足需求了,可是按用戶區間放量能夠知足需求。
咱們能夠將方案一放量給0~1億
這個區間的用戶,把方案二投放給1億~2億
區間的用戶。
任何產品都會爲用戶分配一個ID,假設爲用戶分配的ID是一個散列值MD5,那麼當用戶訪問咱們的產品時,咱們就能夠根據用戶的ID來分辨該用戶會命中哪一個版本(版本一?版本二?或者是未命中?)。
具體實現方案是,取用戶ID的後三位(固然,後兩位也行),而後用這個數除以三位的最大值,獲得一個百分比。舉個例子:
假設個人用戶ID爲4b3ab369fa40ca4faae404b2f8332b65
,這是一個MD5值,咱們取出後三位b65
,三位16進制的最大數轉換成10進製爲16^3 = 4096
,因此咱們將b65
轉換成10進制後在除以4096
,最終得出的數字爲:(b65 = 2917) / 4096 = 0.71
。
上述例子將「方案一」投放給0~1億
這個區間的人,將「方案二」投放給1億~2億
這個區間的人,很顯然,當我訪問頁面時,紅圈位置會發現個人數值是0.71
,不在0~0.1
這個區間,也不在0.1~0.2
這個區間,因此我沒有命中這一次的小規模放量測試,個人頁面上該位置顯示的是現有的穩定版。
這樣實現的好處是:
相同的放量策略和實現方式能夠放到服務端,也能夠放到客戶端;具體如何放量須要「具體狀況,具體分析」。