cookieOptions = {...}; ‧ 奧蘭多槍擊案發生後讓你五分鐘報平安的 Safety Check 是怎麼實現的? - 3S Market「全球智慧科技應用」市場資訊網

3S MARKET

3S MARKET
2016年6月20日 星期一


2016612日,佛羅里達州奧蘭多一家名為「脈搏」(Pulse)的同志酒吧發生的一起大規模槍擊案,共造成約50人死亡,53人受傷。這是美國歷史上最嚴重的大規模槍擊事件。

初步認定行凶者為29歲的美國公民奧馬爾·馬丁(Omar Mateen),其父母為阿富汗移民。事後,Facebook在宣佈啓用「Safety Check(安全確認)功能,這也是Safety Check功能首次在美國本土啓用。

什麼是Safety Check功能?

Facebook的「Safety Check」是一項幫助大家在自然災害或重大突發事件發生後,向親友報平安的功能。這一功能起始於2011年的日本大地震,Facebook日本的員工由此開發一款產品Disaster Message Board(災難訊息留言板),讓人們在災難發生時能快速獲知,自己的朋友家人是否安全,演變成今天的 Safety Check 
 

Facebook在受災地區啓動Safety Check後,如果你處在受災地區,會收到Facebook的一條消息,問你「Are you safe」(你是否安全?)如果你是安全的,可以選擇「I'm safe」按鈕,這條消息就會發到News Feed裡,你的朋友會在提醒裡看到這條消息。

如果你有朋友在受災區,點開提醒裡的消息,就會進入到Safety Check的書簽一欄,這裡顯示你所有在受災區朋友的狀況,綠色勾表示安全,灰色勾表示可能處於危險之中。同樣的,你的朋友確認你安全後也可以幫你標記。
  
Safety Check201410月正式發佈,一開始只定位於自然災害,一直到201511月,發生巴黎恐怖襲擊事件(130人死亡,368人受傷,法國二戰以來最大的一次傷亡事件),這是Facebook第一次就社會重大暴力事件啓動Safety Check,並為Facebook贏得了「反應迅速」的稱讚。


這一功能最引人注目的一點是:信息傳遞的即時性。一旦啓動Safety Check功能,Facebook就能通過算法在5分鐘內,找到大多數在災難發生地的用戶,以至於人們感覺它是即時發生沒有延遲的。那麼這一功能是如何實現的?小編發現了一篇在High scalability上的文章,講述了這一功能的背後故事,選編如下:


《當災難發生時,Facebook是如何在5分鐘內告訴你的朋友你是否安全?
當有災難發生時,人們會迫切需要知道自己所愛之人是否安全。無論是9.11還是1989年的的洛馬普列塔地震,都讓我深深地有這樣的感覺。

地震轉瞬即來。當我們確認建築不會崩塌後,第一反應會想去確認親人的安全,但在這時想要撥出電話基本是不可能的。電話在一瞬間從全國各地湧入灣區,訊息堵塞。我們只能緊張地看著電視裡播報的災難消息,滿心焦灼但無能為力。

經過了四分之一個世紀後,這種情況是否有所改變?

Facebook的「Safety Check」功能做到了這一點。當有災難發生時,他們會給在災難區域的人們發送一條推送以確認安全,當確認你的安全後,Facebook會立即告訴你的朋友:「別擔心,他還安全。」


這一功能由Facebook工程師Brian Sa,在2011年的神戶大地震後激發的靈感。地震發生後,BrainFacebook的首頁放了一個各種幫助訊息的Banner,但隨後他進一步去想開發一個新功能,以便更好幫助受災者,這便是「Safety Check」的雛形。


Brain
是這麼認為的:

解決那些在某種程度上,非你(Facebook)不可的現實世界的問題。打破常規,想想你和你的公司能發揮多獨特的作用。

為什麼只有Facebook能創造Safety Check
Facebook不僅擁有你所希望的資源,更是一家會讓員工去開發Safety Check這種瘋狂舉動的公司。此外,Facebook擁有超過15億用戶,按「六度空間」理論,人與人之間的間隔度僅為4.74,並且Facebook的用戶都是社交狂人,能實現訊息的即時傳遞。

那麼,Facebook開發「Safety Check」又是基於什麼樣的想法呢?PeterBrian是這麼認為的:


你可以把Facebook想像成一鍋可以複製的「原始湯」,像病毒營銷這樣的案例很容易隨著時間在數十億的平台瘋狂發展,取得(超過)1000倍的傳播效果。

 

ReadWriterWeb、支持同性婚姻的彩虹濾鏡等Facebook上的案例,讓他們有了「在災難期間,幫助他人更好確保朋友知道自己安全」的想法:在災難期間,人們可以更新自己的狀態表示自己「安全」

但是,這並不是一個讓別人知道自己還「安全」的最佳解決方案,因為:

你需要:1.告訴朋友們你還安全;2.你朋友得到信息確定你還安全
首先,不是你所有的朋友都能看到這個更新

其次,用戶沒有辦法得到所有處在災難中的朋友的名單
Brain想用更結構化的方法來再Safety Check解決這一問題。那麼,它是如何運行的?

如果你處在受災區域,Facebook會發給你一條推送,詢問你是否安全;

如果你還OK,點擊「我很安全」按鈕,確定自己是安全的;

你所有的朋友都會被提醒你還安全;


你的朋友們也可以看見一個所有在受災區域朋友的名單。

 

所以問題來了:你是如何建立一個用戶是否在災難發生地?一個容易想到的解決方案是構建地理索引(GeoIndex)的確是,但它有很多不足:

人們在不斷移動的,數據不能實時更新;

為十五億用戶建立地理索引太過龐大,Brain小組並沒有足夠的資源去支撐它——記住,他們只是Facebook這個大公司里試圖實現這個解決方案的小團隊;

而且:比起考慮如何保留一個平時幾乎用不到的的數據通道,解決方案必須考慮事件的突發性,即:一旦突發事件發生時,這個功能是動態即時可用的。最後解決方案綜合了社交圖譜的輪廓及屬

當災難發生時(例如尼泊爾地震),Safety Check會檢查每個獨立訊息流載入過程中被觸發「鈎子」;
當用戶檢查他們的訊息流時,「鈎子」就會生效。如果用戶載入訊息時不在災難發生地(尼泊爾)那麼任何事情都不會發生;

但當有人處在尼泊爾又去查詢了他的訊息流,Duang

接下來Safety Check會檢查用戶的所有好友,如果他們在同一個區域,Safety Check就會立即發送一個推送通知,詢問他們是否還安全。


這個過程會不斷重復,對於每一個被確認在災難地域的人,最主要的工作就是去檢查他們的好友,然後發送通知。

 

在實踐過程中,這個方案是非常有效的。算法可以很快地尋找到人,以至於讓人覺得它是即時發生,沒有延遲。例如說,一群人在同一個房間的人會在同一時間收到他們的提示訊息。這是如何做到的?
秘訣在於:

Facebook上人與人鏈接的圖譜是是密集且有聯繫的。在Facebook上,十五億用戶任意兩名之間的間隔度只有4.47而不是6,平均來講,只要5步就能在Facebook上找到任何人。一旦系統在推送消息的時候隨機挑選了一個更活躍而且且朋友數更多的用戶,這樣就過濾掉了很多無效的用戶,不需要再進行數十億的無用計算了。

但另一個問題又出現了:Safety Check能夠自由地使用並行伺服器去處理不同的用戶請求,包括用戶的好友。這個時候,分布式解決方案可能會出現這樣的問題:

兩台在不同的數據中心機器檢測到同一個用戶,這意味著遍歷了分離度邊緣後,有個用戶會收到兩條通知。

設身處地想象一下:如果戶一下子收到多個確認他平安的通知,這會反而會增加用戶的焦慮感。
解決方法是:

用一個數據庫來儲存狀態,這樣就只有一台機器被用來檢查用戶了。

在尼泊爾地震中:


不到五分鐘就有三百萬人收到更新狀態的請求,超過1億在尼泊爾的人得到安全確認。


五分鐘之內,三分之二的FACEBOOK用戶被系統遍歷了一回

在經歷了一些麻煩後,Safety Check發佈了第一個版本。


但由於Facebook系統本身的複雜性,這個功能被暫時隱藏了,只有當發生緊急情況時,它才得以被啓用。例如剛剛發生的奧蘭多槍擊案



                                                                                                                                                                                                                            


0 comments: