1
本文作者: 硬創(chuàng)觀察 | 2016-06-14 00:58 |
2016年6月12日,佛羅里達州奧蘭多一家名為“脈搏”(Pulse)的同志酒吧發(fā)生的一起大規(guī)模槍擊案,共造成約50人死亡,53人受傷。這是美國歷史上最嚴重的大規(guī)模槍擊事件。初步認定行兇者為29歲的美國公民奧馬爾·馬?。∣mar Mateen),其父母為阿富汗移民。事后,F(xiàn)acebook在宣布啟用“Safety Check”(安全確認)功能,這也是Safety Check功能首次在美國本土啟用。
什么是Safety Check功能?
Facebook的“Safety Check”是一項幫助大家在自然災害或重大突發(fā)事件發(fā)生后向親友報平安的功能。這一功能起始于2011年的日本大地震,F(xiàn)acebook日本的員工由此開發(fā)一款產(chǎn)品Disaster Message Board(災難信息留言板),讓人們在災難發(fā)生時能快速獲知自己的朋友家人是否安全,演變成今天的 Safety Check。
在Facebook在受災地區(qū)啟動Safety Check后,如果你處在受災地區(qū),會收到Facebook的一條消息,問你“Are you safe”(你是否安全?)如果你是安全的,可以選擇“I'm safe”按鈕,這條消息就會發(fā)到News Feed里,你的朋友會在提醒里看到這條消息。如果你有朋友在受災區(qū),點開提醒里的消息,就會進入到Safety Check的書簽一欄,這里顯示你所有在受災區(qū)朋友的狀況,綠色勾表示安全,灰色勾表示可能處于危險之中。同樣的,你的朋友確認你安全后也可以幫你標記。
Safety Check于2014年10月正式發(fā)布,一開始只定位于自然災害,一直到2015年11月,發(fā)生巴黎恐怖襲擊事件(130人死亡,368人受傷,法國二戰(zhàn)以來最大的一次傷亡事件),這是Facebook第一次就社會重大暴力事件啟動Safety Check,并為Facebook贏得了“反應迅速”的稱贊。
這一功能最引人注目的一點是:信息傳遞的即時性。一旦啟動Safety Check功能,F(xiàn)acebook就能通過算法在5分鐘內(nèi)找到大多數(shù)在災難發(fā)生地的用戶,以至于人們感覺它是即時發(fā)生沒有延遲的。那么這一功能是如何實現(xiàn)的?雷鋒網(wǎng)發(fā)現(xiàn)了一篇在Highscalability上的文章,講述了這一功能的背后故事,雷鋒網(wǎng)選編如下:
《當災難發(fā)生時,F(xiàn)acebook是如何在5分鐘內(nèi)告訴你的朋友你是否安全?》
當有災難發(fā)生時,人們會迫切需要知道自己所愛之人是否安全。無論是9.11還是1989年的的洛馬普列塔地震,都讓我深深地有這樣的感覺。
地震轉(zhuǎn)瞬即來。當我們確認建筑不會崩塌后,第一反應會想去確認親人的安全,但在這時想要撥出電話基本是不可能的。電話在一瞬間從全國各地涌入灣區(qū),信息堵塞。我們只能緊張地看著電視里播報的災難消息,滿心焦灼但無能為力。
經(jīng)過了四分之一個世紀后,這種情況是否有所改變?
Facebook的“Safety Check”功能做到了這一點。當有災難發(fā)生時,他們會給在災難區(qū)域的人們發(fā)送一條推送以確認安全,當確認你的安全后Facebook會立即告訴你的朋友:“別擔心,他還安全?!?/p>
這一功能由Facebook工程師Brian Sa在2011年的神戶大地震后激發(fā)的靈感。地震發(fā)生后,Brain在Facebook的首頁放了一個各種幫助信息的Banner,但隨后他進一步去想開發(fā)一個新功能,以便更好幫助受災者,這便是“Safety Check”的雛形。
Brain是這么認為的:
解決那些在某種程度上非你(Facebook)不可的現(xiàn)實世界的問題。打破常規(guī),想想你和你的公司能發(fā)揮多獨特的作用。
為什么只有Facebook能創(chuàng)造Safety Check?
Facebook不僅擁有你所希望的資源,更是一家會讓員工去開發(fā)Safety Check這種瘋狂舉動的公司。此外,F(xiàn)acebook擁有超過15億用戶,按“六度空間”理論,人與人之間的間隔度僅為4.74,并且Facebook的用戶都是社交狂人,能實現(xiàn)信息的即時傳遞。
那么,F(xiàn)acebook開發(fā)“Safety Check”又是基于什么樣的想法呢?Peter和Brian是這么認為的:
你可以把Facebook想象成一鍋可以復制的“原始湯”,像病毒營銷這樣的案例很容易隨著時間在數(shù)十億的平臺瘋狂發(fā)展,取得(超過)1000倍的傳播效果。
如ReadWriterWeb、支持同性婚姻的彩虹濾鏡等Facebook上的案例讓他們有了“在災難期間,幫助他人更好確保朋友知道自己安全”的想法:在災難期間,人們可以更新自己的狀態(tài)表示自己“安全”。
但是,這并不是一個讓別人知道自己還“安全”的最佳解決方案,因為:
你需要:1.告訴朋友們你還安全;2.你朋友得到信息確定你還安全
首先,不是你所有的朋友都能看到這個更新
其次,用戶沒有辦法得到所有處在災難中的朋友的名單
Brain想用更結(jié)構(gòu)化的方法來再Safety Check解決這一問題。那么,它是如何運行的?
如果你處在受災區(qū)域,F(xiàn)acebook會發(fā)給你一條推送,詢問你是否安全;
如果你還OK,點擊“我很安全”按鈕,確定自己是安全的;
你所有的朋友都會被提醒你還安全;
你的朋友們也可以看見一個所有在受災區(qū)域朋友的名單。
所以問題來了:你是如何建立一個用戶是否在災難發(fā)生地?一個容易想到的解決方案是構(gòu)建地理索引(GeoIndex)的確是,但它有很多不足:
人們在不斷移動的,數(shù)據(jù)不能實時更新;
為十五億用戶建立地理索引太過龐大,Brain小組并沒有足夠的資源去支撐它——記住,他們只是Facebook這個大公司里試圖實現(xiàn)這個解決方案的小團隊;
而且:比起考慮如何保留一個平時幾乎用不到的的數(shù)據(jù)通道,解決方案必須考慮事件的突發(fā)性,即:一旦突發(fā)事件發(fā)生時,這個功能是動態(tài)即時可用的。最后解決方案綜合了社交圖譜的輪廓及屬性:
當災難發(fā)生時(例如尼泊爾地震),Safety Check會檢查每個獨立信息流載入過程中被觸發(fā)“鉤子”;
當用戶檢查他們的信息流時,“鉤子”就會生效。如果用戶載入信息時不在災難發(fā)生地(尼泊爾)那么任何事情都不會發(fā)生;
但當有人處在尼泊爾又去查詢了他的信息流,Duang。
接下來Safety Check會檢查用戶的所有好友,如果他們在同一個區(qū)域,Safety Check就會立即發(fā)送一個推送通知,詢問他們是否還安全。
這個過程會不斷重復,對于每一個被確認在災難地域的人,最主要的工作就是去檢查他們的好友,然后發(fā)送通知。
在實踐過程中,這個方案是非常有效的。算法可以很快地尋找到人,以至于讓人覺得它是即時發(fā)生,沒有延遲。例如說,一群人在同一個房間的人會在同一時間收到他們的提示信息。這是如何做到的?
秘訣在于:
Facebook上人與人鏈接的圖譜是是密集且有聯(lián)系的。在Facebook上,十五億用戶任意兩名之間的間隔度只有4.47而不是6,平均來講,只要5步就能在Facebook上找到任何人。一旦系統(tǒng)在推送消息的時候隨機挑選了一個更活躍而且且朋友數(shù)更多的用戶,這樣就過濾掉了很多無效的用戶,不需要再進行數(shù)十億的無用計算了。
但另一個問題又出現(xiàn)了:Safety Check能夠自由地使用并行服務器去處理不同的用戶請求,包括用戶的好友。這個時候,分布式解決方案可能會出現(xiàn)這樣的問題:
兩臺在不同的數(shù)據(jù)中心機器檢測到同一個用戶,這意味著遍歷了分離度邊緣后,有個用戶會收到兩條通知。
設身處地想象一下:如果戶一下子收到多個確認他平安的通知,這會反而會增加用戶的焦慮感。
解決方法是:
用一個數(shù)據(jù)庫來儲存狀態(tài),這樣就只有一臺機器被用來檢查用戶了。
在尼泊爾地震中:
不到五分鐘就有三百萬人收到更新狀態(tài)的請求,超過1億在尼泊爾的人得到安全確認。
五分鐘之內(nèi),三分之二的FACEBOOK用戶被系統(tǒng)遍歷了一回。
在經(jīng)歷了一些麻煩后,Safety Check發(fā)布了第一個版本。
但由于Facebook系統(tǒng)本身的復雜性,這個功能被暫時隱藏了,只有當發(fā)生緊急情況時,它才得以被啟用。例如剛剛發(fā)生的奧蘭多槍擊案。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。