7天,一個人,沒有團隊,沒有聯合創始人,沒有實習生,就一臺筆記本和過量的咖啡——一個叫“Burn Chat”的聊天應用跑起來了。它的核心賣點就一個:創建聊天室時設定倒計時,時間一到,每條消息從所有人的屏幕上消失,服務器端徹底刪除,沒歷史、沒日志、沒導出,也沒有“已刪除消息”文件夾。永遠消失。
這事的起因也挺無厘頭。看完一部間諜電影,“這條消息將在5秒后自毀”的橋段實在太酷,于是凌晨2點打開VS Code,沒去睡覺。現在回想,那個時間點列的愿望清單本身就透露著一種不管不顧的執念:倒計時器(5分鐘到24小時)、端到端加密(服務器絕不能讀到消息)、計時歸零時所有人同時看見火焰動畫、一個鏈接就加入無需注冊、房主有PIN碼可以踢人/鎖房/延長時間,以及最關鍵的一條——絕對不在磁盤或數據庫里存任何東西。既然叫“短暫”,就必須是真的短暫,而不是“我們為合規保留30天日志”那種短暫。
能撐起這種“真消失”的架構也很直白。簡單說,服務器就是個盲信使。它在每個瀏覽器之間只轉發base64亂碼,不知道原消息是什么。加密是這樣運作的:每個人本地生成密鑰對,發公鑰到服務器(只存在內存里,不落盤),對方拿到公鑰后用AES-GCM加密消息,服務器轉發的就是一堆base64 blob。因為服務器從頭到尾沒有私鑰,它真就解密不了,不是營銷話術。這張在餐巾紙上畫出來的架構圖,實際實現時更粗暴:后端用Python寫,會話數據扔在一個普通字典里。
你沒看錯,就是 Dict[str, _ChatSession] = {},一個內存里的字典。有人會說這沒法擴展。但作者覺得這不是bug是feature:如果用Redis,Redis是數據庫,數據庫就會寫磁盤,數據沾了磁盤就可能被恢復。一個只在內存里、進程重啟就消失的字典,恰恰符合設計目標。他還補了一句:“我現在就一個人,就一個進程(dyno),跑得好好的。哪天要擴展了,再搞粘性會話加帶過期鍵的Redis。不是今天。”每個會話都掛一個倒計時任務,時間耗盡那一刻,所有數據無痕蒸發。
當然,成品里也藏著不少“完全搞錯”的部分和讓自己得意的點。那些搞錯的路,剛好印證了凌晨2點的腦洞落地時該有的誠實:一邊把本應用字典當存儲的自嘲寫進代碼注釋,一邊堅持“不寫日志就是最大的安全”;一邊承認單機架構不講伸縮性,一邊把點燃全屏火焰動畫的同步細節死磕出來。最后這把火,成了Burn Chat名字最好的注腳。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.