Check是怎么实现的? 奥兰多枪击案发生后让你五分钟报平安的Safety (check是什么意思)
2016年6月12日,佛罗里达州奥兰多一家名为“脉搏”(Pulse)的同志酒吧发生的一起大规模枪击案,共造成约50人死亡,53人受伤。这是美国历史上最严重的大规模枪击事件。初步认定行凶者为29岁的美国公民奥马尔·马丁(Omar Mateen),其父母为阿富汗移民。事后,Facebook在宣布启 用“Safety Check”(安全确认)功能,这也是Safety Check功能首次在美国本土启用。
什么是Safety Check功能?
Facebook的“Safety Check”是一项帮助大家在自然灾害或重大突发事件发生后向亲友报平安的功能。这一功能起始于2011年的日本大地震,Facebook日本的员工由此开发一款产品Disaster Message Board(灾难信息留言板),让人们在灾难发生时能快速获知自己的朋友家人是否安全,演变成今天的Safety Check。
如果你处在受灾地区,会收到Facebook的一条消息,问你“Are you safe”(你是否安全?) 如果你是安全的,可以选择“I'm safe”按钮,这条消息就会发到News Feed里,你的朋友会在提醒里看到这条消息。 如果你有朋友在受灾区,点开提醒里的消息,就会进入到Safety Check的书签一栏,这里显示你所有在受灾区朋友的状况,绿色勾表示安全,灰色勾表示可能处于危险之中。同样的,你的朋友确认你安全后也可以帮你标记。
Safety Check于2014年10月正式发布,一开始只定位于自然灾害,一直到2015年11月,发生巴黎恐怖袭击事件(130人死亡,368人受伤,法国二战以来最大的一次伤亡事件),这是Facebook第一次就社会重大暴力事件启动Safety Check,并为Facebook赢得了“反应迅速”的称赞。
这一功能最引人注目的一点是:信息传递的即时性。一旦启动Safety Check功能,Facebook就能通过算法在 5分钟内找到大多数在灾难发生地的用户,以至于人们感觉它是即时发生没有延迟的。 那么这一功能是如何实现的?雷锋网发现了一篇在Highscalability上的文章,讲述了这一功能的背后故事,雷锋网选编如下:
《当灾难发生时,Facebook是如何在5分钟内告诉你的朋友你是否安全?》
当有灾难发生时,人们会迫切需要知道自己所爱之人是否安全。无论是9.11还是1989年的的洛马普列塔地震,都让我深深地有这样的感觉。
地震转瞬即来。当我们确认建筑不会崩塌后,第一反应会想去确认亲人的安全,但在这时想要拨出电话基本是不可能的。电话在一瞬间从全国各地涌入湾区,信息堵塞。我们只能紧张地看着电视里播报的灾难消息,满心焦灼但无能为力。
经过了四分之一个世纪后,这种情况是否有所改变?
Facebook的“Safety Check”功能做到了这一点。当有灾难发生时,他们会给在灾难区域的人们发送一条推送以确认安全,当确认你的安全后Facebook会立即告诉你的朋友:“别担心,他还安全。”
这一功能由Facebook工程师Brian Sa在2011年的神户大地震后激发的灵感。地震 发生后,Brain在Facebook的首页放了一个各种帮助信息的Banner,但随后他进一步去想开发一个新功能,以便更好帮助受灾者,这便是“Safety Check”的雏形。
为什么只有Facebook能创造Safety Check?
Facebook不仅拥有你所希望的资源,更是一家会让员工去开发Safety Check这种疯狂举动的公司。此外,Facebook拥有超过15亿用户,按“六度空间”理论,人与人之间的间隔度仅为4.74,并且Facebook的用户都是社交狂人,能实现信息的即时传递。
那么,Facebook开发“Safety Check”又是基于什么样的想法呢?Peter和Brian是这么认为的:
如ReadWriterWeb、支持同性婚姻的彩虹滤镜等Facebook上的 案例让他们有了“在灾难期间,帮助他人更好确保朋友知道自己安全”的想法: 在灾难期间,人们可以更新自己的状态表示自己“安全”。
但是,这并不是一个让别人知道自己还“安全”的最佳解决方案,因为:
Brain想用更结构化的方法来再Safety Check解决这一问题。那么,
所以问题来了:你是如何建立一个用户是否在灾难发生地?一个容易想到的解决方案是 构建地理索引(GeoIndex)的确是,但它有很多不足:
而且: 比起考虑如何保留一个平时几乎用不到的的数据通道,解决方案必须考虑事件的突发性,即:一旦突发事件发生时,这个功能是 动态即时可用 的。 最后解决方案 综合了社交图谱的轮廓及属性 :
在实践过程中,这个方案是非常有效的。算法可以很快地寻找到人,以至于让人觉得它是即时发生,没有延迟。例如说,一群人在同一个房间的人会在同一时间收到他们的提示信息。这是如何做到的?
秘诀在于:
但另一个问题又出现了: Safety Check能够自由地使用并行服务器去处理不同的用户请求,包括用户的好友。 这个时候,分布式解决方案可能会出现这样的问题:
设身处地想象 一下:如果户一下子收到多个确认他平安的通知,这会反而会增加用户的焦虑感。
解决方法是:
在尼泊尔地震中:
在经历了一些麻烦后,Safety Check发布了第一个版本。
但由于Facebook系统本身的复杂性,这个功能被暂时隐藏了,只有当发生紧急情况时,它才得以被启用。 例如刚刚发生的奥兰多枪击案 。
点击此处可阅读Highscalability的原文。
原创文章,未经授权禁止转载。详情见 转载须知 。